【问题标题】:Accessing nested JSON Value with variable key name in Logstash在 Logstash 中使用变量键名访问嵌套的 JSON 值
【发布时间】:2015-10-06 06:10:36
【问题描述】:

我有一个关于 Logstash 中 JSON 的问题。 我有一个看起来像这样的 JSON 输入:

{
"2": {
        "name": "name2",
        "state": "state2"
    },

"1": {
        "name": "name1",
        "state": "state1"
    },

"0": {
        "name": "name0",
        "state": "state0"
    }
}

现在,假设我想在 logstash 配置中添加一个字段

json{
    source => "message"
    add_field => {
            "NAME" => "%{ What to write here ?}"
            "STATE" => "%{ What to write here ?}"
    }
}

有没有办法访问 JSON 输入,这样我得到一个值为 name1 的字段名称,另一个名称为 2 的字段和第三个名称为 3 的字段。JSON 中的第一个键正在更改,这意味着只能是一个或多个部分。所以我不想像

那样对其进行硬编码
%{[0][name]}

感谢您的帮助。

【问题讨论】:

    标签: json logstash


    【解决方案1】:

    如果您删除输入中的所有新行,您可以简单地使用json filter。您不需要任何add_field 操作。

    无需换行的工作配置:

    filter {
            json { source => message }
    }
    

    如果您无法删除输入中的新行,则需要将这些行与multiline codec 合并。

    带有新行的工作配置:

    input {   
        file {
            path => ["/path/to/your/file"] # I suppose your input is a file.
            start_position => "beginning"
            sincedb_path => "/dev/null" # just for testing
            codec => multiline {
                pattern => "^}"
                what => "previous"
                negate => "true"
            }
        }
    }
    
    filter {
        mutate { replace => { "message" => "%{message}}" }  }
        json { source => message }
    }
    

    我假设您使用文件输入。如果您不这样做,请更改它。

    输出(两者):

    "2" => {
         "name" => "name2",
        "state" => "state2"
    },
    "1" => {
         "name" => "name1",
        "state" => "state1"
    },
    "0" => {
         "name" => "name0",
        "state" => "state0"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      相关资源
      最近更新 更多