虚拟化容器,大数据,DBA,中间件,监控。

ELK logstash过滤插件Grok的使用

20 12月
作者:admin|分类:大数据

过滤插件:Grok


如果业务项目都能够按照json格式输出的话那么处理起来会很容易,那么使用之前的json插件就可以快速解析为结构化的数据。但是有些日志的格式就不符合json格式也不能自定义,那么kv json插件就用不到的。

Grok插件可以支持正则,能够从非结构化的日志当中提取出关键字段,负责将非结构化数据解析为结构化的数据,logstash默认支持了很多正则

Grok插件:如果采集的日志格式是非结构化的,可以写正则表 达式提取,grok是正则表达式支持的实现。 常用字段:
  • match 正则匹配模式
  • patterns_dir 自定义正则模式文件

Logstash内置的正则匹配模式,在安装目录下可以看到,路径:

[root@localhost ~]# cat /usr/local/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns 
USERNAME [a-zA-Z0-9._-]+
USER %{USERNAME}
EMAILLOCALPART [a-zA-Z][a-zA-Z0-9_.+-=:]+
正则匹配模式语法格式:%{SYNTAX:SEMANTIC}
  • SYNTAX 模式名称,模式文件中的第一列
  • SEMANTIC 匹配文件的字段名
例如: %{IP:client}
 
 

如何使用其内置的正则匹配模式?


这里是kiban内置对grok表达式测试的功能

请求的客户端ip 请求的方法 请求的uri  返回数据大小 相应时间

192.168.1.10 GET /index.html 15824 0.043

现在使用grok的内置正则匹配模式,怎么取出来?

IPV4 (?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])

%{IPV4:client_ip}

IPV4 内置正则表达式第一列的名称 冒号后面跟着的是你将匹配的结果保存在日志数据的字段名是什么,这个字段名会存在es里为我们在kibana里面去查询,所以这个字段要取名有意义

WORD \b\w+\b 匹配文本

再匹配,这里是uri

URIPATHPARAM %{URIPATH}(?:%{URIPARAM})?  匹配uri路径

 将数字配匹

NUMBER (?:%{BASE10NUM})

%{IPV4:ip} %{WORD:method} %{URIPATHPARAM:uri} %{NUMBER:bytes} %{NUMBER:durtion}

 

这里不使用grok做过滤

[root@localhost ~]# echo "192.168.1.10 GET /index.html 15824 0.043" >> /var/log/test.log

可以看到在Kibana里面meaasge还是保存了原始的字段

 

这行日志为非结构化的日志,就不利于我们去查询了,比如请求时间大于1S的请求,要进行优化处理。所以要将非结构化的日志转化为结构化的日志,将关键的信息转化为字段,这样就可以针对某个字段进行针对性查询。

[root@localhost ~]# cat /usr/local/logstash/conf.d/test.conf 
input {
  file {
    path => "/var/log/test.log"
  }
}

filter {
 grok {
   match => {
   "message" => "%{IPV4:client_ip} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"
  } 
 } 
}

output {
  elasticsearch {
    hosts => ["192.168.179.102:9200"]
    index => "test-%{+YYYY.MM.dd}"
 }
}

[root@localhost ~]# echo "192.168.1.10 GET /login.html 12345 0.666" >> /var/log/test.log

 可以看到根据字段可以组合起来进行查询这就是做结构化日志最重要的目的

浏览594 评论0
返回
目录
返回
首页
Kubernetes ELK日志采集思路 ELK logstash KV过滤插件