Caution

Начиная с релиза Grafana 12.4.0, репозиторий grafana/grafana-oss в Docker Hub больше не будет обновляться. Вместо него мы рекомендуем использовать репозиторий grafana/grafana в Docker Hub. Эти два репозитория содержат одинаковые Docker-образы Grafana OSS.

Настройка Docker-образа Grafana

В этом разделе объясняется, как запускать Grafana в Docker в сложных средах, где требуется:

  • Использовать разные образы
  • Менять уровни логирования
  • Определять секреты в облаке
  • Настраивать плагины

Примечание: В примерах этого раздела используется Docker-образ Grafana Enterprise. Вы можете использовать редакцию Grafana с открытым исходным кодом, изменив Docker-образ на grafana/grafana.

Поддерживаемые варианты Docker-образа

Устанавливать и запускать Grafana можно с помощью следующих официальных Docker-образов.

  • Grafana Enterprise: grafana/grafana-enterprise

  • Grafana Open Source: grafana/grafana

Каждая редакция доступна в двух вариантах: Alpine и Ubuntu.

Alpine Linux — это дистрибутив Linux, не аффилированный с какой-либо коммерческой организацией. Это универсальная операционная система, ориентированная на пользователей, которые ценят безопасность, эффективность и удобство. Alpine Linux значительно меньше других базовых образов дистрибутивов, что позволяет создавать более компактные и более защищённые образы.

По умолчанию образы собираются на основе широко используемого базового образа проекта Alpine Linux, который можно найти в Docker-репозитории Alpine. Если для вас важна безопасность и вы хотите минимизировать размер образа, рекомендуется использовать вариант Alpine. Однако важно учитывать, что вариант Alpine использует musl libc вместо glibc и других. В результате некоторые программы могут столкнуться с проблемами в зависимости от их требований к libc. Тем не менее, у большинства программ проблем быть не должно, поэтому вариант Alpine в целом надёжен.

Образ Ubuntu

Образы Grafana Enterprise и OSS на основе Ubuntu собираются на базе образа Ubuntu, который можно найти в Docker-репозитории Ubuntu. Образ на основе Ubuntu может быть хорошим выбором для пользователей, которые предпочитают образ на базе Ubuntu или нуждаются в определённых инструментах, недоступных в Alpine.

  • Grafana Enterprise: grafana/grafana-enterprise:<version>-ubuntu

  • Grafana Open Source: grafana/grafana:<version>-ubuntu

Запуск конкретной версии Grafana

Вы также можете запустить конкретную версию Grafana или бета-версию на основе ветки main репозитория grafana/grafana на GitHub.

Примечание: Если вы используете операционную систему Linux, например Debian или Ubuntu, и при выполнении команд Docker возникают ошибки прав доступа, возможно, потребуется добавить префикс sudo к команде или добавить своего пользователя в группу docker. В официальной документации Docker есть инструкции о том, как запускать Docker от имени пользователя, не являющегося root.

Чтобы запустить конкретную версию Grafana, укажите её в разделе команды:

Bash
docker run -d -p 3000:3000 --name grafana grafana/grafana-enterprise:<version number>

Пример:

Следующая команда запускает контейнер Grafana Enterprise и указывает версию 9.4.7. Если вы хотите запустить другую версию, измените раздел с номером версии.

Bash
docker run -d -p 3000:3000 --name grafana grafana/grafana-enterprise:9.4.7

Для последних релизов Grafana в Docker-репозиториях grafana/grafana и grafana/grafana-enterprise также есть теги minor-версий. Например, если вы всегда хотите иметь последнюю версию 12.1, можно использовать grafana/grafana-enterprise:12.1 или grafana/grafana-enterprise:12.1-ubuntu.

Запуск ветки main Grafana

После каждой успешной сборки ветки main обновляются два тега: grafana/grafana:main и grafana/grafana:main-ubuntu. Кроме того, создаются два новых тега: grafana/grafana-dev:<version> и grafana/grafana-dev:<version>-ubuntu, где version — пре-релизная версия Grafana. Например, если 1234 — это Run ID сборки в GitHub, то 12.2.0-1234. Эти теги обеспечивают доступ к самым последним сборкам ветки main Grafana. Дополнительную информацию см. в разделе grafana/grafana-dev.

