8

因此,我现在为正在运行的日志编写了几种模式。现在的问题是,我在一个文件中拥有这些具有多种模式的多个日志。logstash 如何知道它必须为日志中的哪一行使用什么样的模式?(我正在使用 grok 进行过滤)如果你们会非常友善,您能否给我文档的链接,因为我找不到任何关于此的内容:/

4

2 回答 2

21

您可以为您的 grok 过滤器使用多种模式,

grok {
  match => ["fieldname", "pattern1", "pattern2", ..., "patternN"]
}

并且它们将按顺序应用,但是 a)它不是性能方面的最佳选择,b)您可能希望以不同方式处理不同类型的日志,所以我建议您根据消息的类型或标签使用条件:

if [type] == "syslog" {
  grok {
    match => ["message", "your syslog pattern"]
  }
}

在输入插件中设置类型。

当前发布的 Logstash 版本的文档位于http://logstash.net/docs/1.4.2/。它可能没有具体解决您的问题,但可以推断出来。

于 2015-02-11T11:37:00.060 回答
13

首先编写最具体的 grok 并使用以下语法:

grok {
    match => {
      "message" => [
      #Most specific grok:
        "%{TIMESTAMP_ISO8601:temp_date}%{SPACE}%{LOGLEVEL:log_level}%{UUID:user_id}",
      #Less specific:
        "%{TIMESTAMP_ISO8601:temp_date}%{SPACE}%{GREEDYDATA:log_message}"
     ]
  }
}
于 2017-05-29T15:09:02.077 回答