Как я могу использовать переменные панели управления ключ / значение в Grafana + InfluxDB?

Я пытаюсь понять, как отформатировать переменную панели управления парой ключ / значение. У меня есть переменная, определения которой:

sensor_list = 4431,8298,11041,13781
sensor_kv = 4431 : Storage,8298 : Stairs,11041 : Closet,13781 : Attic

Однако я не могу эффективно использовать его для запросов и форматирования панели мониторинга с InfluxDB. Например, у меня есть панель, запрос которой такой:

SELECT last("battery_ok") FROM "autogen"."Acurite-Tower" WHERE ("id" =~ /^$sensor_list$/) AND $timeFilter GROUP BY time($__interval) fill(null)

Это работает, но если я заменю его на KV, я не смогу получить значение:

SELECT last("battery_ok") FROM "autogen"."Acurite-Tower" WHERE ("id" =~ /^$sensor_kv$/) AND $timeFilter GROUP BY time($__interval) fill(null)

^ который возвращается без данных.

Я также не понимаю, как получить доступ к значению пары KV, скажем, в значениях шаблона для повторяющейся панели. ${sensor_kv:text} возвращает слово Все, кроме ${sensor_kv:value}, на самом деле вызывает прямую ошибку: Ошибка: значение формата переменной не найдено

У меня цель двоякая:

  1. Чтобы использовать ключевую сторону карты kv в качестве идентификатора для запроса в БД
  2. Чтобы использовать сторону значений в качестве метки панели статистики, а также в качестве псевдонима измерения, если я запрашиваю на графике

Я прочитал документы по форматированию и все они упоминают списки; там нет примеров пары ключ / значение, и уж тем более ничего, что делало бы это. Это явно новая функция (вот проблема GH, где ее реализация объединена), так что я надеюсь, что где-то пропал документ.


person Chris R    schedule 12.02.2021    source источник


Ответы (1)


Пары "ключ-значение" работают с некоторыми БД таймсерий, где это имеет смысл, например MySQL https://grafana.com/docs/grafana/latest/datasources/mysql/:

Другой вариант - запрос, который может создать переменную типа ключ / значение. Запрос должен вернуть два столбца с именами __text и __value. Значение столбца __text должно быть уникальным (если оно не уникальное, используется первое значение). Параметры в раскрывающемся списке будут иметь текст и значение, которые позволяют использовать понятное имя в виде текста и идентификатор в качестве значения.

Но это не относится к InfluxDB: https://grafana.com/docs/grafana/latest/datasources/influxdb/ InfluxDB не может возвращать key = ›value result - он возвращает только временные ряды (это не key =› value) или только значения или только ключи.

Обходные пути:

1.) Используйте поддерживаемую БД (MySQL, PostgreSQL) только для получения правильных результатов «ключ =› значение ». Вам действительно не нужно создавать таблицу для этого, просто комбинация SELECT, UNION, ... и вы получите желаемый результат.

2.) Используйте скрытую переменную, которая будет переводить значение в ключ, который затем будет использоваться в запросе. Например. https://community.grafana.com/t/how-to-alias-a-template-variable-value/10929/3

Конечно, у всего есть свои плюсы и минусы, например, значения переменных с несколькими значениями могут работать не так, как ожидалось.

person Jan Garaj    schedule 13.02.2021
comment
Это не отвечает на мой вопрос; Я знаю, как получить переменную - это настраиваемая переменная, которую я явно определил в панели администратора для моей панели инструментов, вручную указав именно те значения, которые я включил в вопрос, но я этого не делаю. Я не знаю, как ссылаться на две его части в запросах или в шаблонах заголовков панелей мониторинга. - person Chris R; 15.02.2021
comment
@ChrisR с опцией 2.) у вас есть 2 переменные: одна с идентификатором для запроса, другая с понятным для человека именем для заголовка панели. нп. - person Jan Garaj; 15.02.2021