Чтобы обеспечить стабильность и согласованность, мы настоятельно рекомендуем использовать тег grafana/grafana-dev:<version> при запуске ветки main Grafana в производственной среде. Этот тег гарантирует, что вы используете конкретную версию Grafana, а не самый последний коммит, который потенциально может привнести ошибки или проблемы. Он также позволяет не засорять пространство имён тегов для основных образов Grafana тысячами пре-релизных тегов.

Список доступных тегов см. в разделах grafana/grafana и grafana/grafana-dev.

Пути по умолчанию

Grafana поставляется с параметрами конфигурации по умолчанию, которые остаются неизменными между версиями независимо от операционной системы или среды (например, виртуальная машина, Docker, Kubernetes и т. д.). Все настройки конфигурации по умолчанию можно посмотреть в документации Настройка Grafana.

При запуске Docker-контейнера Grafana по умолчанию задаются следующие конфигурации. При работе в Docker вы не можете изменить конфигурации, отредактировав файл conf/grafana.ini. Вместо этого конфигурацию можно изменить с помощью переменных среды.

Параметр Значение по умолчанию
GF_PATHS_CONFIG /etc/grafana/grafana.ini
GF_PATHS_DATA /var/lib/grafana
GF_PATHS_HOME /usr/share/grafana
GF_PATHS_LOGS /var/log/grafana
GF_PATHS_PLUGINS /var/lib/grafana/plugins
GF_PATHS_PROVISIONING /etc/grafana/provisioning

Установка плагинов в Docker-контейнере

Вы можете устанавливать общедоступные плагины, а также плагины, которые являются приватными или используются внутри организации. Инструкции по установке плагинов см. в разделе Установка плагинов в Docker-контейнере.

Установка плагинов из других источников

Чтобы установить плагины из других источников, необходимо определить пользовательский URL и указать его непосредственно перед именем плагина в переменной среды GF_PLUGINS_PREINSTALL: GF_PLUGINS_PREINSTALL=<plugin ID>@[<plugin version>]@<url to plugin zip>.

Пример:

Следующая команда запускает Grafana Enterprise на порту 3000 в отсоединённом режиме и устанавливает пользовательский плагин, заданный как параметр URL в переменной среды GF_PLUGINS_PREINSTALL.

Bash
docker run -d -p 3000:3000 --name=grafana \
  -e "GF_PLUGINS_PREINSTALL=custom-plugin@@http://plugin-domain.com/my-custom-plugin.zip,grafana-clock-panel" \
  grafana/grafana-enterprise

Сборка пользовательского Docker-образа Grafana

В репозитории Grafana на GitHub папка packaging/docker/custom/ содержит Dockerfile, который можно использовать для сборки пользовательского образа Grafana. Dockerfile принимает GRAFANA_VERSION и GF_INSTALL_PLUGINS в качестве аргументов сборки.

Аргумент сборки GRAFANA_VERSION должен быть допустимым тегом Docker-образа grafana/grafana. По умолчанию Grafana собирает образ на основе Alpine. Чтобы собрать образ на основе Ubuntu, добавьте -ubuntu к аргументу сборки GRAFANA_VERSION.

Пример:

В следующем примере показано, как собрать и запустить пользовательский Docker-образ Grafana на основе последнего официального Docker-образа Grafana на базе Ubuntu:

Bash
# go to the custom directory
cd packaging/docker/custom

# run the docker build command to build the image
docker build \
  --build-arg "GRAFANA_VERSION=latest-ubuntu" \
  -t grafana-custom .

# run the custom grafana container using docker run command
docker run -d -p 3000:3000 --name=grafana grafana-custom

Сборка Docker-образа Grafana с предустановленными плагинами

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

