可以看到,该消息不仅仅是消息,还包含日期和时间戳。
。 。
这是 MySQL 日志:/var/log/mysql/error.log
150630 9:01:29 [Warning] Access denied for user 'test1'@'localhost' (using password: YES)
150630 9:03:39 [Warning] Access denied for user 'test3'@'localhost' (using password: YES)
150630 9:07:48 [Warning] Access denied for user 'test5'@'localhost' (using password: YES)
150630 9:10:00 [Warning] Access denied for user 'test7'@'localhost' (using password: YES)
150630 9:12:21 [Warning] Access denied for user 'test9'@'localhost' (using password: YES)
这是 Logstash-shipper 配置:/etc/logstash/shipper/conf.d/20-filter.conf
else if [type] == "mysql" {
grok {
patterns_dir => "/etc/logstash/patterns"
match => [ "message", "%{MYSQLLOG}" ]
overwrite => [ "message" ]
}
}
模式如下:
MYSQLLOG %{NUMBER:date} %{TIME:time} \[%{LOGLEVEL:loglevel}\] %{GREEDYDATA:message}
我已经尝试修复这个问题好几个星期了,实际上我曾经让它工作过,但如果我没有干预,它又停止工作了。有什么关于调试的技巧吗?
答案1
看起来您的日志条目在date
和time
字段之间有一个多余的空格,所以您的 grok 不匹配,_grokparsefailure
标签的存在证明了这一点。
尝试一下这个模式:
%{NUMBER:date} %{TIME:time} \[%{LOGLEVEL:loglevel}] %{GREEDYDATA:message}
我已经在Grok 构造函数并且它与您提供的所有行相匹配。