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

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

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

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

Перед началом установки Grafana, подготовим серверы. В консоли управления Selectel перейдём в раздел Облачная платформа и нажмём кнопку Создать сервер.

На следующем представлении выберем готовую конфигурацию сервера с 1 vCPU и 1 ГБ RAM с операционной системой CentOS 8 64-bit.

Наш сервер будет иметь 10 ГБ на жестком диске. Для целей демонстрации этого достаточно. Прокручиваем вниз и нажимаем кнопку Создать. Аналогичным образом создадим сервер с Ubuntu 20.04 LTS 64-bit.

После проделанных манипуляций оба сервера появятся в списке доступных. Приступим к установке Grafana.

Установка 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 на 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: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.

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

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

После выполнения команды выше, можно входить с новым паролем.

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

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

  • Prometheus,
  • Graphite,
  • OpenTSDB,
  • InfluxDB,
  • Elasticsearch и другие.

Полный список можно посмотреть в документации. Перечень встроенных источников данных может быть расширен при помощи сторонних плагинов. Один из таких плагинов — плагин Zabbix для Grafana. Мониторинг — одно из основных назначений использования Grafana.

Установим этот плагин и добавим его в Grafana.

grafana-cli plugins install alexanderzobnin-zabbix-app

Теперь перезагрузим сервис Grafana:

systemctl restart grafana-server

В интерфейсе Grafana перейдём в Configuration -> Plugins и обнаружим здесь плагин для Zabbix.

Перейдем к настройке плагина и нажмём на кнопку Enable.

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

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

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

С этого момента данных из 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 и импорт готовых дашбордов с grafana.com. Во втором случае нужно указывать ID дашборда.

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

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

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

После создания сервера мы настроили веб-сервер 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. Проверим:

Кроме настроек 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 регулярно выходят обновления и улучшения, поэтому можно без опасений использовать этот инструмент в продакшн средах.