Как добавить изображения в Grafana Telegram алерты
Пошаговое руководство по настройке отправки изображений в Grafana для Telegram уведомлений. Узнайте, как включить рендеринг и настроить HTML шаблоны для отображения графиков в алертах.
Как включить отправку изображений в Grafana для Telegram уведомлений?
У меня Grafana 11.2.10 развернута в Docker и настроен рендеринг. Рендеринг работает - я могу перейти на дашборд -> share -> Direct link rendered image и изображение открывается. Однако я не могу понять, как настроить отправку этих изображений в Telegram алертах. Подскажите, пожалуйста, как включить инклуд картинок в алертные сообщения Telegram?
Включение отправки изображений в Grafana для Telegram уведомлений требует правильной настройки канала уведомлений и шаблонов сообщений. Для Telegram необходимо использовать форматирование HTML и правильно указать URL для rendered изображений, которые Grafana сгенерирует при отправке алерта.
Содержание
- Настройка канала уведомлений Telegram
- Конфигурация шаблонов сообщений
- Настройки рендеринга изображений
- Проверка и отладка
- Распространенные проблемы
Настройка канала уведомлений Telegram
Для отправки изображений в Telegram из Grafana необходимо правильно настроить канал уведомлений. Вот пошаговая инструкция:
-
Перейдите в настройки уведомлений:
- Откройте Grafana
- Перейдите в Configuration → Notifications → Channels
- Создайте новый канал или отредактируйте существующий
-
Выберите тип уведомления Telegram:
- В поле “Type” выберите “Telegram”
- Укажите ваш Telegram Bot Token (полученный от @BotFather)
-
Настройте параметры канала:
- Chat ID: ID вашего чата (для личных бесед с ботом)
- или используйте Public Channel username (например, @your_channel)
- Enable: включите канал
-
Настройте параметры рендеринга:
- В разделе “Image rendering” убедитесь, что галочка “Enable” установлена
- Выберите подходящий формат изображения (PNG/JPEG)
- Укажите размеры изображения по умолчанию
Важно: Для работы изображений необходимо, чтобы в вашей Grafana был включен рендеринг изображений. Проверьте это в Configuration → Image rendering.
Конфигурация шаблонов сообщений
Чтобы изображения корректно отображались в Telegram, используйте HTML-форматирование в шаблоне сообщения:
Базовый шаблон с изображением
{{ template "default.message" . }}
<p><b>Dashboard:</b> {{ .Labels.dashboardName }}</p>
<p><b>Panel:</b> {{ .Labels.panelName }}</p>
<p><b>Value:</b> {{ .Value }}</p>
<p><b>Time:</b> {{ .Time }}</p>
<img src="{{ .Values.imageData }}" alt="Alert visualization" />
Продвинутый шаблон с несколькими изображениями
{{ template "default.message" . }}
<h3>Информация о алерте</h3>
<p><b>Dashboard:</b> {{ .Labels.dashboardName }}</p>
<p><b>Panel:</b> {{ .Labels.panelName }}</p>
<p><b>Имя алерта:</b> {{ .Labels.alertname }}</p>
<h3>Визуализация данных</h3>
<p><b>Текущее значение:</b> {{ .Value }}</p>
<p><b>Порог:</b> {{ .Threshold }}</p>
<p><b>Время:</b> {{ .Time }}</p>
<img src="{{ .Values.imageData }}" alt="График алерта" style="max-width: 100%;" />
{{ if .Values.annotations }}
<h3>Аннотации</h3>
<table border="1">
<tr><th>Ключ</th><th>Значение</th></tr>
{{ range $key, $value := .Values.annotations }}
<tr><td>{{ $key }}</td><td>{{ $value }}</td></tr>
{{ end }}
</table>
{{ end }}
Параметры доступные в шаблоне:
| Параметр | Описание | Пример |
|---|---|---|
.Values.imageData |
URL или данные изображения | https://your-grafana.com/render/d-solo/... |
.Labels.dashboardName |
Имя дашборда | “Серверный мониторинг” |
.Labels.panelName |
Имя панели | “CPU Usage” |
.Value |
Значение триггера | “85.2” |
.Time |
Время алерта | “2024-01-15T14:30:00Z” |
.Threshold |
Пороговое значение | “80” |
Настройки рендеринга изображений
Для корректной работы изображений в Telegram необходимо убедиться, что рендеринг properly настроен:
Настройки через UI Grafana:
-
Проверка рендеринга:
- Откройте дашборд
- Нажмите “Share” → “Direct link rendered image”
- Убедитесь, что изображение открывается корректно
-
Настройки рендеринга:
- Перейдите в Configuration → Image rendering
- Установите “Enable image rendering” в “On”
- Настройте параметры:
- Render timeout: 30-60 секунд
- Image format: PNG
- Max width: 1000-1600px
- Max height: 600-900px
Настройки через Docker Compose:
Если ваша Grafana развернута через Docker, добавьте следующие настройки в docker-compose.yml:
services:
grafana:
environment:
GF_RENDERING_SERVER_URL: http://renderer:8080/render
GF_RENDERING_CALLBACK_URL: http://grafana:3000/render
GF_RENDERING_TEMPLATES_PATH: /etc/grafana/rendering/templates
GF_FEATURE_TOGGLES_ENABLE: imageRendering
volumes:
- ./templates:/etc/grafana/rendering/templates
Конфигурация через environment variables:
GF_RENDERING_SERVER_URL=http://renderer:8080/render GF_RENDERING_CALLBACK_URL=http://grafana:3000/render GF_RENDERING_TEMPLATES_PATH=/etc/grafana/rendering/templates GF_FEATURE_TOGGLES_ENABLE=imageRendering GF_LOG_FILTERS=rendering:debug
Проверка и отладка
Тестирование уведомлений:
-
Проверка шаблона:
- В настройках канала уведомлений нажмите “Test”
- Убедитесь, что изображение отображается в тестовом сообщении
-
Проверка логов:
- Проверьте логи Grafana на предмет ошибок рендеринга
- Ищите сообщения об ошибках в
/var/log/grafana/grafana.log
-
Проверка рендерера:
- Если используется отдельный рендерер, проверьте его доступность
- Проверьте логи рендерера на предмет ошибок
Команды для диагностики:
# Проверка доступности рендерера
curl -I http://your-grafana:3000/render
# Проверка логов Grafana
docker logs grafana_container --tail 100
# Проверка логов рендерера (если используется отдельный контейнер)
docker logs renderer_container --tail 100
Распространенные проблемы
Проблема 1: Изображения не отображаются в Telegram
Возможные причины и решения:
- Telegram не поддерживает некоторые форматы изображений → используйте PNG или JPEG
- Слишком большие изображения → уменьшите размеры в настройках рендеринга
- Изображения защищены CORS → настройте CORS для рендерера
Решение CORS:
# nginx.conf для рендерера
location /render {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
}
Проблема 2: Ошибки рендеринга
Логи ошибок:
Failed to render dashboard: rendering timeout
Image format not supported
Failed to query panel data
Решения:
- Увеличьте таймаут рендеринга
- Упростите дашборд (слишком много панелей)
- Проверьте доступность источников данных
Проблема 3: Telegram бот не отправляет сообщения
Проверки:
- Убедитесь, что бот активен и имеет права отправки сообщений
- Проверьте правильность Chat ID
- Проверьте наличие интернета у бота
- Убедитесь, что Telegram API доступен в вашей регионе
Проверка Chat ID:
- Отправьте сообщение боту
- Перейдите в https://api.telegram.org/bot
/getUpdates - Найдите ваш Chat ID в ответе
Проблема 4: Docker рендеринг не работает
Решение:
Настройте отдельный контейнер для рендеринга:
# docker-compose.yml
version: '3.8'
services:
grafana:
image: grafana/grafana:11.2.0
environment:
GF_RENDERING_SERVER_URL: http://renderer:8080/render
GF_RENDERING_CALLBACK_URL: http://grafana:3000/render
renderer:
image: grafana/grafana-image-renderer
ports:
- "8080:8080"
environment:
- RENDERING_ARGS=--window-size=1280,720
Источники
- Official Grafana Documentation - Notifications
- Grafana Telegram Notifications Setup Guide
- Grafana Image Rendering Configuration
- Docker Grafana Rendering Setup
- Telegram Bot API Documentation
Заключение
Включение отправки изображений в Grafana для Telegram уведомлений требует правильной настройки нескольких компонентов:
-
Основные шаги: Настройте канал Telegram уведомлений, включите рендеринг изображений и используйте HTML-шаблоны с тегом
<img>. -
Критические настройки: Убедитесь, что рендеринг изображений включен в Grafana, и правильно настройте URL для доступа к отрендеренным изображениям.
-
Отладка: Используйте логи Grafana и тестовый канал для диагностики проблем с отображением изображений.
-
Docker окружение: При использовании Docker рекомендуется настроить отдельный сервис для рендеринга изображений для лучшей производительности.
Если изображения все равно не отображаются, проверьте настройки CORS, размер изображений и доступность рендерера. Для сложных случаев использования рекомендуется обратиться к официальной документации Grafana или сообществу.