我正在尝试使用Telegraf的HTTP输入插件从HTTP-Endpoints摄取JSON指标数据,并使用Postgresql Output插件将其写入Postgresql数据库。这正在按预期工作。
但是,一些 JSON 响应很长。由于 PostgreSQL 输出插件为每个字段创建一个列,因此这些表变得非常长,并且充满了我不需要的信息。
对于那些无法在发送端更改数据的端点(例如:RabbitMQ 的预制 API(,有没有办法在 Telegraf 中过滤 JSON 响应?
例如:我有以下 JSON 响应:
{
"message_stats": {
"publish": 1,
"publish_details": {
"rate": 0.0
}
}
}
我只对message_stats.publish_details.rate
感兴趣.我不希望message_stats.publish
出现在我的数据库中。我怎样才能做到这一点?
解决此问题的方法之一是使用json_query
参数。 在此参数中,您可以使用特殊语法来过滤响应:
[[inputs.http]]
## One or more URLs from which to read formatted metrics
urls = [
"https://url-to-metrics-endpoint"
]
# next field replace default metrics name "http" to your custom name:
name_override = "custom_name"
# set true if you want to ignore self signed certificate validation:
insecure_skip_verify = true
data_format = "json"
timeout = "5s"
# Here you can filter your JSON using special syntax:
json_query = "message_stats.publish_details.rate"
这是最简单的例子。您可以在此处找到有关语法的更多详细信息(例如如何使用数组等等(: https://github.com/tidwall/gjson#path-syntax