Визуализация данных о сумме (стоимости) в Grafana с использованием InfluxQL
У меня есть таблица, которая имеет много строк, которые следуют этой структуре:
time acknowledgement crit current_attempt downtime_depth execution_time hostname latency max_check_attempts metric reachable service state state_type value warn
---- --------------- ---- --------------- -------------- -------------- -------- ------- ------------------ ------ --------- ------- ----- ---------- ----- ----
1507171563000000000 999 a01-pdu kw pdu 14.94 999
1507171621000000000 999 a01-pdu kw pdu 14.92 999
1507171678000000000 999 a01-pdu kw pdu 14.45 999
1507171736000000000 999 a01-pdu kw pdu 14.93 999
1507171793000000000 999 a01-pdu kw pdu 14.88 999
1507171852000000000 999 a01-pdu kw pdu 14.92 999
1507171909000000000 999 a01-pdu kw pdu 14.9 999
1507171995000000000 999 a01-pdu kw pdu 14.91 999
1507171999000000000 999 a02-pdu kw pdu 13.41 999
Моя цель - получить последнюю запись, где hostname =~ /a01-pdu|a02-pdu/
и подвести их value
колонка
Например, если я бегу:
SELECT last(value) AS last INTO pdu_abcd12 FROM pdu WHERE hostname =~ /a01-pdu/;
SELECT last(value) AS last INTO pdu_abcd12 FROM pdu WHERE hostname =~ /a02-pdu/;
SELECT sum(last) FROM (SELECT * FROM pdu_abcd12 ORDER BY DESC LIMIT 8)
time sum
---- ---
0 105.97
Я могу получить сумму этих двух значений, но для этого требуется, чтобы я запускал указанные выше команды influenxQL каждый раз, когда я хочу увидеть данные. Есть ли способ периодически запускать команды, чтобы я мог визуализировать живые данные в Grafana?
1 ответ
Создайте непрерывные запросы, например:
CREATE CONTINUOUS QUERY last_sum ON <db name>
BEGIN
SELECT last(value) AS last INTO pdu_abcd12
FROM pdu
WHERE hostname =~ /a01-pdu/
GROUP BY time(1h), hostname
END
Обратите внимание, что CQ требуют group by
, Имя хоста также включено в группу выше для учета нескольких имен хостов, которые сопоставляются с регулярным выражением. Их значения были бы выбраны вместе.
Однако у CQ есть несколько недостатков, таких как периодичность, то есть они выполняются только один раз в пределах группы за интервалом, они не будут содержать промежуточных данных между интервалами, не будут выполняться, если БД не работает, что приводит к пробелам в данных. генерировать уникальные поля при использовании подстановочных знаков и т. д., см. документацию.
Другой вариант - Kapacitor и его более гибкий, но также более сложный синтаксис потоковой обработки.