介绍
介绍
今天福哥要带着大家学习Logstash的grok工具的使用技巧。grok是一个日志编辑工具,通过grok可以针对传入的日志数据进行随心所欲的编辑,包括字段提取、添加字段、删除字段等等。
根据ELK的设计思想日志最好是存储到ES引擎里面方便后面的日志查询和日志分析,而ES引擎的存储格式是JSON格式,但是各种软件的日志不一定是JSON格式的,这个时候就需要通过grok把传入的各种格式的日志数据转换成JSON格式了。
提取器
语法
格式
%{[提取器]:[字段名称]}
示例
%{IPV4:clientIP}
常用范例
IPORHOST
数据为IP地址或者主机名称。
USER
数据为用户名或者密码。
HTTPDATE
数据为HTTP风格的日期。类似如下格式:
21/Feb/2022:21:56:50 +0800
WORD
数据为字符串。
DATA
数据为数据。
NUMBER
数据为普通数字,包括int和float。
%{NUMBER:bytes}
数据为整型数字。
%{NUMBER:status:int}
QS
数据为双引号括起来的字符串类型。
更多范例
https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns
实践
Nginx
福哥以nginx的access.log的日志为例,做一个解析日志数据字段的配置例子。
原始日志格式
这是nginx记录到access.log日志文件里面的数据格式。
grok解析
filter { if "access.log" in [log][file][path] { grok { match => { "message" => "%{IPORHOST:clientip} \- %{USER:user} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{DATA:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:httpstatus:int} %{NUMBER:bytes:int} %{QS:referrer} %{QS:useragent}" } } mutate { gsub => ["useragent", "\"", ""] gsub => ["referrer", "\"", ""] remove_field => ["agent", "ecs", "event", "message", "tags"] } } }
改造过日志格式
总结
今天福哥带着童鞋们学习了Logstash的grok工具的日志字段提取的技巧,可以看出来通过grok提取日志字段之后可以将普通的文本格式的数据拆分出一个一个的字段组合成JSON格式的数据,JSON格式的数据可以通过Logstash存储到ES引擎里面,这样就可以通过ES引擎进行各种分析处理了。