ELK Logstash 自定义正则模式patterns_dir

如果过滤插件里面自带的正则匹配无法满足你的需求,那么你可以写自己的正则匹配规则,如何使用,CID [0-9]{5,6}这个是自定义规则

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

filter {
 grok {
   patterns_dir => "/opt/patterns"
   match => {
   "message" => "%{IPV4:client_ip} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration} %{CID:id}"
  } 
 } 
}

output {
  elasticsearch {
    hosts => ["192.168.179.102:9200"]
    index => "test-%{+YYYY.MM.dd}"
 }
}
[root@localhost ~]# cat /opt/patterns
CID [0-9]{5,6}

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

192.168.1.10 GET /login.html 12345 

(?<ip>\d+\.\d+\.\d+\.\d+) (?<method>\w+) (?<request>/.*) (?<bytes>\d+)

可以看到根据我们写的正则也可以进行字段的过滤,其他日志类型也可以写类似的

 

Grok多模式匹配(兼容多种日志)


如果一个日志文件下有多个日志格式怎么办?例如项目新版本添加一个日志字段,需要兼容旧日志匹配 使用多模式匹配,写多个正则表达式,只要满足其中一条就能匹配成功
例如:
# cat /opt/patterns
CID [0-9]{5,6}
TAG \w+
filter {
  grok {
  patterns_dir =>"/opt/patterns"
  match => [
  "message", "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration} %{CID:cid}",
  "message", "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration} %{EID:eid} %{TAG:tag}"
   ] 
  } 
}

Elasticsearch

grok {
      match => ["message", "\[%{TIMESTAMP_ISO8601:timestamp}\]\[%{DATA:loglevel}%{SPACE}\]\[%{DATA:source}%{SPACE}\]%{SPACE}\[%{DATA:node}\]%{SPACE}\[%{DATA:index}\] %{NOTSPACE} \[%{DATA:updated-type}\]",
                "message", "\[%{TIMESTAMP_ISO8601:timestamp}\]\[%{DATA:loglevel}%{SPACE}\]\[%{DATA:source}%{SPACE}\]%{SPACE}\[%{DATA:node}\] (\[%{NOTSPACE:Index}\]\[%{NUMBER:shards}\])?%{GREEDYDATA}"]
   }

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值