![Изображение записи](https://selectel.ru/blog/wp-content/uploads/2021/02/750x394_blog_main.png)
Grafana — инструмент с открытым исходным кодом для визуализации данных из различных систем сбора статистики. Используется для представления в графическом виде временных рядов и текстовых данных.
Grafana поддерживает установку на самые популярные операционные системы: Linux (Debian, Ubuntu, CentOS, Fedora, OpenSuse, RedHat), Mac и Windows. Допустимыми базами данных, в которых возможно хранение данных о пользователях и дашбордах, являются SQLite (используется по умолчанию), MySQL и PostgreSQL. В качестве демонстрационных серверов будем использовать «Облачные серверы» с операционными системами CentOS Stream и Ubuntu, на которые установим Grafana с базой данных SQLite.
Перед началом установки Grafana, подготовим серверы. В консоли управления Selectel перейдём в раздел Облачная платформа и нажмём кнопку Создать сервер.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image4-1525x718.png)
На следующем представлении выберем готовую конфигурацию сервера с 1 vCPU и 1 ГБ RAM с операционной системой CentOS 8 64-bit.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image12-1525x716.png)
Наш сервер будет иметь 10 ГБ на жестком диске. Для целей демонстрации этого достаточно. Прокручиваем вниз и нажимаем кнопку Создать. Аналогичным образом создадим сервер с Ubuntu 20.04 LTS 64-bit.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image23-1525x714.png)
После проделанных манипуляций оба сервера появятся в списке доступных. Приступим к установке Grafana.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image10-1525x712.png)
Установка Grafana на CentOS Stream
Установка Grafana на CentOS Stream выполняется из репозитория разработчиков. Скачать дистрибутив можно также с официального сайта. Создадим новую конфигурацию репозитория:
sudo nano /etc/yum.repos.d/grafana.repo
Впишем в этот файл следующие переменные со значениями:
[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
Далее установим Grafana:
sudo yum install grafana -y
После установки включаем автозагрузку и запускаем демон Grafana:
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
Установка завершена. Grafana на CentOS Stream готова к использованию. Проверим текущий статус сервиса:
sudo systemctl status grafana-server
В результате получим вывод:
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 на Ubuntu 20.04
На Ubuntu Grafana устанавливается из репозитория производителя. Скачаем GPG-ключ и добавим его в список надежных:
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
После этого добавим в систему репозиторий Grafana:
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
Далее обновляем кэш APT и установим Grafana:
sudo apt update
sudo apt install grafana
После установки включаем автозагрузку и запускаем демон Grafana:
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
Установка завершена. Grafana на Ubuntu 20.04 готова к использованию. Проверим текущий статус сервиса:
sudo systemctl status grafana-server
В результате получим вывод:
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
По умолчанию Grafana доступна на порту 3000. При использовании firewalld или iptables, необходимо разрешить сетевой доступ к этому порту из внешнего мира.
Набор команд для firewalld (добавление нового правила и перезагрузка сервиса firewalld для применения конфигурации):
firewall-cmd --zone=public --add-port=3000/tcp --permanent
systemctl reload firewalld
Набор команд для iptables:
nano /etc/sysconfig/iptables
Вписываем в раздел OUTPUT ACCEPT следующую строку:
-A INPUT -p tcp -m tcp --dport 3000 -m state --state NEW -j ACCEPT
И перезапускаем iptables:
sudo systemctl restart iptables
После выполнения описанных в этом разделе манипуляций, сетевой экран будет разрешать подключения по порту 3000. В этом можно убедиться, открыв в браузере интерфейс Grafana. Логин и пароль по умолчанию admin.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image1-1525x1057.png)
Если не удается войти в Grafana или вы поменяли пароль и не можете его вспомнить, через CLI административный пароль Web-интерфейса можно сбросить:
grafana-cli admin reset-admin-password --homepath "/usr/share/grafana" новый_пароль
После выполнения команды выше, можно входить с новым паролем.
Источники данных Grafana и установка плагинов
Grafana поддерживает из коробки различные источники данных:
- Prometheus,
- Graphite,
- OpenTSDB,
- InfluxDB,
- Elasticsearch и другие.
Полный список можно посмотреть в документации. Перечень встроенных источников данных может быть расширен при помощи сторонних плагинов. Один из таких плагинов — плагин Zabbix для Grafana. Мониторинг — одно из основных назначений использования Grafana.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image9-1525x808.png)
Установим этот плагин и добавим его в Grafana.
grafana-cli plugins install alexanderzobnin-zabbix-app
Теперь перезагрузим сервис Grafana:
systemctl restart grafana-server
В интерфейсе Grafana перейдём в Configuration -> Plugins и обнаружим здесь плагин для Zabbix.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image22-1525x810.png)
Перейдем к настройке плагина и нажмём на кнопку Enable.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image17-1525x814.png)
С момента включения плагина, в меню Data Sources появится новый источник данных — Zabbix. Нажмём на кнопку Select и настроим источник данных.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image20-1525x807.png)
В настройках плагина укажем URL-адрес, имя пользователя и пароль для доступа по API к Zabbix.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image18-1525x817.png)
Нажимаем на кнопку Save & Test и получаем подтверждение корректности настроек.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image15-1525x811.png)
С этого момента данных из Zabbix могут быть использованы для создания визуализаций.
Создание и настройка панелей и дашбордов
Панели и дашборды — основные сущности представлений внутри Grafana. Каждый дашборд состоит из набора панелей. Для создания дашбордов перейдём в представление Dashboards и нажмём на кнопку New Dashboard.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image6-1525x808.png)
На следующем шаге будет предложено добавить на дашборд новую панель.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image3-1525x806.png)
Grafana имеет встроенные панели, которые можно сразу начинать использовать. По умолчанию представлены следующие типы:
- Graph — панель с графиками с возможностью комбинировать несколько метрик на одной панели.
- Stat (ранее SingleStat) — панель с одиночным графиком и возможностью отображения моментального значения метрики.
- Gauge — панель в формате спидометра, есть возможность ограничить верхнее значение на шкале.
- Bar Gauge — панель с возможностью отображения нескольких метрик на вертикальной гистограмме.
- Table — панель с представлением в виде таблицы, на которой можно отображать значения нескольких метрик.
- Text — панель для отображения произвольного текста (подписи).
- Heatmap — панель для отображения тепловой карты значений метрик.
- Alert list — панель для отображения событий из внешних систем.
- Dashboard list — комбинированная панель для отображения дашбордов, добавленных в избранное.
- News — панель для отображения новостной ленты из внешних источников.
- Zabbix problems — панель для отображения событий из системы мониторинга Zabbix.
- Logs — панель для отображения строчек лога, которые собираются одной из внешних систем.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image16-1525x815.png)
Далее выберем в выпадающем меню источник данных Zabbix и укажем группу, хост, приложение и элемент данных. Если всё выполнено правильно — на графике появятся данные.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image24-1525x814.png)
Grafana поддерживает различные типы визуализаций:
- графические,
- табличные,
- гистограммы,
- тепловые карты,
- карты сетевого взаимодействия в Grafana и другие.
При создании новой панели, в правой части экрана в разделе Visualization есть возможность выбрать тип визуализации. Перейдем к созданию SingleStat (отображается как Stat) — панели с комбинацией численного и графического представлений. После ввода специфических данных для Zabbix, нажмём кнопку Apply.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image11-1525x819.png)
В результате выполненных действий, увидим на дашборде две панели.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image5-1525x808.png)
У каждой панели и каждого дашборда в Grafana есть свой набор настроек. Настройки первой открываются через выпадающее меню панели, а настройки второго откроются после нажатия на шестеренку в верхнем правом углу экрана.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image19-1525x809.png)
На изображении ниже показаны настройки дашборда.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image7-1525x811.png)
Импорт и экспорт дашбордов
В Grafana можно импортировать и экспортировать дашборды. Для импорта нужно перейти в представление Dashboards и нажать кнопку Import.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image6-1-1525x808.png)
Для импорта доступны две опции: загрузка произвольного JSON и импорт готовых дашбордов с grafana.com. Во втором случае нужно указывать ID дашборда.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image8-1525x813.png)
Для экспорта любого дашборда, необходимо нажать на специальную иконку в верхней части экрана и далее нажать Save to file. Дашборд будет сохранен в формате JSON.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image13-1525x819.png)
Обратный прокси-сервер и SSL
Для настройки SSL в Grafana необходимо использовать обратный прокси-сервер. В этом разделе мы расскажем как настроить такой прокси на базе Nginx. Для целей демонстрации мы зарегистрировали домен grafana.tk, для которого выпустили специальный сертификат Let’s Encrypt.
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image2-1525x509.png)
После создания сервера мы настроили веб-сервер Nginx для работы через SSL. Осталось перенаправить трафик с него на порт 3000, по которому доступна Grafana. Для этого откроем конфигурационный файл веб-сервера.
sudo nano /etc/nginx/sites-available/grafana.tk
В этом файле будем работать с этим блоком конфигурации:
... location / { try_files $uri $uri/ =404; } ...
Заменим его на следующий:
... location / { proxy_pass http://127.0.0.1:3000; } ...
Таким образом мы настроили переадресацию на локальный порт 3000. Теперь можно проверить корректность конфигурации Nginx:
sudo nginx -t
Осталось перезапустить Nginx:
sudo systemctl reload nginx
Теперь наша тестовая Grafana доступна по URL https://grafana.tk. Проверим:
![](https://selectel.ru/blog/wp-content/uploads/2021/02/image21-1525x897.png)
Кроме настроек SSL, в Grafana, для повышения уровня безопасности, можно отключить анонимный доступ и создание новых учетных записей.
Конфигурационный файл Grafana
Для тонкой настройки Grafana, можно использовать конфигурационный файл (по умолчанию /etc/grafana/grafana.ini). Здесь хранятся параметры, которые можно менять при необходимости. Рассмотрим основные блоки этого файла.
[paths]
data
Директория, в которой Grafana хранит базу данных sqlite3 и другие данные. Эта директория обычно задаётся в стартовом скрипте init.d.
logs
Директория, в которой Grafana хранит логи. Эта директория обычно задаётся в стартовом скрипте 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.
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 для отключения. По умолчанию имеет значение false.
[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 (по умолчанию: false).
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
Как долго длится сессия в секундах. По умолчанию 86400 секунд (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 регулярно выходят обновления и улучшения, поэтому можно без опасений использовать этот инструмент в продакшн средах.