我在理解如何正确理解这个问题时遇到了问题。
我有以下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
的模式但是没有任何运气。
答案 0 :(得分:9)
你很幸运,因为已经有一个预定义的grok模式,它似乎可以解析这种确切的日志类型。您所要做的就是在grok filter:
中引用它filter {
grok {
match => ["message", "%{HAPROXYHTTP}"]
}
}
%{HAPROXYHTTP}
将根据pattern definition递归扩展,并且每行输入中的每个有趣部分将被提取到其自己的字段。您可能还想在成功应用grok过滤器后删除“消息”字段,因为它无论如何都包含冗余数据;只需将remove_field => ["message"]
添加到grok过滤器声明中。