📚概述
通常情况下,原始日志被采集上来之后,需要通过编写正则进行日志字段的解析,以便用来进行日志分析,看板的制作。
📗Grok Patterns配置
graylog
默认提供了很多规则,如果可以满需求,直接使用即可。没有可用的可根据正则表达式自定义配置
🎄graylog新增Grok Patterns配置
- 点击
System/Grok Patterns
,进入页面后点击Create pattern
新增规则
配置完规则就可以使用了。具体操作如下:
Search
中选中一条消息,点击message
,点击小三角选择create extractor
,然后选择Grok Pattern
根据选中的message
进行配置
格式说明:
- 简单讲解一下以
^%{IP:remote_addr}
为例,^
代表日志开头,大括号里面的IP
代表名为IP
的grok pattern
,可以在**System/Grok pattern
**中查到,冒号后边就是你要存储的字段名称为remote_addr
- 每一个配置中间需要加一个空格,否者会报错,例如:
%{TIMESTAMP_ISO8601:time_local} %{LOGLEVEL:level_name}
配置完以后,后续的日志就会按照配置规则进行分割,再次查看日志时,已经按照规则进行切割了
注意:
Named captures only
要勾选,这样配置就会按照我们指定的名称显示,否者会显示很多
配置完的规则可以在System/inputs
中查看
📐自定义日志配置示例
- 分发日志格式
# 格式:字段间以空格分开,前边标志信息和后续的日志信息用英文:分隔 包含空格。格式-> 时间 日志级别 代码信息 机器名称 ip地址 : 日志信息
时间 日志级别 日志代码位置 机器名称 IP地址 : 日志信息
2022-08-29 13:52:34 INFO [UnzipServer.cpp row:129] [SERVER_NAME:75本机] 192.168.124.75 : 收到下载列表,调用下载功能!
- 配置
%{TIMESTAMP_ISO8601:time_local} %{LOGLEVEL:level_name} %{CLASS_NAME_AND_ROW:class_info} %{SERVER_NAME:server_name} %{IP:client_ip}
配置说明:
%{TIMESTAMP_ISO8601:time_local}
:解析日志时间,存储为time_local
%{LOGLEVEL:level_name}
:解析日志级别,存储字段为level_name
自定义正则:CLASS_NAME_AND_ROW
\[\s*[a-zA-z0-9]+\.[a-zA-z0-9]+\s*[a-zA-z]+\:[0-9]*\s*\] # [UnzipServer.cpp row:129] 匹配 \s*匹配为一个或多个空格
- 解析结果
time_local
2022-08-29 15:02:59
level_name
INFO
💡nginx日志配置示例
nginx
日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$http_host" "$request" '
'$status $body_bytes_sent $request_length $content_length'
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for"'
'"$upstream_addr" "$request_time" "$upstream_response_time"';
根据log_format
的输出格式编写相应的正则表达式。
简单讲解一下以^%{IP:remote_addr}
为例,^
代表日志开头,大括号里面的IP
代表名为IP
的grok pattern
,可以在System/Grok pattern
中查到,冒号后边就是你要存储的字段名称为remote_addr
%{IP:remote_addr}%{SPACE}-%{SPACE}%{DATA:remote_user}%{SPACE}\[%{HTTPDATE:time_local}\]%{SPACE}\"%{DATA:http_host}\"%{SPACE}\"%{NOTSPACE:method} %{NOTSPACE:url}%{SPACE}%{NOTSPACE:http_version}\"%{SPACE}%{NOTSPACE:status}%{SPACE}%{NOTSPACE:body_bytes_sent}%{SPACE}%{NOTSPACE:request_length}%{SPACE}%{NOTSPACE:content_length}%{SPACE}\"%{DATA:http_referer}\"%{SPACE}\"%{DATA:http_user_agent}\"%{SPACE}\"%{DATA:http_x_forwarded_for}\"%{SPACE}\"%{DATA:upstream_addr}\"%{SPACE}\"%{DATA:request_time}\"%{SPACE}\"%{DATA:upstream_response_time}\"
日志示例:
192.168.124.77 - - [02/Sep/2022:15:12:40 +0800] "10.0.204.66:18099" "GET /gdmp/biz_panorama/biz/alarm_statistic HTTP/1.1" 200 7741 781 -"http://localhost:8090/devops/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" "127.0.0.1""10.0.204.66:18090" "0.104" "0.103"
Grok Pattern
:
%{IP:remote_addr}%{SPACE}-%{SPACE}%{DATA:remote_user}%{SPACE}\[%{HTTPDATE:time_local}\]%{SPACE}\"%{DATA:http_host}\"%{SPACE}\"%{NOTSPACE:method} %{NOTSPACE:url}%{SPACE}%{NOTSPACE:http_version}\"%{SPACE}%{NOTSPACE:status}%{SPACE}%{NOTSPACE:body_bytes_sent}%{SPACE}%{NOTSPACE:request_length}%{SPACE}%{NOTSPACE:content_length}%{SPACE}\"%{DATA:http_referer}\"%{SPACE}\"%{DATA:http_user_agent}\"%{SPACE}\"%{DATA:http_x_forwarded_for}\"%{SPACE}\"%{DATA:upstream_addr}\"%{SPACE}\"%{DATA:request_time}\"%{SPACE}\"%{DATA:upstream_response_time}\"
📜Java日志配置
日志格式
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<property name="LOG_FORMAT" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
日志示例
2022-11-03 15:46:58.478 [http-nio-8081-exec-3] ERROR c.a.g.controller.LogGenerateController - error级别199952
Grok Patterns配置
%{TIMESTAMP_ISO8601:log_time} \[%{NOTSPACE:thread_name}\] %{LOGLEVEL:level_name} %{NOTSPACE:logger_name}