[Grafana] Установка Grafana 7 на Ubuntu 20.04

Привет, %username%! Немного пробежимся по типичной установке типичной Grafana 7 на типичную Ubuntu 20.04. Так же из плюшек у нас будет авторизация по LDAP (MS Active Directory). Собственно говоря – погнали!

Вводные

Я буду устанавливать Grafana на свежеустановленную Ubuntu 20.04 minimal, а в качестве бэкенда для хранения всех настроек буду использовать PostgreSQL 12, т.к. в моей практике дефолтная установка Grafana с бэкендом в виде SQLite дает некоторые накладки и глюки – при количестве дашбордов более 50, веб-интерфейс начинает подтормаживать, а авторизация через LDAP падает (коннективити проверял – всё хорошо).

Подготовка

Ставим (если у тебя по каким-то причинам еще не установлены) данные пакеты:

sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget

Добавляем ключ и репозиторий Grafana:

wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

Обновляем все пакеты и устанавливаем Grafana:

sudo apt-get update
sudo apt-get install grafana nginx

Настройка

Создаем конфигурацию для Nginx (будем использовать хост graf.jtprog.ru), для этого создаем файл /etc/nginx/sites-available/graf.jtprog.ru.conf и приводим его к следующему виду:

server {
  listen 80;
  server_name graf.jtprog.ru;
  location / {
    return 301 https://graf.jtprog.ru$request_uri;
  }
}

server {
  listen  443 ssl;
  include ssl.conf;
  server_name graf.jtprog.ru;
  access_log /var/log/nginx/grafana.access.log json;
  error_log /var/log/nginx/grafana.error.log;
  location / {
    proxy_pass http://127.0.0.1:3001;
    include proxy_params;
  }
}

Тут видно, что я использую SSL, настройки для которого подключаются через отдельный файл – мне так проще. Далее нам необходимо включить этот конфиг и проверить:

sudo ln -s /etc/nginx/sites-available/graf.jtprog.ru.conf /etc/nginx/sites-enabled/graf.jtprog.ru.conf
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

PostgreSQL

Теперь нам надо установить БД PostgreSQL 12 (она идет в дефолтных репозиториях и меня устраивает), но делать мы этого не будем – на данном сервере у меня развернут Zabbix 5.0, к которому я и установил PostgreSQL. Мы же рассматрим несколько простых команд, которые необходимо выполнить для того, чтобы подружить PostgreSQL и Grafana:

CREATE DATABASE grafana;
CREATE USER grafana WITH PASSWORD 'MySecretPassw0rd';
GRANT USAGE ON SCHEMA schema TO grafana;
GRANT SELECT ON schema.table TO grafana;

Мы создали схему и пользователя grafana.

Grafana

Теперь настроим все, что требуется для запуска Grafana – делается это через файлик /etc/grafana/grafana.ini. Первое что должно быть сделано – выключена возможность регистрироваться. Для начала говорим где у нас будут логи и плагины:

[paths]
logs = /var/log/grafana
plugins = /var/lib/grafana/plugins

Теперь укажем на каком IP:Port надо слушать подключения:

[server]
http_addr = 127.0.0.1
http_port = 3001

Теперь, собственно, говорим что у нас есть PostgreSQL:

[database]
type = postgres
host = 127.0.0.1:5432
name = grafana
user = grafana
password = MySecretPassw0rd

Так же я выключаю Gravatar:

[security]
disable_gravatar = true

И запрещаю анонимный доступ:

[users]
allow_sign_up = false

На этом пока всё.

ВАЖНО! Если сразу включить авторизацию по LDAP, то при первом входе нельзя будет сменить дефолтный пароль для пользователя admin, т.к. в системе (Grafana) установлен не встроенный механизм аутентификации.

Запуск

Теперь нам надо выполнить первичный тестовый запуск для того, чтобы сменить дефолтный пароль пользователя admin. Выполняем:

sudo nginx -s reload
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

После чего идем в браузер и открываем адрес https://graf.jtprog.ru – короче тот, который вы настроили у себя. Логинимся в Grafana с дефолтными логином и паролем admin/admin и сразу же меняем пароль на что-то посложнее и сгенерированное в консоли.

LDAP

Теперь собственно говоря немного магии в Windows. Вам необходимо создать пользователя в Active Directory (AD), который будет бегать на каждую авторизацию в AD и проверять имеет ли пришедший пользователь права на вход, а если имеет, то какие. Я в AD создал пользователя grafanauser, под которым Grafana будет ходить в AD, а так же три группы, которые будут иметь доступ в Grafana в соответствии с имеющимися в Grafana ролями – Viwer, Editor, Admin. После чего создаем файлик /etc/grafana/ldap.toml и приводим его к следующему виду:

[[servers]]
host = "192.168.0.10"
port = 389
use_ssl = false
start_tls = false
ssl_skip_verify = true
# User for access to AD grafanauser
bind_dn = "CN=grafanauser,CN=Users,DC=MYCOM,DC=local"
bind_password = "<password_for_user_gf_auth>"
search_filter = "(sAMAccountName=%s)"
search_base_dns = ["CN=Users,DC=MYCOM,DC=local"]
[servers.attributes]
name = "givenName"
surname = "sn"
username = "cn"
member_of = "memberOf"
email = "email"
[[servers.group_mappings]]
#Данный пример указывает на группу http_grafana, созданная в подразделении Users домена MYCOM.local
#Заменить на свой путь.
group_dn = "CN=grafanaviewer,CN=Users,DC=MYCOM,DC=local"
#Роль группы - может быть Admin, Editor, Viewer. Для каждой роли создается отдельный пункт [[servers.group_mappings]] используя разные группы домена.
org_role = "Viewer"
[[servers.group_mappings]]
group_dn = "CN=grafanaadmin,CN=Users,DC=MYCOM,DC=local"
org_role = "Admin"
[[servers.group_mappings]]
group_dn = "CN=grafanaeditor,CN=Users,DC=MYCOM,DC=local"
org_role = "Editor"

Тут мы настроили биндинг групп AD и встроенных ролей Grafana. Исходя из вышеуказанных настроек у нас в AD должно присутствовать три группы:

  • grafanaviewer – те, кто могу просто посмотреть абсолютно все дашборды;
  • grafanaadmin – администраторы (спасибо Кэп);
  • grafanaeditor – те, кто могут редактировать дашборды, но не могут трогать глобальные настройки;

Теперь нам необходимо сказать нашей Grafana, что она должна ходить в AD за пользователями. Делается это следующим образом. В файле /etc/grafana/grafana.ini, указываем следующие параметры в соответствующем разделе:

[auth.ldap]
enabled = true
config_file = /etc/grafana/ldap.toml
allow_sign_up = true
; Функционал синхронизации доступен только в Enterprise лицензии
; но я включил и забыл =)
sync_cron = "0/10 * * * *"
active_sync_enabled = true

Завершение

Собственно теперь нам необходимо выполнить только одно:

sudo systemctls restart grafana-server

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

ВАЖНО! Пользователи с ролью Viewer могут переводить триггеры в статус Ack. В кейсе когда в качестве datasource используется Zabbix – такой момент имеет место быть.

На этом всё!

Понравился пост? Узнайте, как можно сказать автору спасибо.

Также подпишитесь на Telegram, Twitter или RSS.

JTProg avatar
JTProg
RTFM!!!
comments powered by Disqus