Здравствуйте!
Я запутался в настройках query optins / refresh timing и нуждаюсь в вашем совете.
Я хочу создать дашборд с панелями, используя плагин Flow для построения динамических диаграмм состояния сети. Telegraf опрашивает маршрутизаторы по SNMP каждые 10 секунд, чтобы получить статус интерфейса Up(1)/Down(2) и сохраняет результаты запроса в InfluxDBv2.
Grafana должна выполнить запрос и получить одну (последнюю) точку из серии. В зависимости от значения этой точки (1 или 2) плагин меняет цвет ссылки на диаграмме на зелёный (для 1) или красный (для 2).
В Influx я чётко вижу правильные значения, вставляемые каждые 10 секунд.
Чтобы взять только последнюю точку в серии, запрос в Grafana выглядит следующим образом:
FROM snmp WHERE agent_host::tag = RTR01 AND ifName::tag = 1/1/c8/1 SELECT field (ifOperStatus) ORDER BY TIME descending LIMIT 1 FORMAT AS Time series ALIAS woo
Настройка Query options :
Max data points: 1
Min interval: No limit
Interval: 15s
Relative time: 15s
Time shift: now-20s and now-5s
Моя логика:
Точки в influxdb добавляются каждые 10 с. В Grafana я устанавливаю интервал 15 с, чтобы каждая точка серии, соответствующая 10 с, заведомо попадала в этот интервал. Частота обновления составляет 15 с. Чтобы избежать ситуации с задержкой ответа SNMP, приводящей к отсутствию точек в последние 15 секунд перед обновлением (nox-15s), я сдвигаю интервал обновления на 5 секунд (now-20s - now-5s). В «Inspect:Data» я вижу только одно значение каждый раз, но это либо полученное правильное значение (1 или 2), либо пустое. Поочередно: со значением, пусто, со значением, пусто, со значением, пусто и т. д.
2025-09-19 13:05:30 1
2025-09-19 13:05:45 : <пусто>
2025-09-19 13:06:00 1
2025-09-19 13:06:15 : <пусто>
2025-09-19 13:06:30 1
2025-09-19 13:06:45 : <пусто>
и т. д.
Почему они пустые? При запросе к influxdb из CLI никаких пустых записей нет.
Как настроить запрос так, чтобы он всегда отображал только последнее значение в серии, независимо от настройки времени обновления (которую может изменить пользователь)?
И ещё один вопрос.
Возможна ситуация, когда не были получены 1-2 SNMP-ответа. Мне кажется практичным взять не одну, а (например) пять последних точек и считать, что интерфейс находится в состоянии Up, только если три из этих пяти точек имеют значение 1 (Up). Как можно добиться такого поведения? С помощью запроса? С помощью преобразования?
Заранее спасибо за помощь!