1

我正在尝试fail2ban使用下面的配置文件和模式(通过在线教程)解析日志文件。

但是我遇到了一个 grok 解析错误,有什么想法可以解决这个问题吗?

日志文件格式:

2017-02-13 18:49:52,567 fail2ban.actions    [1365]: NOTICE  [sshd] Ban 127.0.0.1

日志存储配置:

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+
4

2 回答 2

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}因为我不确定哪些值是有效的,但是问题已经解决了。

于 2018-09-12T13:27:26.590 回答
0

我认为您在match中遗漏了胡萝卜 ^符号,这意味着在日志行中对模式说这是从哪里开始。如果你有这样的比赛怎么办:

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}?"
]
于 2017-02-16T09:50:19.017 回答