Примечание: Чтобы указать версию плагина, можно использовать аргумент сборки GF_INSTALL_PLUGINS и добавить номер версии. Если номер версии не указан, используется последняя версия. Например, можно использовать --build-arg "GF_INSTALL_PLUGINS=grafana-clock-panel 1.0.1,yesoreyeram-infinity-datasource 3.8.0", чтобы указать версии двух плагинов.

Пример:

В следующем примере показано, как собрать и запустить пользовательский Docker-образ Grafana с предустановленными плагинами.

Bash
# go to the custom directory
cd packaging/docker/custom

# running the build command
# include the plugins you want e.g. clock planel etc
docker build \
  --build-arg "GRAFANA_VERSION=latest" \
  --build-arg "GF_INSTALL_PLUGINS=grafana-clock-panel,yesoreyeram-infinity-datasource" \
  -t grafana-custom .

# running the custom Grafana container using the docker run command
docker run -d -p 3000:3000 --name=grafana grafana-custom

Сборка Docker-образа Grafana с предустановленными плагинами из других источников

Вы можете создать Docker-образ, содержащий плагин, который предназначен исключительно для вашей организации, даже если он недоступен публично. Просто используйте аргумент сборки GF_INSTALL_PLUGINS, чтобы указать URL плагина и имя папки установки, например GF_INSTALL_PLUGINS=<url to plugin zip>;<plugin install folder name>.

В следующем примере показано создание настроенного Docker-образа Grafana, который включает пользовательский плагин по ссылке URL, плагин clock panel и плагин simple-json-datasource. Эти плагины можно задать в аргументе сборки с помощью переменной среды Grafana Plugin.

Bash
# go to the folder
cd packaging/docker/custom

# running the build command
docker build \
  --build-arg "GRAFANA_VERSION=latest" \
  --build-arg "GF_INSTALL_PLUGINS=http://plugin-domain.com/my-custom-plugin.zip;my-custom-plugin,grafana-clock-panel,yesoreyeram-infinity-datasource" \
  -t grafana-custom .

# running the docker run command
docker run -d -p 3000:3000 --name=grafana grafana-custom

Логирование

По умолчанию логи Docker-контейнера направляются в STDOUT, что является обычной практикой в сообществе Docker. Это можно изменить, задав другой режим логирования, например console, file или syslog. Можно использовать один или несколько режимов, разделяя их пробелами, например console file. По умолчанию включены оба режима: console и file.

Пример:

В следующем примере Grafana запускается с режимом логирования console file, заданным в переменной среды GF_LOG_MODE.

Bash
# Run Grafana while logging to both standard out
# and /var/log/grafana/grafana.log

docker run -p 3000:3000 -e "GF_LOG_MODE=console file" grafana/grafana-enterprise

Настройка Grafana с помощью Docker Secrets

Вы можете передавать в Grafana конфиденциальные данные, такие как учётные данные для входа и секреты, с помощью файлов конфигурации. Этот метод хорошо работает с Docker Secrets, поскольку секреты автоматически монтируются в расположение /run/secrets/ внутри контейнера.

Этот приём можно применить к любым параметрам конфигурации в conf/grafana.ini, задав GF_<SectionName>_<KeyName>__FILE равным пути к файлу, содержащему секретную информацию. Дополнительные сведения об использовании команд Docker secret см. в разделе docker secret.

В следующем примере показано, как задать пароль администратора:

  • Секрет пароля администратора: /run/secrets/admin_password
  • Переменная среды: GF_SECURITY_ADMIN_PASSWORD__FILE=/run/secrets/admin_password

Настройка учётных данных Docker secrets для AWS CloudWatch

Grafana поставляется со встроенной поддержкой источника данных Amazon CloudWatch. Чтобы настроить источник данных, необходимо предоставить такую информацию, как AWS ID-Key, секретный ключ доступа, регион и т. д. В качестве способа предоставления этой информации можно использовать Docker secrets.

Пример:

В примере ниже показано, как использовать переменные среды Grafana через Docker Secrets для AWS ID-Key, секретного ключа доступа, региона и профиля.

В примере используются следующие значения для источника данных AWS Cloudwatch:

