Соберите данные OPC-UA с помощью Telegraf в QuestDB в плотном формате

Я собираю данные 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
 
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
0
0
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В 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, если не хотите, чтобы он появлялся на финальном столе с использованием того же процессора.

Другие вопросы по теме

Похожие вопросы

Как лучше всего создать таблицу событий, в которой каждый раз при обновлении события предоставляются разные элементы событий?
Восстановление базы данных neo4j в контейнере Docker из файла .backup
Ошибка Подключение к локальному хосту: 5432 отклонено. Убедитесь, что имя хоста и порт верны и что почтмейстер принимает соединения TCP/IP
PrismaClient не может работать в этой среде браузера или был включен в состав браузера (работает в «неизвестном») при обновлении
Как сделать левое соединение, чтобы ключи могли иметь множественную степень детализации с помощью Spark?
Обновить данные с помощью laravel
Сортировка MySQL с использованием MAX() для GROUP BY возвращает неверные данные
Медленное регулярное выражение Mongodb для 200 миллионов документов
Oracle: Как определить триггер, который после каждой вставки вставляет еще одну строку в ту же таблицу?
Сохраняет ли Null место для типа данных TIMESTAMP в PostgreSQL?