Как настроить конфигурацию в Telegraf для парсинга JSON-данных?

Я пытаюсь распарсить данные с помощью Telegraf. Вот пример JSON-структуры, с которой я работаю: <br/> <pre><code>{
  "data": {
    "component": [
      {"data": [{"name": "name1", "value": "a100"}], "tag": "tag1"},
      {"data": [{"name": "name1", "value": "b100"}, {"name": "name2", "value": "b200"}], "tag": "tag2"},
    ]
  }
}</code></pre> <br/> В моем конфигурационном файле telegraf.conf указано следующее: <br/> <pre><code>[[inputs.mqtt_consumer.json_v2]]
        measurement_name = "component"
        [[inputs.mqtt_consumer.json_v2.object]]
            path = "data.component"
            optional = true
            tags = ["tag"]
            disable_prepend_keys = true</code></pre> <br/> Проблема заключается в том, что для tag2 записывается только последнее значение из списка: <br/> <pre><code>tag=tag1 name="name1",value="a100"
tag=tag2 name="name2",value="b200"</code></pre> <br/> Мне необходимо получить все данные, чтобы результат выглядел следующим образом: <br/> <pre><code>tag=tag1 name="name1",value="a100"
tag=tag2 name="name1",value="b100"
tag=tag2 name="name2",value="b200"</code></pre>
  • 2 октября 2024 г. 12:54
Ответы на вопрос 2
Для корректного парсинга JSON-данных с использованием Telegraf, нужно настроить конфигурацию таким образом, чтобы данные из массива `data` внутри каждого компонента также извлекались и добавлялись в выходные метрики. Ваш текущий конфигурационный файл недостаточно учитывает вложенные массивы в структуре JSON.

Вот как можно подстроить конфигурацию, чтобы извлечь нужные данные:

```toml
[[inputs.mqtt_consumer.json_v2]]
  measurement_name = "component"
  [[inputs.mqtt_consumer.json_v2.object]]
      path = "data.component"
      optional = true
      tags = ["tag"]
      disable_prepend_keys = true
      [[inputs.mqtt_consumer.json_v2.object.data]]
          path = "data"
          optional = true
          # Здесь вы добавляете ваши метрики, используя имя и значение
          [[inputs.mqtt_consumer.json_v2.object.data.map]]
              name = "name"
              value = "value"
              # Оставьте `tags` пустым, поскольку мы хотим использовать `tag`
```

Вот несколько ключевых изменений и дополнений, которые нужно учесть:

1. **Атрибуты `data`**: Вам нужно добавить вложенный путь `data` для извлечения значений `name` и `value` из каждого объекта.

2. **Мэппинг значений**: Убедитесь, что атрибуты для мэппинга являются корректными. В приведенном выше примере добавлены параметры `name` и `value` для извлечения значений из объектов.

3. **Использование тегов**: Поскольку вы хотите добавлять все пары `name` и `value` для каждого значения тега, необходимо убедиться, что в конфигурации Telegraf все правильно мапится и все значения сохраняются как отдельные измерения, не переписываясь.

Обратите внимание, что параметры и настройки могут немного варьироваться в зависимости от версии Telegraf, так что лучше уточнить детали в [официальной документации Telegraf](https://docs.influxdata.com/telegraf/latest/plugins/inputs/mqtt_consumer/#json-v2).

После внесения правильных настроек и перезапуска Telegraf вы должны увидеть желаемый вывод для всех данных: 

```plaintext
tag=tag1 name="name1",value="a100"
tag=tag2 name="name1",value="b100"
tag=tag2 name="name2",value="b200"
```

Эти шаги позволят вам извлечь необходимые данные из структуры JSON и сохранить их корректно в ваш выходной формат.
это интересно. сделал тестовый конфиг который читает ваш json из файла 
[[inputs.file]]
files = ["c:/programs/telegraf/test.json"]
data_format = "json_v2"
[[inputs.file.json_v2]]
measurement_name = "component"
[[inputs.file.json_v2.object]]
path = "data.component"
optional = true
tags = ["tag"]
disable_prepend_keys = true

[[outputs.file]]
  files = ["stdout"]

и получил
PS C:\programs\telegraf\telegraf-1.32.0> .\telegraf.exe --config .\telegraf.conf --once
2024-10-02T14:05:05Z I! Loading config: .\telegraf.conf
2024-10-02T14:05:05Z I! Starting Telegraf 1.32.0 brought to you by InfluxData the makers of InfluxDB
2024-10-02T14:05:05Z I! Available plugins: 235 inputs, 9 aggregators, 32 processors, 26 parsers, 62 outputs, 5 secret-stores
2024-10-02T14:05:05Z I! Loaded inputs: file
2024-10-02T14:05:05Z I! Loaded aggregators:
2024-10-02T14:05:05Z I! Loaded processors:
2024-10-02T14:05:05Z I! Loaded secretstores:
2024-10-02T14:05:05Z I! Loaded outputs: file
2024-10-02T14:05:05Z I! Tags enabled: host=pc
2024-10-02T14:05:05Z I! [agent] Hang on, flushing any cached metrics before shutdown
component,host=pc,tag=tag1 name="name1",value="a100" 1727877906000000000
component,host=pc,tag=tag2 name="name1",value="b100" 1727877906000000000
component,host=pc,tag=tag2 name="name2",value="b200" 1727877906000000000
2024-10-02T14:05:05Z I! [agent] Stopping running outputs


Единственное что - ваш json не валидируется, пришлось убрать запятую
Похожие вопросы