Grok patterns là kỹ thuật xác định cấu trúc log data, có thể sử dụng grok pattens sẵn có hoặc tạo các mẫu grok tùy chỉnh. Grok patterns có thể lọc thông tin và xử lý bản tin log, extract thành trường riêng tùy thuộc vào mục đích của người giám sát log.

Để làm được bài lab này, trước tiên ta cần thực hiện việc cài đặt và cấu hình Graylog-server và Graylog-sidecar để có được log ssh đẩy về Graylog-server. Nếu bạn chưa biết cài hay mới bắt đầu sử dụng có thể tham khảo 2 bài lab trên ở các link sau: Trước tiên cần cài Graylog-server, sau đó ta sử dụng Graylog-sidecar để thu thập log của linux.

1. Tạo Grok với bản tin ssh thông thường

  • Đầu tiên, để Extract 1 bản tin ssh với Grok. Nhấp vào bản tin ssh và lăn chuột đến phần message.
  • Nhấp vào phần message của bản tin ssh.

Sau khi nhấp vào phần message, sẽ hiện lên 1 trường. Chọn Create Extractor để Extract message này.

  • Tiếp đến chọn Grok pattern
  • Chọn Submit để bắt đầu extract.
  • Phần giao diện tạo Extract như sau:

Trong đó New extractor for input Beats chỉ ra rằng message này đẩy qua input có tên là là Beats, cũng là chỉ ra nơi quản lý Extractor này.

Phần Filter pattern để tìm kiếm và chọn các kiểu dữ liệu có sẵn giúp cho việc Extract.

Phần Pattern để nhập vào các kiểu dữ liệu để extract ra các cột riêng.

Đối với bản tin log này, ta sẽ thực hiện Extract ra thành các cột Datetime, Hostname, Acction, User, IPPort.

  • Tích chọn Named captures only để loại bỏ những trường không cần thiết (các trường không được định nghĩa)
  • Đầu tiên ta sẽ Extract ra trường Datetime

Sử dụng trường Filter pattern để search và chọn 1 kiểu dữ liệu phù hợp với dữ liệu của bản tin log. Sau đó chọn add để thêm vào Patterns. Sử dụng : để đặt tên cho kiểu dữ liệu extract ra.

Đối với mỗi lần nhập vào dữ liệu có thể sử dụng Try against example để kiểm tra đầu ra dữ liệu.

  • Tiếp theo là phần hostname có kiểu dữ liệu là word. Chọn kiểu là WORD và đặt tên là Hostname.
  • Phần tiếp ta không có ý định lấy dữ liệu và extract ra nên ta không định nghĩa kiểu dữ liệu và nhập nguyên dữ liệu đó ra sau.
  • Tương tự như vậy, số thì có kiểu dữ liệu là INT, ip có kiểu dữ liệu là IPV4 ta extract ra các trường còn lại là Acction, User, IP, Port. Những trường nào không có ý định Extractor thì không sử dụng kiểu dữ liệu và giữ nguyên các đoạn dữ liệu đó:
%{SYSLOGTIMESTAMP: DateTime} %{DATA:Hostname} sshd\[%{INT}\]: %{WORD: Acction} password for.*(user)? %{DATA: User_ssh} from %{IPV4: IP_ssh} port %{INT: Port} ssh2
  • Bấm Try against example để thử kết quả, ta có kết quả đã có những trường cần thiết được Extract ra từ bản tin ssh.
  • Đặt tên cho Extractor và bấm Create extractor để khởi tạo Extract cho bản tin này.
  • Sau khi Extractor, sử dụng ssh đăng nhập vào server để hiển thị log mới và kiểm tra lại các trường đã extract.

2. Sử dụng Grok mẫu và quản lý Extractor.

2.1 Sử dụng Grok mẫu để phục vụ quá trình extract

  • Vào System/Grok Patterns, tại đây sẽ hiện ra cửa sổ quản lý các mẫu grok.

Các mẫu grok này sử dụng trong quá trình Grok Extractor, ta có thể chọn thêm thủ công 1 pattern hoặc sử dụng các pattern có sẵn để việc extract trở nên dễ dàng và thuận tiện nhất.

Cũng có thể sử dụng tính năng import để tải lên 1 mẫu grok có sẵn từ các nguồn khác.

  • Để import 1 pattern, kích vào Import pattern file.

Trong phần lab này mình sẽ chỉ giới thiệu về Import thôi mà không đi sâu vào cách thực hiện. Chủ yếu mình dùng Create pattern để tạo thủ công để đi sâu vào mục đích sử dụng, nên phần này mình sẽ hướng dẫn tạo 1 pattern thủ công cụ thể là đối với log ssh.

  • Để tạo 1 pattern thủ công, kích vào Create pattern để tạo. Trong phần này mình sẽ hướng dẫn tạo pattern thủ công cho SSH để việc Extractor log ssh trở nên dễ dàng và thuận tiện hơn :

Ví dụ muốn tạo pattern dùng chung cho log ssh, ta nhập vào tên của pattern, sau đó nhập vào các kiểu dữ liệu để extract ra nhiều trường hoặc từng trường trong log ssh.

Lưu ý:  -  Mục Name để nhập vào tên pattern
- Mục pattern sử dụng để nhập vào các kiểu dữ liệu tương ứng với các trường trong bản tin ssh

%{SYSLOGTIMESTAMP} %{WORD} sshd[%{INT}]: %{WORD} password for %{WORD} from %{IPV4} port %{INT} ssh2

Đây là phần pattern chưa được định nghĩa cho các trường riêng, khi sử dụng để extract ta nên định nghĩa ( đặt tên) cho các trường mà mình mong muốn có được dữ liệu.

  • Sau đó nhập vào 1 đoạn dữ liệu mẫu và chọn Test with Sample Data để kiểm tra xem pattern có hiển thị theo ý muốn hay không. Sau đó chọn Save để lưu lại.

2.2 Giới thiệu về Manage extractors

  • Để quản lý các Extractor đã tạo, ta vào System/Inputs. Tại đây sẽ có các loại Input, bấm Manage Extractor để quản lý Extractor cho từng loại đầu vào (Input).
  • Tại đây ta có thể chỉnh sửa các Extractor, xóa hoặc tải lên 1 Extractor sẵn có.
  • Để Import hoặc Export các Extractor, ta có thể kích vào Actions, sau đó có thể chọn Import extractors hoặc Export extractors tùy vào mục đích sử dụng của mỗi người.

Như vậy mình đã hướng dẫn các bạn cách sử dụng cơ bản của Grok pattern để tạo 1 Extractor sử dụng cho log ssh. Có thể sử dụng chúng để tạo các Extractor cho nhiều loại log khác nhau.

Lưu ý: Mỗi Input phải có Extractor riêng, một Extractor của Input này không được áp dụng cho Input kia. 

Kết thúc bài tìm hiểu về cách sử dụng Grok đối với log ssh. Nếu bạn đang tìm hiểu về các kỹ thuật sử dụng trong graylog hoặc cách triển khai 1 bài lab về graylog, news.cloud365.vn của chúng mình cũng có riêng 1 chuỗi bài hướng dẫn cơ bản về graylog có thể tham khảo tại đây !

Chúc các bạn thành công!