Я собираю данные OPC UA с помощью Telegraf, используя плагин OPC-UA. Все хорошо и работает так, как ожидалось. Я могу читать данные со своего сервера и видеть их в QuestDB. Однако, поскольку Telegraf получает каждую метрику как отдельную строку, я получаю разреженный набор данных, в котором для каждой строки есть только метка времени, теги и значение для одного столбца, даже если метрики в таких столбцах с той же самой временной метки.
Есть какие-нибудь указатели?
Это мой рабочий файл telegraf.conf
[agent]
omit_hostname = true
[[inputs.opcua]]
endpoint = "${OPCUA_ENDPOINT}"
connect_timeout = "30s"
request_timeout = "30s"
security_policy = "None"
security_mode = "None"
auth_method = "Anonymous"
name_override = "${METRICS_TABLE_NAME}" # Common measurement name for all metrics
[[inputs.opcua.nodes]]
name = "ServerLoad"
namespace = "2"
identifier_type = "s"
identifier = "Server/Load"
[[inputs.opcua.nodes]]
name = "ServerRAM"
namespace = "2"
identifier_type = "s"
identifier = "Server/RAM"
[[inputs.opcua.nodes]]
name = "ServerIO"
namespace = "2"
identifier_type = "s"
identifier = "Server/IO"
[[outputs.influxdb_v2]]
urls = ["${QUESTDB_HTTP_ENDPOINT}"]
token = "${QUESTDB_HTTP_TOKEN}"
content_encoding = "identity" # Important to ensuring no gzip encoding

В Telegraf вы можете объединить свои метрики в одну, если метка времени для метрик одинакова и все теги совпадают, с помощью агрегатора. Я не знаю, есть ли у ваших метрик общие теги, но если нет, вы можете добавить к каждому из них дополнительный тег. Имя тега не имеет значения.
[[inputs.opcua.nodes]]
name = "ServerLoad"
namespace = "2"
identifier_type = "s"
identifier = "Server/Load"
default_tags = { source = "opcua_merge" }
[[inputs.opcua.nodes]]
name = "ServerRAM"
namespace = "2"
identifier_type = "s"
identifier = "Server/RAM"
default_tags = { source = "opcua_merge" }
[[inputs.opcua.nodes]]
name = "ServerIO"
namespace = "2"
identifier_type = "s"
identifier = "Server/IO"
default_tags = { source = "opcua_merge" }
И теперь перед разделом вывода вы можете добавить определение слияния.
[[aggregators.merge]]
drop_original = true
tags = ["source"] # Merge metrics with the same value for the source tag
В этом случае, поскольку мы добавляем одно и то же значение для тега source, пока метка времени одинакова, они объединятся. Чтобы это работало, вам необходимо убедиться, что у вас нет других тегов с разными значениями в каждой метрике. Если у вас есть другие теги и они могут иметь разные значения, но вы все равно хотите объединиться, вы можете либо преобразовать теги в строки с помощью процессора telegraf converter, либо просто удалить теги, если они вам не нужны, с помощью процессора override.tags, как в:
[[processors.override]]
[processors.override.tags]
id = "" # Removing the 'id' tag
Вы также можете удалить тег source, если не хотите, чтобы он появлялся на финальном столе с использованием того же процессора.