【问题标题】:Syslog forwared HAProxy logs filtering in LogstashLogstash 中的 Syslog 转发 HAProxy 日志过滤
【发布时间】:2014-12-08 11:37:34
【问题描述】:

我在理解如何正确执行此操作时遇到问题。

我有以下 Logstash 配置:

input {
  lumberjack {
    port => 5000
    host => "127.0.0.1"
    ssl_certificate => "/etc/ssl/star_server_com.crt"
    ssl_key => "/etc/ssl/server.key"
    type => "somelogs"
 }
}

output {
  elasticsearch {
    protocol => "http"
    host => "es01.server.com"
  }
}

使用 logstash-forwarder,我将 syslog 生成的 haproxy.log 文件推送到 logstash。然后 Kibana 向我展示了一个 _source,如下所示:

{"message":"Dec 8 11:32:20 localhost haproxy[5543]: 217.116.219.53:47746 [08/Dec/2014:11:32:20.938] es_proxy es_proxy/es02.server.com 0/0/1/18/20 200 305 - - ---- 1/1/1/0/0 0/0 \"GET /_cluster/health HTTP/1.1\"","@version":"1","@timestamp":"2014-12-08T11:32:21.603Z","type":"syslog","file":"/var/log/haproxy.log","host":"haproxy.server.com","offset":"4728006"}

现在,这必须被过滤(以某种方式),我不得不承认我一点也不知道如何过滤。
看着 the grok documentation 和摆弄 grok debugger 我仍然没有从 Logstash 和 Kibana 中得到任何有用的东西。

我一直在扫描模式目录及其文件,但我不能说我了解如何使用它们。我希望提供一个带有 haproxy 模式 Logstash 的过滤器将匹配我的 _source 中的模式,但那没有任何运气。

【问题讨论】:

    标签: logstash logstash-grok logstash-forwarder


    【解决方案1】:

    您很幸运,因为已经有一个预定义的 grok 模式似乎可以解析这种确切类型的日志。您所要做的就是在grok filter 中引用它:

    filter {
      grok {
        match => ["message", "%{HAPROXYHTTP}"]
      }
    }
    

    %{HAPROXYHTTP} 将根据pattern definition 递归展开,每一行输入中的每一个有趣的片段都会被提取到自己的字段中。您可能还想在成功应用 grok 过滤器后删除“消息”字段,因为它无论如何都包含冗余数据;只需在 grok 过滤器声明中添加 remove_field => ["message"]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 2015-05-04
      • 2018-10-27
      相关资源
      最近更新 更多