Другое

Как добавить изображения в 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 из Grafana необходимо правильно настроить канал уведомлений. Вот пошаговая инструкция:

  1. Перейдите в настройки уведомлений:

    • Откройте Grafana
    • Перейдите в Configuration → Notifications → Channels
    • Создайте новый канал или отредактируйте существующий
  2. Выберите тип уведомления Telegram:

    • В поле “Type” выберите “Telegram”
    • Укажите ваш Telegram Bot Token (полученный от @BotFather)
  3. Настройте параметры канала:

    • Chat ID: ID вашего чата (для личных бесед с ботом)
    • или используйте Public Channel username (например, @your_channel)
    • Enable: включите канал
  4. Настройте параметры рендеринга:

    • В разделе “Image rendering” убедитесь, что галочка “Enable” установлена
    • Выберите подходящий формат изображения (PNG/JPEG)
    • Укажите размеры изображения по умолчанию

Важно: Для работы изображений необходимо, чтобы в вашей Grafana был включен рендеринг изображений. Проверьте это в Configuration → Image rendering.


Конфигурация шаблонов сообщений

Чтобы изображения корректно отображались в Telegram, используйте HTML-форматирование в шаблоне сообщения:

Базовый шаблон с изображением

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" />

Продвинутый шаблон с несколькими изображениями

html
{{ 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:

  1. Проверка рендеринга:

    • Откройте дашборд
    • Нажмите “Share” → “Direct link rendered image”
    • Убедитесь, что изображение открывается корректно
  2. Настройки рендеринга:

    • Перейдите в 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:

yaml
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:

bash
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

Проверка и отладка

Тестирование уведомлений:

  1. Проверка шаблона:

    • В настройках канала уведомлений нажмите “Test”
    • Убедитесь, что изображение отображается в тестовом сообщении
  2. Проверка логов:

    • Проверьте логи Grafana на предмет ошибок рендеринга
    • Ищите сообщения об ошибках в /var/log/grafana/grafana.log
  3. Проверка рендерера:

    • Если используется отдельный рендерер, проверьте его доступность
    • Проверьте логи рендерера на предмет ошибок

Команды для диагностики:

bash
# Проверка доступности рендерера
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
# 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:

  1. Отправьте сообщение боту
  2. Перейдите в https://api.telegram.org/bot/getUpdates
  3. Найдите ваш Chat ID в ответе

Проблема 4: Docker рендеринг не работает

Решение:
Настройте отдельный контейнер для рендеринга:

yaml
# 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

Источники

  1. Official Grafana Documentation - Notifications
  2. Grafana Telegram Notifications Setup Guide
  3. Grafana Image Rendering Configuration
  4. Docker Grafana Rendering Setup
  5. Telegram Bot API Documentation

Заключение

Включение отправки изображений в Grafana для Telegram уведомлений требует правильной настройки нескольких компонентов:

  1. Основные шаги: Настройте канал Telegram уведомлений, включите рендеринг изображений и используйте HTML-шаблоны с тегом <img>.

  2. Критические настройки: Убедитесь, что рендеринг изображений включен в Grafana, и правильно настройте URL для доступа к отрендеренным изображениям.

  3. Отладка: Используйте логи Grafana и тестовый канал для диагностики проблем с отображением изображений.

  4. Docker окружение: При использовании Docker рекомендуется настроить отдельный сервис для рендеринга изображений для лучшей производительности.

Если изображения все равно не отображаются, проверьте настройки CORS, размер изображений и доступность рендерера. Для сложных случаев использования рекомендуется обратиться к официальной документации Grafana или сообществу.

Авторы
Проверено модерацией
Модерация