Постепенно внедряю в свою жизнь как разработчика работу с популярными нейросетями. До этого момента в основном AI-инструменты использовал как “помогаторы” в написании кода (подсказчики типа Codeium), или для получения краткой выжимки по каким-то статьям или темам (нейро вкладка в Яндекс-поиске). Непосредственно чат-ботами с точки зрения практики пользовался редко, т.к. чаще всего непонятно а что их спрашивать-то? По специфическим вопросам пока они помогают не особо успешно (по экзотическим SQL запросам, например). В основном все равно приходится идти через документацию или ориентироваться на свои знания и опыт. Пару раз задавал вопросы по незнакомым мне темам (о строительстве, например) и в целом получал хорошие ответы.
Но тут на работе возникла такая потребность - нужно на основе метрик Prometheus и Grafana найти наиболее медленные endpoint’ы и сделать по ним дашборд. Сначала пошел по привычному пути - через поисковик. 15-20 минут работы в поисковике и выборки статей не особо помогли приблизиться к цели. Обычно дальше уже начинает подробнее разбирать документацию и на это уходит куча времени. Поэтому отложил задачу в долгий ящик. А на днях решил попробовать адресовать эту задачу DeepSeek. Сформировал такой запрос.
Как построить графики для Grafana и Prometheus которые показывали бы наиболее медленные endpoint’ы по среднему времени ответа за день?
И к моему удивлению примерно за минуту получил лаконичный, довольно точный ответ, да еще и с рекомендациями по возможным оптимизациям. Далее минут за 15 добавил дашборд и доработал визуальную составляющую под свой вкус.
Далее просто приведу ответ DeepSeek на свой вопрос.
Чтобы построить графики в Grafana и Prometheus, отображающие самые медленные эндпоинты по среднему времени ответа за день, выполните следующие шаги:
1. Настройка метрик в приложении
Убедитесь, что ваше приложение экспортирует метрики времени ответа эндпоинтов в формате, совместимом с Prometheus. Пример метрик для HTTP-запросов:
http_request_duration_seconds_sum
— суммарное время ответа для эндпоинта.http_request_duration_seconds_count
— количество запросов к эндпоинту.
Метрики должны содержать лейбл (например, endpoint
, path
или handler
), идентифицирующий эндпоинт.
2. Запрос в Prometheus
Рассчитайте среднее время ответа за день для каждого эндпоинта с помощью PromQL:
|
|
Замените endpoint
на актуальное название лейбла в ваших метриках.
3. Создание графика в Grafana
Вариант 1: Таблица с топ-N медленных эндпоинтов
- Создайте новую панель в Grafana, выберите тип Table.
- В разделе запросов (Query) укажите:
1 2 3 4 5
topk(5, sum by (endpoint) (increase(http_request_duration_seconds_sum[1d])) / sum by (endpoint) (increase(http_request_duration_seconds_count[1d])) )
- Настройте:
- Legend:
{{endpoint}}
(для отображения названий эндпоинтов). - Sort: По убыванию значения.
- Legend:
- Включите опцию Instant, чтобы запрос возвращал текущие значения.
Вариант 2: Bar chart для визуализации
- Выберите тип визуализации Bar chart.
- Используйте тот же запрос, что и для таблицы.
- Настройте ось Y (единицы измерения — секунды) и легенду.
4. Оптимизация и дополнения
- Динамический период: Используйте переменную
$__range
в Grafana, чтобы период (например,[1d]
) автоматически подстраивался под выбранный временной диапазон. - Фильтрация эндпоинтов: Добавьте фильтры (например, исключите статические ресурсы):
1
avg_response_time{endpoint!~"/static/.*"}
- Временной график: Для отображения изменений среднего времени за несколько дней используйте:
1 2 3
sum by (endpoint) (rate(http_request_duration_seconds_sum[$__range])) / sum by (endpoint) (rate(http_request_duration_seconds_count[$__range]))
5. Проверка
Убедитесь, что:
- Prometheus правильно собирает метрики (проверьте вкладку Graph в Prometheus).
- Лейблы эндпоинтов заполнены корректно.
- Временной диапазон в Grafana соответствует желаемому (например, последние 24 часа).
Если все настроено верно, графики будут отображать топ медленных эндпоинтов, что поможет оптимизировать производительность.