Grafana — это мощный инструмент визуализации данных, который позволяет анализировать и мониторить информацию из различных источников, создавая красочные и информативные графики и панели. Вероятно, вы уже слышали о возможностях этой системы.
В этой статье мы рассмотрим процесс быстрого развертывания Grafana с интеграцией Active Directory и подключим плагин мониторинга Zabbix, все это с использованием Docker. Это руководство поможет вам упростить процессы мониторинга и визуализации данных, обеспечив более эффективное управление вашей системой.
Для начала, убедитесь, что у вас уже есть следующие компоненты:
- Движок контейнеризации приложений Docker и инструмент Compose.
- Сервер Active Directory (AD) на базе Windows Server 2019-2022.
Теперь давайте перейдем к настройке:
1. Создание директории для проекта:
mkdir /opt/grafana
2. Определение файла docker-compose.yml:
version: "3.8"
networks:
default:
name: grf-net
external: true
services:
grafana:
image: grafana/grafana:9.3.0-ubuntu
container_name: grafana
restart: unless-stopped
environment:
- GF_SERVER_ROOT_URL=http://grafana.example.com/
- GF_INSTALL_PLUGINS=alexanderzobnin-zabbix-app
ports:
- '3000:3000'
volumes:
- './grafana.ini:/etc/grafana/grafana.ini'
- './ldap.toml:/etc/grafana/ldap.toml'
- grafana-storage:/var/lib/grafana
volumes:
grafana-storage:
3. Редактирование конфигурационного файла grafana.ini:
vi /opt/grafana/grafana.ini
4. Редактирование конфигурационного файла ldap.toml:
vi /opt/grafana/ldap.toml
[[servers]]
host = "1.2.3.4"
port = 389
use_ssl = false
start_tls = false
tls_ciphers = []
min_tls_version = ""
ssl_skip_verify = false
bind_dn = "CORP\\%s"
#bind_password = 'grafana'
timeout = 10
search_filter = "(sAMAccountName=%s)"
search_base_dns = ["dc=example,dc=com"]
[servers.attributes]
name = "givenName"
surname = "sn"
username = "cn"
member_of = "memberOf"
email = "email"
[[servers.group_mappings]]
group_dn = "CN=Grafana Admins,CN=Users,DC=example,DC=com"
org_role = "Admin"
grafana_admin = true
#[[servers.group_mappings]]
#group_dn = "cn=editors,ou=groups,dc=grafana,dc=org"
#org_role = "Editor"
#[[servers.group_mappings]]
#group_dn = "*"
#org_role = "Viewer"
* где:
host — имя сервера контроллера домена или IP-адрес. В данном примере указан сервер 1.2.3.4
port — используемый порт для связи с AD.
use_ssl — использовать ли SSL. В данном примере не используем.
start_tls — использовать ли STARTTLS.
ssl_skip_verify — опция проверки сертификата на корректность. Если задано false, то проверять.
bind_dn — учетная запись, от которой будут выполняться запросы в сторону LDAP. У нее могут быть минимальные права в AD. В данном примере мы используем ту же запись, от которой заходим в систему. В нашем примере работаем в домене CORP.
bind_password — пароль для связки с AD. Обратите внимание, что данная опция должна быть закомментирована, тогда пароль будет браться из того, что введет пользователь при входе.
search_filter — ldap фильтр для поиска учетных записей, которые будут удовлетворять определенным запросам. В моем случае, cn был заменен на sAMAccountName, так как логин в AD больше соответствует данному атрибуту.
search_base_dns — в каком контейнере нужно искать пользователей. Можно задать конкретный организационный юнит. В данном примере поиск будет идти по всему домену.
group_dn — группа безопасности в LDAP каталоге, org_role — роль в Grafana, на основе которой пользователю будут присвоены права, grafana_admin — права суперадминистратора.
В конкретном примере мы предоставляем полные права пользователям группы «Grafana Admins».
port — используемый порт для связи с AD.
use_ssl — использовать ли SSL. В данном примере не используем.
start_tls — использовать ли STARTTLS.
ssl_skip_verify — опция проверки сертификата на корректность. Если задано false, то проверять.
bind_dn — учетная запись, от которой будут выполняться запросы в сторону LDAP. У нее могут быть минимальные права в AD. В данном примере мы используем ту же запись, от которой заходим в систему. В нашем примере работаем в домене CORP.
bind_password — пароль для связки с AD. Обратите внимание, что данная опция должна быть закомментирована, тогда пароль будет браться из того, что введет пользователь при входе.
search_filter — ldap фильтр для поиска учетных записей, которые будут удовлетворять определенным запросам. В моем случае, cn был заменен на sAMAccountName, так как логин в AD больше соответствует данному атрибуту.
search_base_dns — в каком контейнере нужно искать пользователей. Можно задать конкретный организационный юнит. В данном примере поиск будет идти по всему домену.
group_dn — группа безопасности в LDAP каталоге, org_role — роль в Grafana, на основе которой пользователю будут присвоены права, grafana_admin — права суперадминистратора.
В конкретном примере мы предоставляем полные права пользователям группы «Grafana Admins».
5. Сборка и запуск контейнера:
docker compose -f /opt/grafana/docker-compose.yml up -d
6. Проверка статуса контейнера:
docker ps