Привет, %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 – такой момент имеет место быть.
На этом всё!
Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат, а так же подписывайся на канал.