json - 在 Logstash 中使用可变键名访问嵌套的 JSON 值

标签 json logstash

我有一个关于 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 的字段 Name,另一个字段的名称为 2,第三个字段的名称为 3。JSON 中的第一个键正在改变,这意味着只能是一个或多个部分。所以我不想像

这样硬编码
%{[0][name]}

感谢您的帮助。

最佳答案

如果您删除输入中的所有新行,您可以简单地使用 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"
}

关于json - 在 Logstash 中使用可变键名访问嵌套的 JSON 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32962876/

相关文章:

java - 对象映射器给出异常 : com. fastxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段

elasticsearch - Logstash-得到错误,因为发生未知错误,向Elasticsearch发送了批量请求

Logstash 和 ElasticLog

elasticsearch - 如何为我的logstash grok过滤器添加条件?

ios - 如何解析特定的谷歌地图API网络服务JSON响应

c++ - 从 std::继承类

java - 在Java中存储JSON数据

javascript - JSON.stringify反转?

elasticsearch - 使用Elastic Search + Kibana检索列中搜索的字符串的值计数

ruby - Logstash Ruby 代码计算数组值的平均值