【ELK-logstash】 grok解析耗时优化

本文讨论了一种改进grok解析方法,通过合并匹配条件并添加关键匹配规则,有效缩短了日志文件数据处理时间。重点介绍了如何在kibana中调试和优化解析过程,最终实现解析效率提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日志文件数据

I0902 05:56:12.855851       1 trace.go:76] Trace[540753199]: "GuaranteedUpdate etcd3: *core.Node" (started: 2018-09-02 05:56:11.933514274 +0000 
UTC m=+171.998961960) (total time: 922.28044ms):
Trace[540753199]: [922.15204ms] [920.458996ms] Transaction committed
I0902 05:56:12.855507       1 wrap.go:42] GET /api/v1/nodes/192.168.10.224/status?timeout=10s: (465.699309ms) 200 [[kubelet/v1.10.2 (linux/amd64) kubernetes/81753b1] 192.168.10.186:42050]

grok解析

filter{
  #masternode
  if[fields][module]=="k8s" {
  if[fields][name]=="apiserver" {
      grok{
  	    id => "k8s-apiserver"
        match => {
          "message" => ["^%{LOCALLEVLE:[k8s][apiserver][level]}%{K8STIME:[k8s][apiserver][timestamp]}\s*%{DATA:[k8s][apiserver][thread]}\s%{DATA:[k8s][apiserver][class]}\] %{DATA:[k8s][apiserver][method]} %{DATA:[k8s][apiserver][url]}\s\(%{DATA:[k8s][apiserver][usetime]}\) %{DATA:[k8s][apiserver][status]}\s%{GREEDYDATA:[k8s][apiserver][message]}",
          "^%{LOCALLEVLE:[k8s][apiserver][level]}%{K8STIME:[k8s][apiserver][timestamp]}\s*%{DATA:[k8s][apiserver][thread]}\s%{DATA:[k8s][apiserver][class]}\] %{GREEDYDATA:[k8s][apiserver][message]}"]
        }
        pattern_definitions => {
          "LOCALLEVLE" => "\w"
          "K8STIME" => "[0-9]+ ([0-9]|\s)?[0-9]:[0-9][0-9]:[0-9][0-9](\.[0-9]+)?"
        }
        remove_field => "message"
      }
      date {
        match => [ "[k8s][apiserver][timestamp]", "MMdd HH:mm:ss.SSSSSS" ]
        timezone => "+00:00"
      }
  }

由于这个匹配条件是多个正则表达式,解析时第一个不正确,解析第二个正确。

grok对一个event耗时处理在70ms/e,花费时间比较长了。

修改如下:

filter{
  #masternode
  if[fields][module]=="k8s" {
  if[fields][name]=="apiserver" {
      grok{
        id => "k8s-apiserver"
        match => {
          "message" => "^%{LOCALLEVLE:[k8s][apiserver][level]}%{K8STIME:[k8s][apiserver][timestamp]}\s*%{DATA:[k8s][apiserver][thread]}\s%{DATA:[k8s][apiserver][class]}\] (%{K8sMETHOD:[k8s][apiserver][method]} %{DATA:[k8s][apiserver][url]}\s\(%{DATA:[k8s][apiserver][usetime]}\) %{DATA:[k8s][apiserver][status]}\s)?%{GREEDYDATA:[k8s][apiserver][message]}"
        }
        pattern_definitions => {
          "LOCALLEVLE" => "\w"
          "K8STIME" => "[0-9]+ ([0-9]|\s)?[0-9]:[0-9][0-9]:[0-9][0-9](\.[0-9]+)?"
          "K8sMETHOD" => "PATCH|GET|PUT|POST|DELETE"
        }
        remove_field => "message"
      }
      date {
        match => [ "[k8s][apiserver][timestamp]", "MMdd HH:mm:ss.SSSSSS" ]
        timezone => "+00:00"
      }
  }

在kibana上进行grok debugger调试

结果在kibana的x-pack显示,只有0.02ms/s。

总结:在grok解析错误时会影响时间会延长,把2个匹配条件合并成一个条件,重点是添加K8sMETHOD 这个匹配规则。兼容上面出现的两种日志数据格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值