Как установить и настроить Grafana

Установка и настройка Grafana

Рассказываем об инструменте Grafana, его установке и настройке, подключении внешних источников данных и не только.

Что такое Grafana

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

Grafana поддерживает установку на самые популярные операционные системы: Linux (Debian, Ubuntu, CentOS, Fedora, OpenSuse, RedHat), Mac и Windows. Доступные базы данных, в которых можно хранить информацию о пользователях и дашбордах, — SQLite (используется по умолчанию), MySQL и PostgreSQL.

Подготовка серверов

В качестве демонстрации инструмента будем использовать облачные серверы на CentOS Stream и Ubuntu, на которые установим Grafana с базой данных SQLite.

1. В панели управления перейдем в раздел Облачная платформа и нажмем кнопку Создать сервер.

Создание сервера в панели управления Selectel.
Создание сервера в панели управления Selectel.

2. Регион и пул рекомендуем выбрать исходя из местоположения ваших пользователей и других обстоятельств. В рамках инструкции использовали регион Москва с пулом ru-7a. Конфигурацию сервера выбираем фиксированную с 1 vCPU и 1 ГБ RAM. В качестве ОС используем CentOS 8 64-bit. Для демонстрации будет достаточно жесткого диска на 10 ГБ (выбран по умолчанию).

Конфигурация сервера на CentOS8 Stream 64-bit в разделе Облачная платформа.
Конфигурация сервера на CentOS8 Stream 64-bit в разделе Облачная платформа.

3. Прокручиваем страницу вниз и нажимаем кнопку Создать.

Характеристики сервера и финальная стоимость.

4. Аналогичным образом создаем сервер с Ubuntu 20.04 LTS 64-bit. Здесь меняем только разделы Источник и Имя.

Конфигурация сервера на Ubuntu 20.04 LTS 64-bit в разделе Облачная платформа.
Конфигурация сервера на Ubuntu 20.04 LTS 64-bit в разделе Облачная платформа.

5. Готово. Оба сервера появятся в разделе Облачная платформа → Серверы.

Установка Grafana на Ubuntu

1. Скачиваем GPG-ключ из репозитория производителя и добавляем его в список надежных:


    wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

2. Добавляем в систему репозиторий Grafana:


    sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

3. Обновляем кэш APT и установим Grafana:


    sudo apt update
sudo apt install grafana

4. Включаем автозагрузку и запускаем демон Grafana:


    sudo systemctl enable grafana-server
sudo systemctl start grafana-server

5. Установка завершена. Grafana на Ubuntu 20.04 готова к использованию. Проверим текущий статус сервиса:


    sudo systemctl status grafana-server

6. Получаем вывод:


    grafana-server.service - Grafana instance
   Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-01-25 09:44:26 MSK; 10s ago

Установка Grafana на CentOS Stream

Установка Grafana на CentOS Stream выполняется из репозитория разработчиков. Скачать дистрибутив можно с официального сайта

1. Создаем новую конфигурацию репозитория:


    sudo nano /etc/yum.repos.d/grafana.repo

