将Prune过滤器与KV过滤器一起添加后-日志不会进入弹性搜索

维格涅什

我正在学习ELK,并试图作为我的项目的POC。我正在为项目中的示例集成日志应用KV过滤器,结果可能会出现很多额外的字段,因此我尝试应用修剪过滤器并将某些字段列入白名单。我可以看到在logstash服务器中打印了日志,但是日志不会进行弹性搜索。如果我删除过滤器,它将进入弹性搜索。请告知如何进一步解决此问题。

filter {
    kv {
            field_split => "{},?\[\]"
            transform_key => "capitalize"
            transform_value => "capitalize"
            trim_key => "\s"
            trim_value => "\s"
            include_brackets => false   
        }
    prune
    {
        whitelist_names => [ "App_version", "Correlation_id", "Env", "Flow_name", "host", "Instance_id", "log_level","log_thread", "log_timestamp", "message", "patient_id", "status_code", "type", "detail"]
    }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "mule-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
  stdout { codec => rubydebug }
}

我还需要两个建议

我还尝试在初始日志中使用grok过滤器,并尝试从样本日志中获取日志级别字段(时间和日志类型),并将其余日志发送到KV过滤器。有什么参考请分享。这就是我尝试过的。但得到_grokparsefailure。我已经将msgbody传递给带有source选项的kv过滤器。

grok {
        match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:loglevel}\s+%{GREEDYDATA:msgbody}"}
        overwrite => [ "msgbody" ]
    }

我在示例日志中有消息字段,如下所示。当数据发送到Kibana时,我可以看到两个消息字段标签,一个是完整日志,另一个是正确的消息(突出显示)。变异会在这种情况下起作用吗?有什么办法可以将完整的日志名称更改为其他名称?

[2020-02-10 11:20:07.172]信息Mule.api [[MuleRuntime] .cpuLight.04:[main-api-test] .api-main.CPU_LITE @ 256c5cf5:[main-api-test] .main -api-main / processors / 0 / processors / 0.CPU_LITE @ 378f34b0]:event:00000003 {app_name = main-api-main,app_version = v1,env = Test,timestamp = 2020-02-10T11:20:07.172Z ,日志= {correlation_id = 00000003,患者ID = 12345678,实例ID =医院,消息=系统API的启动,flow_name = main-api-main}}

leandrojmp

修剪过滤器错误

您的prune过滤器列表中没有该@timestamp字段whitelist_names,您的输出基于日期(%{+YYYY.MM.dd}),logstash需要@timestamp输出中字段来提取日期。

我已经使用示例消息运行了您的管道,并且它按预期运行,使用了prune将消息发送到elasticsearch过滤器,但是它存储在一个mule-没有日期时间字段的索引中

如果没有prune过滤器,则您的消息会将logstash收到事件的时间用作@timestamp,因为您没有任何日期过滤器来更改它。

如果mule-*使用日期时间字段(如)为索引创建了索引模式,则@timestamp在Kibana上将看不到索引上没有相同日期时间字段的任何文档。

错误

您的错误是错误的,您需要转义时间戳周围的方括号。Kibana有一个grok调试器,您可以在其中尝试模式。

以下grok起作用,将您的kv移动到grok之后并以msgbodyas作为源。

grok {
    match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\]\s+%{LOGLEVEL:loglevel}\s+%{GREEDYDATA:msgbody}"}
    overwrite => [ "msgbody" ]
}
kv {
    source => "msgbody"
    field_split => "{},?\[\]"
    transform_key => "capitalize"
    transform_value => "capitalize"
    trim_key => "\s"
    trim_value => "\s"
    include_brackets => false
}

只需将其与仅输出到stdout一起运行即可查看更改prune过滤器所需的过滤器。

重复的消息字段

如果将kv过滤器放在后面,因为您将大写的字段大写,那么grok就不会有重复的字段,您将以包含完整日志的字段包含内部消息的字段结尾,logstash字段区分大小写。messagekvmessageMessage

但是,您可以使用mutate过滤器重命名任何字段

mutate {
    rename => ["message", "fullLogMessage"]
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章