【问题标题】:Multiple patterns in one log一个日志中的多个模式
【发布时间】:2015-04-11 14:19:23
【问题描述】:

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

【问题讨论】:

    标签: logstash logstash-grok


    【解决方案1】:

    先写最具体的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}"
         ]
      }
    }
    

    【讨论】:

    • 组成模式也可以这样定义,还是必须使用正则表达式替换(|)?
    • @Alexander - 我不确定你所说的“组成模式”是什么意思?
    • 您可以编写自己的模式,就像SPACELOGLEVELUUID 等内置模式一样。它们表示为正则表达式,但我的问题是在正则表达式中有太多的交替使它成为一个非常长的 1-liner。我想知道是否有类似的模式可以用来定义一个正则表达式数组的模式,每个正则表达式依次尝试,就像message 的模式在这里定义一样
    • @Alexander - 哦,现在我明白了。好吧,我没有碰到这样的功能,但可能值得为此提出一个新问题
    【解决方案2】:

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

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

    它们将按顺序应用,但是 a) 从性能角度来看,这不是最佳选择,b) 您可能希望以不同方式处理不同类型的日志,因此我建议您根据 a 的类型或标签使用条件留言:

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

    在输入插件中设置类型。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 2014-04-12
      相关资源
      最近更新 更多