我想知道是否有办法在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不真实。我省略了东西。
答案 0 :(得分:0)
我发现没有一个很好的方法可以做到这一点。我只需要对每个可能的查询进行硬编码。