2. Вписываем в файл следующие переменные со значениями:


    [grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

3. Устанавливаем Grafana:


    sudo yum install grafana -y

4. Включаем автозагрузку и запускаем демон Grafana:


    sudo systemctl enable grafana-server
sudo systemctl start grafana-server

5. Установка завершена и Grafana на CentOS Stream готова к использованию. Проверяем статус сервиса:


    sudo systemctl status grafana-server

6. Получаем вывод, что Grafana работает корректно:


    grafana-server.service - Grafana instance
   Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-01-25 09:48:04 MSK; 5s ago

Настройка брандмауэра для доступа к Grafana

По умолчанию Grafana доступна на порте 3000. При использовании firewalld или iptables необходимо разрешить сетевой доступ к этому порту из внешнего мира. Опишем наборы команд для каждого случая.

Команды для firewalld. Они добавляют новое правило и перезагружают сервис для применения конфигурации:


    firewall-cmd --zone=public --add-port=3000/tcp --permanent
systemctl reload firewalld

Набор команд для iptables:


    nano /etc/sysconfig/iptables

Также вписываем строку в раздел OUTPUT ACCEPT, после чего перезапускаем iptables:


    -A INPUT -p tcp -m tcp --dport 3000 -m state --state NEW -j ACCEPT
sudo systemctl restart iptables

После выполнения описанных шагов сетевой экран будет разрешать подключения по порте 3000. В этом можно убедиться, открыв в браузере интерфейс Grafana. Логин и пароль по умолчанию — admin.

Стартовая страница Grafana при входе через браузер.
Стартовая страница Grafana при входе через браузер.

Если же войти в Grafana не удается или вы поменяли пароль и не можете его вспомнить, то через CLI можно сбросить административный пароль веб-интерфейса:


    grafana-cli admin reset-admin-password --homepath "/usr/share/grafana" новый_пароль

Теперь можно входить с новым паролем.

Источники данных Grafana и установка плагинов

Мониторинг — одно из основных назначений использования Grafana. Сервис «из коробки» поддерживает различные источники данных. Среди наиболее популярных:

  • Prometheus,
  • Graphite,
  • OpenTSDB,
  • InfluxDB,
  • Elasticsearch.
Список источников данных в интерфейсе Grafana.
Список источников данных в интерфейсе Grafana.

Полный список можно посмотреть в официальной документации. Однако и он может быть расширен сторонними плагинами — например, Zabbix. 

1. Установим плагин в Grafana и перезагрузим сервис: 


    grafana-cli plugins install alexanderzobnin-zabbix-app
systemctl restart grafana-server

2. В Grafana переходим в Configuration → Plugins. Находим здесь плагин для Zabbix.

Раздел Configuration, вкладка Plugins в интерфейсе Grafana.
Раздел Configuration, вкладка Plugins в интерфейсе Grafana.

3. Переходим на страницу плагина и нажимаем на кнопку Enable.

Страница плагина Zabbix.
Страница плагина Zabbix.

4. После включения плагина в меню Data Sources появится новый источник данных. Нажимаем на кнопку Select и переходим к его настройке.

Zabbix в разделе Data Sources.
Zabbix в разделе Data Sources.

5. В настройках плагина указываем URL-адрес, имя пользователя и пароль для доступа по API.

Страница настроек плагина.
Страница настроек плагина.

6. Нажимаем на кнопку Save & Test и получаем подтверждение, что произвели настройку корректно.

Завершение настройки плагина.

6. Готово. Теперь данные из Zabbix можно использовать для создания визуализаций.

Создание и настройка панелей и дашбордов

Панели и дашборды — основные сущности представлений внутри Grafana. Каждый дашборд состоит из набора панелей. Для создания дашбордов переходим в представление Dashboards и нажимаем на кнопку New Dashboard.

Раздел Dashboards.
Раздел Dashboards.

На следующем шаге будет предложено добавить на дашборд новую панель.

Добавление новой панели в окне New dashboard.
Добавление новой панели в окне New dashboard.

В Grafana есть встроенные панели, которые можно использовать сразу. Разберемся в их типах.

  • Graph — панель с графиками. Можно комбинировать несколько метрик на одной панели.
  • Stat (ранее SingleStat) — одиночный график с возможностью отображения моментального значения метрики.
  • Gauge — панель в формате спидометра, в которой можно ограничить верхнее значение на шкале.
  • Bar Gauge — отображает несколько метрик на вертикальной гистограмме.
  • Table — представлена в виде таблицы, где можно отображать значения нескольких метрик.
  • Text —  отображает произвольного текста (подписи).
  • Heatmap — визуализирует тепловую карту значений метрик.
  • Alert list — демонстрирует события из внешних систем.
  • Dashboard list — комбинированная панель, которая отображает избранные дашборды.
  • News — показывает новостную ленты из внешних источников.
  • Zabbix problems — демонстрирует события из системы мониторинга Zabbix.
  • Logs — показывает строки лога, которые собираются одной из внешних систем.
Набор встроенных панелей в интерфейсе Grafana.
Набор встроенных панелей в интерфейсе Grafana.

Выберем в выпадающем меню источник данных Zabbix и укажем группу, хост, приложение и элемент данных. Если все выполнено верно — на графике появятся данные.

Данные на графике с отображением информации о группе, хосте, приложении и элементе данных.

Grafana поддерживает различные типы визуализаций, среди которых:

  • графические,
  • табличные,
  • гистограммы,
  • тепловые карты,
  • карты сетевого взаимодействия в Grafana.

При создании новой панели в разделе Visualization можно выбрать тип визуализации. Перейдем к созданию SingleStat (отображается как Stat) — панели с комбинацией численного и графического представлений. После ввода данных для Zabbix нажмем кнопку Apply.

Типы визуализаций в Grafana.
Типы визуализаций в Grafana.

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

Всплывающее меню настроек панели.
Окно настройки дашборда.
Окно настройки дашборда.

Импорт и экспорт дашбордов

В Grafana можно импортировать и экспортировать дашборды. Для импорта нужно перейти в представление Dashboards и нажать кнопку Import.

Раздел Dashnoards.

Здесь доступно две опции: загрузка произвольного JSON и импорт готовых дашбордов из официального сайта. Во втором случае нужно указывать ID дашборда.

Окно импорта дашборда.
Окно импорта дашборда.

Чтобы экспортировать любой дашборд, необходимо открыть окно Share с помощью иконки в верхней части экрана и нажать Save to file. Дашборд будет сохранен в формате JSON.

Окно экспорта дашборда.
Окно экспорта дашборда.

Обратный прокси-сервер и SSL

Для настройки SSL в Grafana нужно использовать обратный прокси-сервер. В рамках инструкции расскажем, как настроить его на базе Nginx. Для демонстрации мы зарегистрировали домен grafana.tk, для которого выпустили сертификат Let’s Encrypt.

Зарегистрированный домен grafana.tk в freenom.
Зарегистрированный домен grafana.tk в freenom.

После создания сервера мы настроили веб-сервер Nginx для работы через SSL. Теперь перенаправим трафик на порт 3000, по которому доступна Grafana. 

1. Открываем конфигурационный файл веб-сервера:


    sudo nano /etc/nginx/sites-available/grafana.tk

2. Здесь будем работать со следующим блоком конфигурации:


    ...
        location / {
                try_files $uri $uri/ =404;
        }
...

3. Заменяем его на другой, чтобы настроить переадресацию на локальный порт 3000.


    ...
        location / {
                try_files $uri $uri/ =404;
        }
...

4. Проверяем корректность конфигурации Nginx и перезапускаем его:


    sudo nginx -t
sudo systemctl reload nginx

5. Теперь тестовая Grafana доступна по URL. Проверим:

Доступ по URL из браузера.
Доступ по URL из браузера. 

Кроме настроек SSL, для повышения безопасности в Grafana можно отключить анонимный доступ и создание новых учетных записей.

Конфигурационный файл Grafana

Конфигурационный файл (по умолчанию /etc/grafana/grafana.ini) позволяет добиться тонкой настройки Grafana. Здесь хранятся параметры, которые можно менять в зависимости от задач. Рассмотрим основные блоки файла.

[paths]

В директории data Grafana хранит БД sqlite3 и другие данные. Для хранения логов сервис использует logs. Обе директории задаются в стартовом скрипте init.d.

[server]

http_addr — IP-адрес, на котором будет доступен веб-интерфейс Grafana. Если параметр не указан, то веб-версия будет доступна по всем сетевым интерфейсам сервера.

http_port — порт, на котором будет доступен веб-интерфейс Grafana. По умолчанию номер порта 3000. Если нужно использовать порт 80, можно настроить переадресацию в iptables:


    sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000

Для переадресации можно также использовать веб-сервер Nginx или Apache.

protocol — протокол, по которому будет доступна Grafana, — HTTP или HTTPS.

domain может использоваться только вместе с опцией root_url (см. ниже). Важно, если вы используете аутентификацию через GitHub или Google OAuth.

enforce_domain — переадресация на корректный домен, если заголовок хоста не соответствует домену. По умолчанию в значении false.

root_url — полный URL-адрес для доступа к Grafana через веб-браузер. Важно, если вы используете аутентификацию через GitHub или Google OAuth.

static_root_path — путь к директории, в которой находятся файлы HTML, JS и CSS.

cert_file — директория с файлом сертификата (если доступ к Grafana по  HTTPS).

cert_key — директория с файлом ключа (если доступ к Grafana осуществляется по протоколу HTTPS).

[database]

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

type — тип БД на выбор. Поддерживаются mysql, postgres и sqlite3.

path — параметр применим только к базе данных sqlite3. Путь к файлу данных.

host — параметр применим только к MySQL или Postgres. Включает IP-адрес или hostname и номер порта. Например, для MySQL запущенной на одном сервере с Grafana, host = 127.0.0.1:3306

name — имя базы данных Grafana.

user — имя пользователя базы данных (не применимо к sqlite3).

password — пароль пользователя базы данных (не применимо к sqlite3).

ssl_mode — применимо только к postgres. Доступны опции: disable, require или verify-full.

[security]

admin_user — имя привилегированного пользователя Grafana. По умолчанию admin.

admin_password — пароль привилегированного пользователя Grafana. По умолчанию admin.

login_remember_days — количество дней, в течении которых не требуется повторный ввод логина и пароля.

disable_gravatar — отключение пользовательской иконки. Для отключения нужно установить в значение true.

[users]

allow_sign_up — устанавливается в false для предотвращения создания новых учетных записей действующими пользователями.

allow_org_create — устанавливается в false для предотвращения создания новых организаций действующими пользователями. По умолчанию в значении true.

auto_assign_org — устанавливается в true для автоматического добавления новых пользователей в основную организацию (id 1). Когда установлено в false, созданные пользователи добавляются в новые организации, которые создаются автоматически.

auto_assign_org_role — роль новых пользователей будет привязана к основной организации.

[auth.anonymous]

enabled — для включения анонимного доступа нужно установить в значение true. По умолчанию false.

org_name — устанавливает имя организации, которое будет использоваться для анонимных пользователей.

org_role — указывает роль для анонимных пользователей. По умолчанию — Viewer, но для выбора доступны Editor и Admin.

[auth.basic]

enabled — когда установлено значение true (по умолчанию), HTTP API будет принимать соединения с флагом basic authentication.

[auth.ldap]

enabled — устанавливается в true для включения интеграции с LDAP. 

config_file — путь к конфигурационному файлу LDAP. По умолчанию /etc/grafana/ldap.toml.

[auth.proxy]

Функция разрешает аутентифицироваться в обратном прокси.

enabled — параметр включения. По умолчанию установлен в false.

header_name — по умолчанию установлено в X-WEBAUTH-USER.

header_property — по умолчанию имя пользователя, но также может принимать значение адреса электронной почты.

auto_sign_up — устанавливается в значение true для включения автоматического входа пользователей, которые отсутствуют в Grafana DB. По умолчанию установлено значение true.

[session]

provider — валидные значения: memory, file, mysql, postgres. По умолчанию установлено значение file.

provider_config — опция должна быть сконфигурирована отдельно в зависимости от того, какой тип провайдера сессии установлен.

  • file — путь к файлу с сессиям. Например, data/sessions.
  • mysql — go-sql-driver/mysql dsn config string. Например, user:password@tcp(127.0.0.1:3306)/database_name
  • postgres — ex: user=a password=b host=localhost port=5432 dbname=c sslmode=disable

cookie_name — имя сессионного cookie в Grafana.

cookie_secure — устанавливается в true, если Grafana находится только за HTTPS-прокси. По умолчанию установлено в значение false.

session_life_time параметр длины сессии в секундах. По умолчанию — 86 400 секунд (24 часа).

[analytics]

reporting_enabled — когда опция включена, Grafana будет отправлять анонимную статистику на stats.grafana.org. Никакие IP-адреса не записываются. Данные отправляются каждые 24 часа. По умолчанию установлено в true.

google_analytics_ua_id — если вы хотите отслеживать активности в Grafana при помощи Google analytics, укажите ваш Universal Analytics ID. По умолчанию функция отключена.

[dashboards.json]

Если у вас есть система, которая автоматически строит дашборды из JSON-файлов, вы можете включить эту опцию. Так новые дашборды будут доступны через поиск в Grafana.

enabled — значение true или false. По умолчанию выключено.
path — полный путь к директории, которая содержит JSON-файлы с дашбордами.

Заключение

Мы рассмотрели подходы к установке, настройке и работе с Grafana. Этот популярный инструмент имеет большое сообщество разработчиков, которые поддерживают и развивают проект, создавая новые плагины и дашборды. У Grafana регулярно выходят обновления и улучшения, поэтому можно без опасений использовать этот инструмент в продакшн-средах.