Установка и настройка Grafana
Рассказываем об инструменте Grafana, его установке и настройке, подключении внешних источников данных и не только.
Что такое Grafana
Grafana — инструмент с открытым исходным кодом для визуализации данных из различных систем сбора статистики. Его используют для представления в графическом виде временных рядов и текстовой информации.
Grafana поддерживает установку на самые популярные операционные системы: Linux (Debian, Ubuntu, CentOS, Fedora, OpenSuse, RedHat), Mac и Windows. Доступные базы данных, в которых можно хранить информацию о пользователях и дашбордах, — SQLite (используется по умолчанию), MySQL и PostgreSQL.
Подготовка серверов
В качестве демонстрации инструмента будем использовать облачные серверы на CentOS Stream и Ubuntu, на которые установим Grafana с базой данных SQLite.
1. В панели управления перейдем в раздел Облачная платформа и нажмем кнопку Создать сервер.
2. Регион и пул рекомендуем выбрать исходя из местоположения ваших пользователей и других обстоятельств. В рамках инструкции использовали регион Москва с пулом ru-7a. Конфигурацию сервера выбираем фиксированную с 1 vCPU и 1 ГБ RAM. В качестве ОС используем CentOS 8 64-bit. Для демонстрации будет достаточно жесткого диска на 10 ГБ (выбран по умолчанию).
3. Прокручиваем страницу вниз и нажимаем кнопку Создать.
4. Аналогичным образом создаем сервер с 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 не удается или вы поменяли пароль и не можете его вспомнить, то через CLI можно сбросить административный пароль веб-интерфейса:
grafana-cli admin reset-admin-password --homepath "/usr/share/grafana" новый_пароль
Теперь можно входить с новым паролем.
Источники данных Grafana и установка плагинов
Мониторинг — одно из основных назначений использования Grafana. Сервис «из коробки» поддерживает различные источники данных. Среди наиболее популярных:
- Prometheus,
- Graphite,
- OpenTSDB,
- InfluxDB,
- Elasticsearch.
Полный список можно посмотреть в официальной документации. Однако и он может быть расширен сторонними плагинами — например, Zabbix.
1. Установим плагин в Grafana и перезагрузим сервис:
grafana-cli plugins install alexanderzobnin-zabbix-app
systemctl restart grafana-server
2. В Grafana переходим в Configuration → Plugins. Находим здесь плагин для Zabbix.
3. Переходим на страницу плагина и нажимаем на кнопку Enable.
4. После включения плагина в меню Data Sources появится новый источник данных. Нажимаем на кнопку Select и переходим к его настройке.
5. В настройках плагина указываем URL-адрес, имя пользователя и пароль для доступа по API.
6. Нажимаем на кнопку Save & Test и получаем подтверждение, что произвели настройку корректно.
6. Готово. Теперь данные из Zabbix можно использовать для создания визуализаций.
Создание и настройка панелей и дашбордов
Панели и дашборды — основные сущности представлений внутри Grafana. Каждый дашборд состоит из набора панелей. Для создания дашбордов переходим в представление Dashboards и нажимаем на кнопку New Dashboard.
На следующем шаге будет предложено добавить на дашборд новую панель.
В Grafana есть встроенные панели, которые можно использовать сразу. Разберемся в их типах.
- Graph — панель с графиками. Можно комбинировать несколько метрик на одной панели.
- Stat (ранее SingleStat) — одиночный график с возможностью отображения моментального значения метрики.
- Gauge — панель в формате спидометра, в которой можно ограничить верхнее значение на шкале.
- Bar Gauge — отображает несколько метрик на вертикальной гистограмме.
- Table — представлена в виде таблицы, где можно отображать значения нескольких метрик.
- Text — отображает произвольного текста (подписи).
- Heatmap — визуализирует тепловую карту значений метрик.
- Alert list — демонстрирует события из внешних систем.
- Dashboard list — комбинированная панель, которая отображает избранные дашборды.
- News — показывает новостную ленты из внешних источников.
- Zabbix problems — демонстрирует события из системы мониторинга Zabbix.
- Logs — показывает строки лога, которые собираются одной из внешних систем.
Выберем в выпадающем меню источник данных Zabbix и укажем группу, хост, приложение и элемент данных. Если все выполнено верно — на графике появятся данные.
Grafana поддерживает различные типы визуализаций, среди которых:
- графические,
- табличные,
- гистограммы,
- тепловые карты,
- карты сетевого взаимодействия в Grafana.
При создании новой панели в разделе Visualization можно выбрать тип визуализации. Перейдем к созданию SingleStat (отображается как Stat) — панели с комбинацией численного и графического представлений. После ввода данных для Zabbix нажмем кнопку Apply.
Видим интерфейс с двумя панелями. У каждой из них набор настроек, как и у каждого дашборда в Grafana. Настройки первой панели открываются через выпадающее меню. Чтобы открыть настройки второй, нужно нажать на шестеренку в верхнем правом углу экрана.
Импорт и экспорт дашбордов
В Grafana можно импортировать и экспортировать дашборды. Для импорта нужно перейти в представление Dashboards и нажать кнопку Import.
Здесь доступно две опции: загрузка произвольного JSON и импорт готовых дашбордов из официального сайта. Во втором случае нужно указывать ID дашборда.
Чтобы экспортировать любой дашборд, необходимо открыть окно Share с помощью иконки в верхней части экрана и нажать Save to file. Дашборд будет сохранен в формате JSON.
Обратный прокси-сервер и SSL
Для настройки SSL в Grafana нужно использовать обратный прокси-сервер. В рамках инструкции расскажем, как настроить его на базе Nginx. Для демонстрации мы зарегистрировали домен grafana.tk, для которого выпустили сертификат Let’s Encrypt.
После создания сервера мы настроили веб-сервер 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. Проверим:
Кроме настроек 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 регулярно выходят обновления и улучшения, поэтому можно без опасений использовать этот инструмент в продакшн-средах.