Logstash Grok Parse Error - fail2ban日志

时间:2017-02-16 03:45:16

标签: logstash-grok grok fail2ban

我正在尝试使用下面的配置文件和模式解析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+

2 个答案:

答案 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} ,因为我不确定哪个值可以有效,但是问题解决了。