gpt4 book ai didi

elasticsearch - Logstash筛选器-一半的json行解析

转载 作者:行者123 更新时间:2023-12-03 00:08:28 25 4
gpt4 key购买 nike

我正在使用“filebeat”作为托运人,客户端将其发送到redis,使用logstash从redis读取并将其发送到ES。

我正在尝试解析以下示例行:

09:24:01.969 watchdog - INFO - 100.140.2 PASSED: Mobile:Mobile[].popover["mc1814"].select(2,) :706<<<<<<<<<<<<<<<<<<< {"actionDuration":613}



最后,我想要一个字段名称:“actionDuration”,其值为:613。

如您所见,它是部分json。
-我尝试使用具有add_field和match的grok过滤器,并且尝试更改filebeat和logstash中的一些配置。

我正在使用基本配置:
filebeat.conf:

filebeat.prospectors:

  • input_type: log

    paths:

    • /sketch/workspace/sanity-dev-kennel/out/*.log

    fields:

    • type: watchdog
    • BUILD_ID: 82161


如果有可能,我更喜欢在filebeat方面进行操作,但在Logstash方面也很好。

非常感谢,
摩西

最佳答案

这种部分格式设置最好在Logstash端而不是在托运方上处理。 FileBeat中可用的过滤器/转换不符合要求。不过,Logstash筛选器管道是。

filter {
grok {
match => {
"message" => [ "(?<plain_prefix>^.*?) (?<json_segment>{.*$)"]
}
}
json {
source => "json_segment"
}
mutate {
remove_field => [ "json_segment" ]
}
}

这个基本示例将您的传入消息分为两个字段。 plain_prefixjson_segment。然后,使用 json{}过滤器将JSON数据解析为事件。最后,使用 mutate {}过滤器从事件中删除 json_segment字段,因为该字段已被解析并包含在内。

注意: .*?中的 plain_prefix在此过滤器中至关重要。这样构造,从第一个 {开始的所有内容都被视为JSON段的一部分。如果使用 .*,则JSON段将是最后一个 {的所有内容,这将是复杂JSON数据结构的问题。

关于elasticsearch - Logstash筛选器-一半的json行解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43067491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com