Logstash 的 grok
过滤器是一种用于解析非结构化日志数据的强大工具。grok
使用了一系列模式来解析和提取日志消息中的数据。这些模式可以用来识别并提取特定的数据字段,如 IP 地址、日期、URL、数字等。grok
提供了一些常见的内置模式,以下是一些最常见的模式及其描述:
常见的 Grok 内置模式
1. 通用模式
-
%{GREEDYDATA}
: 捕获所有数据直到行结束。这是最宽松的模式,适用于无法确定具体格式的数据。grok%{GREEDYDATA:field_name}
-
%{WORD}
: 捕获一个单词(不包含空格的连续字符串)。grok%{WORD:field_name}
-
%{NOTSPACE}
: 捕获所有非空白字符的连续字符串。grok%{NOTSPACE:field_name}
-
%{SPACE}
: 捕获空白字符(包括空格、制表符等)。
2. 数字相关模式
-
%{NUMBER}
: 捕获一个数值(整数或浮点数)。grok%{NUMBER:field_name:int} # 捕获整数 %{NUMBER:field_name:float} # 捕获浮点数
-
%{INT}
: 捕获整数。grok%{INT:field_name}
-
%{BASE10NUM}
: 捕获十进制数。grok%{BASE10NUM:field_name}
3. 网络相关模式
-
%{IP}
: 捕获 IPv4 地址。grok%{IP:field_name}
-
%{IPV6}
: 捕获 IPv6 地址。grok%{IPV6:field_name}
-
%{HOSTNAME}
: 捕获主机名(可以是域名或简单的主机名)。grok%{HOSTNAME:field_name}
-
%{URI}
: 捕获完整的 URI。grok%{URI:field_name}
-
%{URIPATH}
: 捕获 URI 路径。grok%{URIPATH:field_name}
-
%{URIPARAM}
: 捕获 URI 参数。grok%{URIPARAM:field_name}
4. 日期和时间相关模式
-
%{TIMESTAMP_ISO8601}
: 捕获 ISO 8601 格式的时间戳。grok%{TIMESTAMP_ISO8601:field_name}
-
%{DATE}
: 捕获常见的日期格式(如yyyy-MM-dd
)。grok%{DATE:field_name}
-
%{TIME}
: 捕获时间(如HH:mm:ss
)。grok%{TIME:field_name}
-
%{DATESTAMP}
: 捕获常见的日期时间格式(如yyyy-MM-dd HH:mm:ss
)。grok%{DATESTAMP:field_name}
5. 文件和路径相关模式
-
%{PATH}
: 捕获文件路径。grok%{PATH:field_name}
-
%{FILENAME}
: 捕获文件名。grok%{FILENAME:field_name}
6. HTTP 相关模式
-
%{HTTPMETHOD}
: 捕获 HTTP 方法(如GET
、POST
)。grok%{HTTPMETHOD:field_name}
-
%{HTTPURL}
: 捕获 HTTP URL。grok%{HTTPURL:field_name}
-
%{HTTPVERSION}
: 捕获 HTTP 版本(如HTTP/1.1
)。grok%{HTTPVERSION:field_name}
-
%{HTTPDUSER}
: 捕获 HTTP 用户。grok%{HTTPDUSER:field_name}
7. 其他常见模式
-
%{EMAILADDRESS}
: 捕获电子邮件地址。grok%{EMAILADDRESS:field_name}
-
%{MAC}
: 捕获 MAC 地址。grok%{MAC:field_name}
-
%{UUID}
: 捕获 UUID。grok%{UUID:field_name}
-
%{SYSLOGBASE}
: 捕获 syslog 基本信息。grok%{SYSLOGBASE:field_name}
Grok 模式示例
以下是一些使用 grok
模式解析日志的示例:
示例 1: 解析 Apache 日志
假设我们有如下 Apache 日志:
127.0.0.1 - frank [10/Oct/2023:13:55:36 +0000] "GET /apache_pb.gif HTTP/1.0" 200 2326
可以使用以下 grok 模式来解析:
grok
%{IP:client_ip} - %{WORD:client_id} \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{URIPATH:request} HTTP/%{NUMBER:http_version}" %{NUMBER:response_code} %{NUMBER:bytes}
示例 2: 解析 Syslog 日志
假设我们有如下 Syslog 日志:
Aug 6 10:12:15 localhost sshd[12345]: Failed password for invalid user from 192.168.1.1 port 22 ssh2
可以使用以下 grok 模式来解析:
grok
%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:host} %{WORD:process}\[%{NUMBER:pid}\]: %{GREEDYDATA:message}
自定义 Grok 模式
有时候,内置模式可能无法完全满足需求。这时可以定义自定义模式,例如:
grok
MYWORD [a-zA-Z]+
MYDATE %{YEAR}-%{MONTHNUM}-%{MONTHDAY}
使用自定义模式:
grok
%{MYWORD:custom_word} %{MYDATE:custom_date}
总结
Logstash 的 grok
过滤器是一个非常强大的工具,通过内置的模式可以方便地解析各种格式的日志数据。同时,你还可以通过自定义模式满足更复杂的日志解析需求。
希望这些信息能帮助你更好地使用 Logstash 进行日志解析!如果有更多问题或者需要示例,随时可以问我。