Bash
AWS_default_ACCESS_KEY_ID=aws01us02
AWS_default_SECRET_ACCESS_KEY=topsecret9b78c6
AWS_default_REGION=us-east-1
  1. Создайте Docker secret для каждого из указанных выше значений.

    Bash
    echo "aws01us02" | docker secret create aws_access_key_id -
    Bash
    echo "topsecret9b78c6" | docker secret create aws_secret_access_key -
    Bash
    echo "us-east-1" | docker secret create aws_region -
  2. Выполните следующую команду, чтобы убедиться, что секреты созданы.

    Bash
    $ docker secret ls

    Вывод команды должен выглядеть примерно так:

    ID                          NAME           DRIVER    CREATED              UPDATED
    i4g62kyuy80lnti5d05oqzgwh   aws_access_key_id             5 minutes ago        5 minutes ago
    uegit5plcwodp57fxbqbnke7h   aws_secret_access_key         3 minutes ago        3 minutes ago
    fxbqbnke7hplcwodp57fuegit   aws_region                    About a minute ago   About a minute ago

    Где:

    ID = уникальный ID секрета, который будет использоваться в команде docker run

    NAME = логическое имя, определённое для каждого секрета

  3. Добавьте секреты в командную строку при запуске Docker.

    Bash
    docker run -d -p 3000:3000 --name grafana \
      -e "GF_DEFAULT_INSTANCE_NAME=my-grafana" \
      -e "GF_AWS_PROFILES=default" \
      -e "GF_AWS_default_ACCESS_KEY_ID__FILE=/run/secrets/aws_access_key_id" \
      -e "GF_AWS_default_SECRET_ACCESS_KEY__FILE=/run/secrets/aws_secret_access_key" \
      -e "GF_AWS_default_REGION__FILE=/run/secrets/aws_region" \
      -v grafana-data:/var/lib/grafana \
      grafana/grafana-enterprise

Вы также можете указать несколько профилей в GF_AWS_PROFILES (например, GF_AWS_PROFILES=default another).

Следующий список включает поддерживаемые переменные среды:

  • GF_AWS_${profile}_ACCESS_KEY_ID: ID ключа доступа AWS (обязательно).
  • GF_AWS_${profile}_SECRET_ACCESS_KEY: секретный ключ доступа AWS (обязательно).
  • GF_AWS_${profile}_REGION: регион AWS (необязательно).

Устранение неполадок развёртывания в Docker

По умолчанию уровень логирования Grafana установлен в INFO, но вы можете повысить уровень логирования до режима DEBUG, когда хотите воспроизвести проблему.

Дополнительные сведения о логировании см. в разделе логи.

Повышение уровня логирования с помощью команды Docker run (CLI)

Чтобы повысить уровень логирования до режима DEBUG, добавьте переменную среды GF_LOG_LEVEL в командную строку.

Bash
docker run -d -p 3000:3000 --name=grafana \
  -e "GF_LOG_LEVEL=debug" \
  grafana/grafana-enterprise

Повышение уровня логирования с помощью Docker Compose

Чтобы повысить уровень логирования до режима DEBUG, добавьте переменную среды GF_LOG_LEVEL в файл docker-compose.yaml.

YAML
version: '3.8'
services:
  grafana:
    image: grafana/grafana-enterprise
    container_name: grafana
    restart: unless-stopped
    environment:
      # increases the log level from info to debug
      - GF_LOG_LEVEL=debug
    ports:
      - '3000:3000'
    volumes:
      - 'grafana_storage:/var/lib/grafana'
volumes:
  grafana_storage: {}

Проверка файла Docker Compose YAML

Вероятность появления синтаксических ошибок в YAML-файле возрастает по мере усложнения файла. Для проверки на синтаксические ошибки можно использовать следующую команду.

Bash
# go to your docker-compose.yaml directory
cd /path-to/docker-compose/file

# run the validation command
docker compose config

Если в YAML-файле есть ошибки, вывод команды выделит строки, содержащие ошибки. Если ошибок в YAML-файле нет, вывод включает содержимое файла docker-compose.yaml в подробном формате YAML.