我正在尝试使用下面的配置文件和模式解析fail2ban
日志文件(通过在线教程)。
但是我得到一个grok解析错误,任何想法如何解决这个问题?
日志文件格式:
2017-02-13 18:49:52,567 fail2ban.actions [1365]: NOTICE [sshd] Ban 127.0.0.1
logstash config:
input {
file {
type => "fail2ban"
start_position => "beginning"
path => [ "/var/log/fail2ban.log" ]
}
}
filter {
if [type] == "fail2ban" {
grok {
patterns_dir => "/etc/logstash/patterns"
match => [
"message", "%{F2B_DATE:date} %{F2B_ACTION} %{WORD:level} %{F2B_JAIL} %{WORD:action} %{IP:ip}",
"message", "%{F2B_DATE:date} %{F2B_ACTION} %{F2B_LEVEL} %{GREEDYDATA:msg}?"
]
}
geoip {
source => "ip"
}
}
}
模式配置:
F2B_DATE %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[ ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})
F2B_ACTION (\w+)\.(?:\w+)(\s+)?\:
F2B_JAIL \[(?<jail>\w+\-?\w+?)\]
F2B_LEVEL (?<level>\w+)\s+
答案 0 :(得分:0)
我认为您错过了匹配中的胡萝卜 ^
符号,这意味着要说明这是的地方>在日志行中使用,开始。如果你有匹配,该怎么办:
match => [
"message", "^%{F2B_DATE:date} %{F2B_ACTION} %{WORD:level} %{F2B_JAIL} %{WORD:action} %{IP:ip}",
"message", "^%{F2B_DATE:date} %{F2B_ACTION} %{F2B_LEVEL} %{GREEDYDATA:msg}?"
]
答案 1 :(得分:0)
F2B_ACTION模式失败。 使用您提供的示例:
2017-02-13 18:49:52,567 fail2ban.actions [1365]: NOTICE [sshd] Ban 127.0.0.1
并使用以下Grok模式:
%{F2B_DATE:date} %{GREEDYDATA:failtoban.actions} %{F2B_LEVEL} %{F2B_JAIL} %{WORD:action} %{IP:ip}
我得到了这个结果:
{
"date": [
"2017-02-13 18:49:52,567"
],
"failtoban": [
"fail2ban.actions [1365]:"
],
"level": [
"NOTICE"
],
"jail": [
"sshd"
],
"action": [
"Ban"
],
"ip": [
"127.0.0.1"
]
}
我使用了%{GREEDYDATA:failtoban.actions} ,因为我不确定哪个值可以有效,但是问题解决了。