在Logstash中创建自定义grok图案

在Logstash中创建自定义grok图案,logstash,logstash-grok,logstash-configuration,Logstash,Logstash Grok,Logstash Configuration,我正在尝试向Logstash添加自定义模式,以便从此类日志行捕获数据: [2017-11-27 12:08:22] production.INFO: {"upload duration":0.16923} 我按照上的说明创建了一个名为patterns的目录,其中包含一个名为extra的文件,该文件包含: POSTFIX_UPLOAD_DURATION upload duration 并将路径添加到配置文件: grok { patterns_dir => ["./patt

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

[2017-11-27 12:08:22] production.INFO: {"upload duration":0.16923}
我按照上的说明创建了一个名为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>
由于错误{:异常=>#
此外,某些日志行不包含“上载持续时间”字段,这会中断管道吗?

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

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

我发现使用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"]
            }
 }

我发现使用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"]
            }
 }