ELK 之logstash filter grok常见内置模式

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 方法(如 GETPOST)。

    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 进行日志解析!如果有更多问题或者需要示例,随时可以问我。

相关推荐
mazo_command2 小时前
【MATLAB课设五子棋教程】(附源码)
开发语言·matlab
IT猿手2 小时前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
青春男大2 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
88号技师2 小时前
几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
Zer0_on2 小时前
数据结构栈和队列
c语言·开发语言·数据结构
一只小bit2 小时前
数据结构之栈,队列,树
c语言·开发语言·数据结构·c++
一个没有本领的人2 小时前
win11+matlab2021a配置C-COT
c语言·开发语言·matlab·目标跟踪
一只自律的鸡3 小时前
C项目 天天酷跑(下篇)
c语言·开发语言
源码哥_博纳软云3 小时前
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
沐泽Mu3 小时前
嵌入式学习-QT-Day05
开发语言·c++·qt·学习