TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
DevOps Brain 🧠

4 Jun, 14:46

Открыть в Telegram Поделиться Пожаловаться

🔖Когда графики в Grafana врут?

Хотите разобраться почему графики показывают разные данные в grafana на разных интервалах и дипазонах? Сейчас мы с вами за 4 шага разберемся почему так происходит…

Я специально сделал гремучую смесь параметров в панели, чтобы детально показать что происходит под капотом. Нам важны три цифры со скрина:

• Окно в функции PromQL: increase(...[5m]).
• Interval: 10m.
• Глобальный диапазон: Last 7 days.

1. Какую сетку строит Grafana?

Смотрим на поле Interval – Grafana уже сама все посчитала и поставила 10m.

Interval один из самых важных параметров. Grafana использует его и в запросах в PromQL, и в визуализации панели.

Тут сработала математика самой Grafana: она взяла 7 дней, разделила на ширину панели в пикселях (Max data points = 1146), получила число в районе 8.6 минут и округлила его вверх до ближайшего красивого шага – 10 мин. Формула подсчета интервала там есть прямо рядом Time range / max data points.

В данном примере Grafana выполнит range query с шагом 10 минут: 12:00, 12:10, 12:20, 12:30...

Немного отвлечемся на другой немаловажный параметр - Min interval. Представим, что мы решили посмотреть детально и выделили на графике узкий отрезок – всего в 15 мин (вместо текущих 7 дней).

Исходя из формулы Interval = Time range / max data points получились бы интервалы в 0.76 сек. и это очень мало для корректной визуализации. Тут в игру вступает Min interval = 1m:

• Grafana видит, что расчетный шаг (0.76 сек) меньше, чем лимит (1m).
• Она говорит: “Окей, я не буду частить. Буду просить данные с шагом строго 1 мин.”.

По сути Min Interval это защита от бессмысленных маленьких интервалов.

С этим вроде разобрались – погнали смотреть что в запросе PromQL.

2. Какое окно считает Prometheus?

Когда Prometheus выполняет запрос для каждой точки, он видит твою функцию increase(...[5m]). Это значит в этой конкретной точке оглянись назад ровно на 5 минут и посчитай прирост счетчика.

Складываем это вместе и смотрим на хронологию:

• Точка 12:10: Prometheus смотрит назад на 5 мин. – оценивает отрезок с 12:05 до 12:10. Отдает значение. Grafana рисует точку.
• Точка 12:20: Prometheus делает шаг в 10 мин., встает на новую точку и снова смотрит назад на 5 минут – оценивает отрезок с 12:15 до 12:20.

3. Главный инсайт – на графике появились “слепые зоны”!

Заметили, что произошло?

• 1 точка покрыла интервал 12:05 - 12:10.
• 2 точка покрыла интервал 12:15 - 12:20.

А куда делся промежуток времени с 12:10 до 12:15? Он просто выпал из расчетов. Он не попал ни в первую точку, ни во вторую.

Когда интервал шага на графике (10m) больше, чем окно в самой функции ([5m]) – наше временное окно больше не скользит с пересечением. Оно начинает прыгать через промежутки времени, оставляя слепые зоны.

Если в промежуток с 12:10 до 12:15 бахнет жесткий всплеск – график его вообще не покажет, потому что Prometheus физически не заглянет в этот пятиминутный отрезок.

4. Как это исправить, чтобы график стал адекватным?

Тут важно понимать, что я специально сделал довольно спорные параметры панели, которые в реальной жизни я бы не стал применять. Но (как я уже говорил) они отлично подходят для демонстрации того, что происходит под капотом.

Самый правильный путь – переписать запрос на rate с динамическим интервалом $__rate_interval = max( $interval + scrape_interval , 4 × scrape_interval ).

$__rate_interval значительно уменьшает вероятность появления слепых зон и делает поведение графика гораздо стабильнее при смене диапазона.


rate(postfix_smtp_messages_processed_total{...}[$__rate_interval])

На самом деле $__rate_interval довольно крут тем, что на широких дипазонах Grafana сама передаст Prometheus окно в 10m подстроившись под шаг графика. А если бы мы смотрели узкий диапазон (например, 15 мин), то:

• interval = 0.76 с.
• 4 × scrape_interval = 1 мин.
• Итоговое окно = 1 мин. (а не 0.76 сек.)

То есть $__rate_interval всегда не меньше 1 мин (или 4×scrape_interval), что защищает от слишком маленьких окон.

А на этом у меня всё – ставьте лайки, задавайте вопросы

Telegram | Github | YouTube | X

784 0 24 18
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot