【问题标题】:Creating a custom grok pattern in Logstash在 Logstash 中创建自定义 grok 模式
【发布时间】:2018-05-12 00:47:23
【问题描述】:

我正在尝试向 Logstash 添加自定义模式,以便从此类日志行中捕获数据:

[2017-11-27 12:08:22] production.INFO: {"upload duration":0.16923}

我按照Logstash guide for grok 上的说明创建了一个名为 patterns 的目录,其中包含一个名为 extra 的文件,其中包含:

POSTFIX_UPLOAD_DURATION upload duration

并添加了配置文件的路径:

grok {
        patterns_dir => ["./patterns"]
        match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] %{POSTFIX_UPLOAD_DURATION: upload_duration} %{DATA:log_env}\.%{LOGLEVEL:severity}: %{GREEDYDATA:log_message}" }
    }

但是,我收到以下错误消息:

Pipeline aborted due to error {:exception=>#<Grok::PatternError: pattern %{POSTFIX_UPLOAD_DURATION: upload_duration} not defined>

另外,一些日志行不包含“上传持续时间”字段,这会破坏管道吗?

【问题讨论】:

    标签: logstash logstash-grok logstash-configuration


    【解决方案1】:

    您可以使用相对目录,只要它们相对于进程启动的当前工作目录,而不是相对于 conf 文件或 Logstash 本身。

    【讨论】:

      【解决方案2】:

      我发现使用 json 插件可以更好、更有效地捕获数据。

      我在我的日志中添加了“log_payload:”并将我需要捕获的数据插入到一个 json 对象中。 然后我使用这个管道来捕获它。

       if ("log_payload:" in [log_message]) {
              grok{
                  match => {"log_message" => 'log_payload:%{DATA:json_object}}%{GREEDYDATA}'}
              }
              mutate{
                  update => ["json_object", "%{[json_object]}}"]
              }
              json {
                 source => "json_object"
                }
          }
           mutate {
                      remove_field => ["log_message", "json_object"]
                  }
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-15
        • 1970-01-01
        相关资源
        最近更新 更多