在Logstash JDBC语句中访问通配符JSON字段值

时间:2018-05-24 17:09:38

标签: json jdbc logstash

我想知道是否有办法在json中访问并获取字段的子字段的名称而不知道其密钥。

例如:

{
    "fields": {
        "Percent_Processor_Time": 1
    },
    "name": "win_cpu",
        "tags": {
        "host": "Test",
        "instance": "_Total",
        "objectname": "Processor"
    },
    "timestamp": 1526593441
}

在这个jdbc输出中:

jdbc {
      driver_jar_path => '${LOGSTASH_HOME}/vendor/jar/jdbc/mssql-jdbc-6.2.2.jre8.jar'
      connection_string => "jdbc:sqlserver://database;database    Name=test;user=test;password=test"
      statement => [ "exec stream_mss.ins_system_metrics ?, ?, ?, '', ?, ?", "[tags][host]", "@timestamp", "name", "processor.time.percent","[tags][instance]", "[fields][Percent_Processor_Time]" ]
   }

我想访问“fields”json字段下的json字段,而不必知道它的密钥。我想要这个,因为我得到的输入有一个非静态键,所以我必须为每个单独的字段键写单独的jdbc输出。此外,我想抓住该字段的密钥并使用它。

那么我理想的jdbc输出是什么样的。

   json {
        @field_name = get_field_name in "fields"
   }
   jdbc {
              driver_jar_path => '${LOGSTASH_HOME}/vendor/jar/jdbc/mssql-jdbc-6.2.2.jre8.jar'
              connection_string => "jdbc:sqlserver://database;database    Name=test;user=test;password=test"
              statement => [ "exec stream_mss.ins_system_metrics ?, ?, ?, '', ?, ?", "[tags][host]", "@timestamp", "name", "@field_name","[tags][instance]", "[fields][(wildcard access)]" ]
    }

或者这个想法领域的东西。

我愿意使用Logstash提供的任何插件来解决这个问题。

忽略我的connection_string不真实。我省略了东西。

1 个答案:

答案 0 :(得分:0)

我发现没有一个很好的方法可以做到这一点。我只需要对每个可能的查询进行硬编码。