【问题标题】:Logstash cannot extract json keyLogstash 无法提取 json 密钥
【发布时间】:2019-01-11 20:57:34
【问题描述】:

我需要有关 logstash 过滤器的帮助,以将 json 键/值提取到 new_field。以下是我的logstash conf。

input {
    tcp {
        port => 5044
    }
}

filter {
    json {
        source => "message"
        add_field => {
            "data" => "%{[message][data]}"
        }
    }
}

output {
        stdout { codec => rubydebug }
}

我已经尝试过 mutate:

filter {
    json {
        source => "message"
    }
    mutate {
        add_field => {
            "data" => "%{[message][data]}"
        }
    }
}

我试过了。而不是 []:

filter {
    json {
        source => "message"
    }
    mutate {
        add_field => {
            "data" => "%{message.data}"
        }
    }
}

我已经尝试过使用索引号:

filter {
    json {
        source => "message"
    }
    mutate {
        add_field => {
            "data" => "%{[message][0]}"
        }
    }
}

都没有运气。 :(

以下json被发送到5044端口:

{"data": "blablabla"}

问题是新字段无法从 json 的键中提取值。
"数据" => "%{[消息][数据]}"

以下是我的标准输出:

{
           "@version" => "1",
               "host" => "localhost",
               "type" => "logstash",
               "data" => "%{[message][data]}",
               "path" => "/path/from/my/app",
         "@timestamp" => 2019-01-11T20:39:10.845Z,
            "message" => "{\"data\": \"blablabla\"}"
}

但是,如果我改用 "data" => "%{[message]}"

filter {
    json {
        source => "message"
        add_field => {
            "data" => "%{[message]}"
        }
    }
}

我将从标准输出中获取整个 json。

{
           "@version" => "1",
               "host" => "localhost",
               "type" => "logstash",
               "data" => "{\"data\": \"blablabla\"}",
               "path" => "/path/from/my/app",
         "@timestamp" => 2019-01-11T20:39:10.845Z,
            "message" => "{\"data\": \"blablabla\"}"
}

谁能告诉我我做错了什么。
提前谢谢你。
我使用 docker-elk 堆栈,ELK_VERSION=6.5.4

【问题讨论】:

    标签: json logstash elastic-stack logstash-configuration


    【解决方案1】:

    add_field用于过滤成功时添加自定义逻辑,很多过滤器都有这个选项。如果你想将json解析成一个字段,你应该使用target

    filter {
      json {
        source => "message"
        target => "data"  // parse into data field
      }
    }
    

    【讨论】:

    • 我做了同样的事情,它奏效了。无论如何,谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2019-03-22
    相关资源
    最近更新 更多