Запуск Grafana в Docker: образ, контейнер и конфигурация

Быстрые ссылки
- Введение и старт
- Выбор варианта образа
- Создание контейнера
- Передача конфигурации
- Замена файла конфигурации
- Управление плагинами
- Создание кастомного образа
- Резюме
Введение и старт
Grafana — ведущая платформа для визуализации метрик и мониторинга. Она позволяет собирать метрики, строить дашборды и получать оповещения по событиям в реальном времени. Grafana хорошо запускается как в облаке, так и в контейнерах. В этом руководстве мы фокусируемся на запуске официального образа Grafana в Docker.
Короткий пример для быстрого старта:
docker run -d --name=grafana -p 3000:3000 grafana/grafana
После запуска сервер будет доступен на порту 3000. Перейдите по адресу http://localhost:3000 и выполните вход с учётными: admin / admin.

Далее добавьте источники данных и создайте дашборды. Нажмите «Add your first data source» на главной странице, выберите поставщика и укажите параметры доступа.

Вернитесь на главную и выберите «Create your first dashboard». Выберите тип визуализации и составьте запрос для выбранного источника данных. После сохранения визуализация появится на дашборде.

Важно: данный быстрый старт хорош для тестов и локальной разработки. Для продакшена применяйте дополнительные меры безопасности и резервного копирования.
Выбор варианта образа
Grafana выпускается в двух основных вариантах: открытая редакция и Enterprise. На Docker Hub их обозначают так:
- grafana/grafana — открытая редакция
- grafana/grafana-enterprise — Enterprise
Каждая версия доступна в вариантах на базе Alpine или Ubuntu. Alpine легче и обычно предпочтительнее для контейнерных развёртываний: у него меньше слоёв и меньше уязвимостей, связанных с ненужными пакетами.
Тег образа формируется как grafana/grafana:<версия>-:
grafana/grafana:8.3.0-ubuntuРекомендация: всегда фиксируйте конкретную версию (8.3.0), чтобы избежать неожиданных несовместимостей при автоматических обновлениях. Если опустить суффикс ОС (grafana/grafana:8.3.0), по умолчанию будет Alpine-версия.
Создание контейнера
Для стабильной работы Grafana в контейнере обычно нужны три вещи:
- Проброшенный порт для доступа (по умолчанию 3000).
- Постоянный том для хранения данных Grafana.
- Способ передачи настроек (переменные окружения или конфиг-файл).
Пример запуска для долгосрочного использования:
docker run -d --name grafana -p 9000:3000 -v grafana-data:/var/lib/grafana grafana/grafana:8.3.0Разбор:
- Контейнер называется
grafana. - Порт хоста 9000 проброшен на 3000 контейнера.
- Том
grafana-dataхранит каталоги Grafana, что защищает данные при перезапуске контейнера.
Совет: используйте docker volumes (а не bind-mount на хосте) для удобства и переносимости, если нет специальных требований к файловой структуре.
Передача конфигурации через переменные окружения
Grafana поддерживает переопределение ключей конфигурации через переменные окружения. Правило простое: возьмите ключ из INI-файла, сделайте его заглавными и добавьте префикс GF_.
Пример INI:
# INI file
instance_name = my-grafana
[security]
admin_user = demo
admin_password = grafanaСоответствующие переменные окружения:
GF_DEFAULT_INSTANCE_NAME=my-grafana
GF_SECURITY_ADMIN_USER=demo
GF_SECURITY_ADMIN_PASSWORD=grafanaДля передачи через docker run используйте -e:
docker run -d --name grafana -p 9000:3000 \
-e GF_DEFAULT_INSTANCE_NAME=my-grafana \
-e GF_SECURITY_ADMIN_USER=demo \
-e GF_SECURITY_ADMIN_PASSWORD=grafana \
-v grafana-data:/var/lib/grafana \
grafana/grafana:8.3.0Примечание: при изменении топ-уровневых параметров инI-файла включайте в имя секции слово DEFAULT (пример выше).
Файловая (file-based) конфигурация и секреты
Для секретов предпочтительнее передавать значения через файлы. Для этого реализовано соглашение с суффиксом __FILE: значение переменной — путь к файлу внутри контейнера. Grafana прочитает содержимое файла и использует его как значение.
Пример использования Docker Secrets или bind-монта:
docker run -d --name grafana -p 9000:3000 \
-e GF_DEFAULT_INSTANCE_NAME=my-grafana \
-e GF_SECURITY_ADMIN_USER=demo \
-e GF_SECURITY_ADMIN_PASSWORD__FILE=/run/secrets/password \
-v grafana-data:/var/lib/grafana \
grafana/grafana:8.3.0Файл пароля можно смонтировать так: -v ./password.txt:/run/secrets/password или хранить в менеджере секретов Docker.
Преимущество: пароль не попадает в логи CI/CD или историю комманд shell.
Замена файла конфигурации
Если вам нужно изменить много параметров — проще подменить весь файл конфигурации. В образе он расположен по пути /etc/grafana/grafana.ini.
Пример bind-mount:
docker run -d --name grafana -p 9000:3000 \
-v ./grafana.ini:/etc/grafana/grafana.ini \
-v grafana-data:/var/lib/grafana \
grafana/grafana:8.3.0Плюсы использования файла:
- Легко документировать через комментарии.
- Удобно хранить в репозитории конфигураций.
- Можно использовать шаблонизацию при сборке образа.
Важно: сохраняйте резервные копии файла и версионируйте изменения.
Управление плагинами
Grafana поддерживает плагины для дополнительных датасорсов и панелей. Официальный образ предоставляет механизм установки плагинов при первом запуске через переменную GF_INSTALL_PLUGINS.
Пример установки официального плагина:
docker run -d --name grafana -p 9000:3000 \
-e GF_INSTALL_PLUGINS=grafana-simple-json-datasource \
-v grafana-data:/var/lib/grafana \
grafana/grafana:8.3.0Можно перечислять плагины через запятую. Поддерживаются версии и внешние URL:
docker run -d --name grafana -p 9000:3000 \
-e GF_INSTALL_PLUGINS=grafana-simple-json-datasource:1.1.0,https://example.com/grafana-plugin.zip \
-v grafana-data:/var/lib/grafana \
grafana/grafana:8.3.0Замечание: установка происходит при первом старте контейнера. Для уже развернутых контейнеров можно установить плагин вручную через grafana-cli или собрать новый образ с предустановленными плагинами.
Создание кастомного образа
Если вы часто развертываете Grafana с похожими настройками, удобнее собрать собственный образ на базе официального. Это повышает воспроизводимость и ускоряет деплой.
Dockerfile-пример:
FROM grafana/grafana:8.3.0
# Установим плагины
ENV GF_INSTALL_PLUGINS=grafana-simple-json-datasource
# Копируем локальный конфиг
COPY grafana.ini /etc/grafana/grafana.iniСборка образа:
docker build -t custom-grafana:latest .Запуск собранного образа:
docker run -d --name grafana -p 9000:3000 \
-v grafana-data:/var/lib/grafana \
custom-grafana:latestПлюсы кастомного образа:
- Быстрая и детерминированная настройка.
- Централизация конфигураций для команды.
- Возможность включить плагины на этапе сборки.
Минус: при выходе новой версии Grafana нужно пересобирать образ и тестировать обновления.
Пример docker-compose
Для удобства развёртывания в командной среде можно использовать docker-compose:
version: '3.7'
services:
grafana:
image: grafana/grafana:8.3.0
ports:
- "9000:3000"
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD__FILE=/run/secrets/grafana_admin_password
- GF_INSTALL_PLUGINS=grafana-simple-json-datasource
volumes:
- grafana-data:/var/lib/grafana
- ./grafana.ini:/etc/grafana/grafana.ini:ro
networks:
- monitoring
volumes:
grafana-data:
networks:
monitoring:
driver: bridgeИспользуйте Docker Secrets для паролей в продакшене.
Резервное копирование и восстановление
Ключевые данные Grafana хранятся в каталоге /var/lib/grafana. Для резервного копирования:
- Сделайте дамп тома:
docker run --rm -v grafana-data:/data -v $(pwd):/backup alpine tar czf /backup/grafana-data.tgz -C /data . - Или синхронизируйте содержимое тома на внешний бэкап-канал.
Восстановление: распакуйте архив в новый или существующий том перед стартом контейнера.
Критерии приёмки:
- Сервис доступен по назначенному порту.
- Источники данных подключаемы и возвращают метрики.
- Сохранённые дашборды и настройки присутствуют после перезапуска.
Обновления и миграции
Процесс обновления образа обычно включает следующие шаги:
- Извлечь список кастомных настроек и плагинов.
- Подтянуть новый официальный образ:
docker pull grafana/grafana:<новая-версия>. - Пересобрать кастомный образ, если он есть.
- Протестировать миграцию на стейджинг-окружении.
- Перезапустить контейнеры в продакшене.
Храните миграции схемы и бэкапы перед обновлением.
Безопасность и харднинг
Рекомендации по безопасности при развёртывании Grafana в Docker:
- Не храните админ-пароли в открытом виде. Используйте Docker Secrets или внешние хранилища.
- Запускайте Grafana за обратным прокси с TLS (например, Traefik, Nginx, Apache).
- Ограничьте доступ к порту управления только доверенным сетям.
- Следите за версиями плагинов и обновляйте их.
- Примите политику RBAC для пользователей и применяйте аудит действий.
- По возможности запускайте контейнер с непривилегированным пользователем.
Конфиденциальность и соответствие требованиям
Grafana может сохранять данные, содержащие персональные сведения (например, метки, имена хостов с PII). Для соответствия требованиям защиты данных:
- Минимизируйте передачу персональных данных в метриках.
- Обеспечьте шифрование каналов (TLS) и контроль доступа.
- При необходимости реализуйте политику хранения и удаления данных.
Совет: проконсультируйтесь с командой по защите данных, если в метриках присутствует PII.
Когда этот подход не подходит
- Если вам нужна управляемая SaaS-версия с автоматическими обновлениями и масштабированием, рассмотрите Grafana Cloud.
- Если инфраструктура требует кластера с высокой доступностью на уровне приложения, контейнер на одном хосте может не подойти. Запускайте Grafana в оркестраторе (Kubernetes) с настройками HA и внешней базой данных.
Альтернативные подходы
- Оркестрация в Kubernetes с Helm-чартом Grafana для масштабирования и управления секретами.
- Развёртывание на виртуальной машине с системными пакетами для интеграции с существующей системой управления конфигурацией.
- Использование Grafana Cloud как SaaS-альтернатива.
Практическое руководство: быстрый playbook для команды
Шаги для безопасного развёртывания Grafana в Docker (SOP):
- Подготовьте том:
docker volume create grafana-data. - Подготовьте секреты: сохраните пароль в Docker Secrets или в зашифрованном хранилище.
- Создайте
grafana.iniс необходимыми настройками и сохраните в репозитории конфигураций. - Соберите кастомный образ при необходимости.
- Разверните контейнер через docker-compose или systemd unit для автоматического рестарта.
- Настройте обратный прокси и TLS.
- Настройте мониторинг Grafana (используйте внешний Prometheus).
- Запланируйте регулярные бэкапы тома.
Чек-лист по ролям
Для DevOps:
- Создать и защищать том для данных.
- Настроить резервное копирование.
- Обеспечить TLS и доступ через прокси.
Для инженера платформы:
- Автоматизировать сборку кастомного образа.
- Обновлять и тестировать новые версии.
Для владельца приложения:
- Проверить источники данных и доступы.
- Настроить уведомления и роли пользователей.
Decision flowchart
flowchart TD
A[Нужно быстро протестировать Grafana?] -->|Да| B[Запустить официальный образ локально]
A -->|Нет| C[Требуются долговременные/продакшн требования]
C --> D{Нужна высокая доступность?}
D -->|Да| E[Развернуть в Kubernetes с Helm]
D -->|Нет| F[Развернуть Docker на хосте с томом и обратным прокси]
E --> G[Использовать внешнюю БД и PVC]
F --> H[Собрать кастомный образ + секреты]Примеры тест-кейсов и критерии приёмки
Тест-кейсы:
- Установка и первичный вход по admin/admin.
- Подключение источника Prometheus и получение метрик.
- Сохранение и восстановление дашборда после перезапуска контейнера.
- Установка и проверка плагина через
GF_INSTALL_PLUGINS.
Критерии приёмки:
- Grafana отвечает на HTTP-запросы на назначенном порту.
- Дашборды отображаются и метрики обновляются.
- Плагины установлены и доступны.
- Резервное копирование/восстановление проходит без потери данных.
Полезные сниппеты и шаблоны
Docker run с file-based секретом:
docker run -d --name grafana -p 9000:3000 \
-e GF_SECURITY_ADMIN_PASSWORD__FILE=/run/secrets/grafana_admin_password \
-v grafana-data:/var/lib/grafana \
-v ./grafana.ini:/etc/grafana/grafana.ini:ro \
grafana/grafana:8.3.0Пример восстановления из архива:
docker run --rm -v grafana-data:/data -v $(pwd):/backup alpine sh -c "cd /data && tar xzf /backup/grafana-data.tgz"Частые ошибки и способы их устранения
- Проблема: не сохраняются дашборды после перезапуска. Причина: отсутствует монтирование тома
/var/lib/grafana. Решение: добавьте-v grafana-data:/var/lib/grafana. - Проблема: плагин не устанавливается. Причина: попытка установить плагин уже работающему контейнеру без пересоздания. Решение: пересоздайте контейнер или установите через
grafana-cliвнутри контейнера. - Проблема: секреты попали в CI-логи. Причина: использование открытых переменных окружения. Решение: применяйте file-based конфигурацию или Docker Secrets.
Миграционные подсказки
- Перед обновлением сделайте полный бэкап тома.
- Тестируйте миграцию на отпечатанном окружении.
- Если используете кастомный образ, следите за совместимостью плагинов.
Заключение
Docker делает развёртывание Grafana быстрым и удобным. Для разработки подойдёт простой docker run, а для продакшена используйте:
- фиксированный образ и версию,
- смонтированные тома для данных,
- безопасные способы передачи секретов (Docker Secrets или file-based),
- обратный прокси с TLS и разграничение доступа.
Важно: автоматизируйте сборку и обновление кастомных образов, планируйте бэкапы и тестируйте обновления на стейджинге, чтобы избегать простоев в продакшене.
Резюме:
- Быстрый старт:
docker run grafana/grafana. - Продакшен: томы, секреты, TLS, бэкапы и CI для сборки образов.
- Для высоких требований — оркестрация в Kubernetes.
Подробные команды и примеры конфигураций приведены выше. Следуйте чек-листу и критериям приёмки перед выпуском в продакшен.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone