json - 如何在 Telegraf 中过滤 JSON 响应

标签 json telegraf telegraf-inputs-plugin

我正在尝试使用 Telegraf 的 HTTP Input Plugin 从 HTTP 端点获取 JSON 指标数据,并使用 Postgresql Output plugin 将其写入 Postgresql 数据库。这按预期工作。

但是,一些 JSON 响应非常长。由于 PostgreSQL 输出插件为每个字段创建一列,因此这些表变得非常长并且挤满了我不需要的信息。

对于发送方无法更改数据的端点(例如:RabbitMQ 的 Premade 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

关于json - 如何在 Telegraf 中过滤 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59567832/

相关文章:

testing - Telegraf 测试输入和输出插件错误多个 conf 文件

java - 将所有 `@QueryParam` 映射到 `JSON` 数据结构

javascript - Typescript/Javascript for 在数组上循环,将键的值作为键值 1 推送到新数组 - 如果已经存在,则递增

php - 奇怪的 JSON 键?

telegraf - telegraf 文件输出的日志轮换

firebase - 如何在 Firebase 中使用 Telegraf(电报)?

python - 如何解决 Telegraf 中的此错误?

regex - 查找字符串中是否存在反斜杠 Go

java - 当JsonArray嵌套到另一个JsonArray时如何使用Retrofit2进行反序列化