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
, IP
và Port
.
- 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ọnSave
để 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ấmManage 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ặcExport
các Extractor, ta có thể kích vàoActions
, 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, litespeed.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!