如何在Logstash中截取部分消息

sqserrrh  于 2023-03-11  发布在  Logstash
关注(0)|答案(1)|浏览(282)

我有一些微服务,它们是用Docker部署的。它们通过日志驱动程序syslog将日志发送到我的Logstash。

input {
  syslog {
    port => 9771
    type => "syslog"
  }
}

filter {
}

output {
  file {
    path => "/var/log/logstash/%{+YYYY-MM-dd}/logstash-%{+HH}.log"
  }
  if "www.envoyproxy.io" in [message] {
    file {
      path => "/var/log/logstash/%{+YYYY-MM-dd}/test-%{+HH}.log"
      codec => line { format => "%{message}" }
    }
  }
}

我可以在文件test-01.log中看到如下日志:

<30>Mar  8 11:42:45 2867370d06d5[8119]: 172.16.0.226,48982,envoy,2023-03-08T03:42:39.340Z,34.142.199.10,443,-,www.envoyproxy.io,HTTP/1.1,GET,/,HTTP/1.1,200,17304,2023-03-08T03:42:39.340Z,17304,-,-,curl/7.29.0,-,1000,0,0,0,0,0,0,0,0,0,0,0

我想在将日志写入文件test-01.log之前删除部分<30>Mar 8 11:42:45 2867370d06d5[8119]:,但我不知道如何删除。

zpgglvta

zpgglvta1#

您可以将Logstash grok过滤器(docs)添加到管道中,以提取消息部分并删除不需要的前缀,然后再将其写入输出文件。

filter {
  if "www.envoyproxy.io" in [message] {
    grok {
      match => { "message" => "%{GREEDYDATA}\]: %{GREEDYDATA:message}" }
    }
  }
}

相关问题