Apps: "Zabbix Server v3/4 LTS", "MySQL", "Nginx", "PHP-FPM", LDAP.
Задача: развернуть и преднастроить систему мониторинга "Zabbix".
Последовательность дальнейших действий такова:
1. Подготовка системного окружения (отдельная инструкция);
2. Установка сервера СУБД "MySQL" и создание "базы данных";
3. Инсталляция и настройка интерпретатора PHP;
4. Установка и настройка фронтального web-сервера "Nginx";
5. Развёртывание и преднастройка "Zabbix Server";
6. Настройка аутентификации через внешний сервис LDAP/AD;
7. Настройка почтовых оповещений в "Zabbix".
2. Установка сервера СУБД "MySQL" и создание "базы данных";
3. Инсталляция и настройка интерпретатора PHP;
4. Установка и настройка фронтального web-сервера "Nginx";
5. Развёртывание и преднастройка "Zabbix Server";
6. Настройка аутентификации через внешний сервис LDAP/AD;
7. Настройка почтовых оповещений в "Zabbix".
Установка сервера СУБД "MySQL" и создание "базы данных".
Система мониторинга "Zabbix" одинаково хорошо работает с "PostgreSQL" и "MySQL". Я развёртывал несколько схем в обеих вариантах, и они успешно работали годами. Не могу сказать, чтобы какая-то была лучше. На этот раз воспользуемся "MySQL":
# apt-get install --no-install-recommends mysql-server
Предварительно создадим или обновим параметры прав доступа директории хранения временных файлов - она будет затронута при оптимизации работы СУБД:
# mkdir -p -m 750 /var/lib/mysql/tmp
# chown -R mysql:mysql /var/lib/mysql/tmp
# chown -R mysql:mysql /var/lib/mysql/tmp
Основное требование, предъявляемое "Zabbix" к "MySQL" - поддержка формата хранения данных в "InnoDB":
# vi /etc/mysql/mysql.conf.d/mysql.cnf
....
[mysqld]
....
bind-address = 127.0.0.1
....
tmpdir = /var/lib/mysql/tmp
innodb_tmpdir = /var/lib/mysql/tmp
....
tmp_table_size = 512M
....
max_heap_table_size = 512M
....
innodb_buffer_pool_size = 2G # (default: 128MB; optimal: 60% RAM)
innodb_log_file_size = 512M # (default: 5MB)
innodb_log_buffer_size = 256M # (default: 8MB)
....
innodb_flush_log_at_trx_commit = 2
....
innodb_file_format = barracuda
innodb_large_prefix = 1
innodb_file_per_table = 1
....
[mysqld]
....
bind-address = 127.0.0.1
....
tmpdir = /var/lib/mysql/tmp
innodb_tmpdir = /var/lib/mysql/tmp
....
tmp_table_size = 512M
....
max_heap_table_size = 512M
....
innodb_buffer_pool_size = 2G # (default: 128MB; optimal: 60% RAM)
innodb_log_file_size = 512M # (default: 5MB)
innodb_log_buffer_size = 256M # (default: 8MB)
....
innodb_flush_log_at_trx_commit = 2
....
innodb_file_format = barracuda
innodb_large_prefix = 1
innodb_file_per_table = 1
....
Проверяем корректность синтаксиса конфигурационных файлов MySQL-сервера и перезапускаем таковой:
# mysqld --verbose --help 1>/dev/null
# /etc/init.d/mysql restart
# /etc/init.d/mysql restart
Заранее создадим БД для последующего применения её при настройке сервера "Zabbix":
# mysql
mysql> DROP DATABASE zabbix;
mysql> CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;
mysql> CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'strongPassword';
mysql> GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> QUIT;
mysql> DROP DATABASE zabbix;
mysql> CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;
mysql> CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'strongPassword';
mysql> GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> QUIT;
Оптимизация работы MySQL с дисковой подсистемой.
Для СУБД, активно создающей и уничтожающей файлы для временных таблиц, выгодно вынести (параметрами "tmpdir") эту работу в файловую систему, смонтированную в область памяти ОЗУ:
# vi /etc/fstab
....
# Tuning the location of MySQL temporary files
tmpfs /var/lib/mysql/tmp tmpfs rw,nosuid,nodev,size=2G,uid=mysql,gid=mysql,mode=0750 0 0
....
# Tuning the location of MySQL temporary files
tmpfs /var/lib/mysql/tmp tmpfs rw,nosuid,nodev,size=2G,uid=mysql,gid=mysql,mode=0750 0 0
....
# mount /var/lib/mysql/tmp
Я бы выделил под эту файловую систему до 25% от всей ОЗУ (она не заблокирует всё заявленное место, а будет выбирать блоки памяти по мере появления необходимости).
Инсталляция и настройка интерпретатора PHP.
Устанавливаем интерпретатор PHP и необходимые для работы "Zabbix" модули расширения:
# apt-get install php7.2-fpm php7.2-cgi php7.2-cli php7.2-opcache php7.2-bcmath php7.2-gd php7.2-ldap php7.2-mbstring php7.2-mysql php7.2-xml
Предварительно создадим или обновим параметры прав доступа директории хранения файлов web-сессий - в дальнейшем мы слегка это оптимизируем:
# mkdir -p /var/lib/php/sessions
# chmod go-r /var/lib/php/sessions
# chmod +t /var/lib/php/sessions
# chmod go-r /var/lib/php/sessions
# chmod +t /var/lib/php/sessions
Рассматривать здесь полную настройку PHP-интерпретатора не вижу смысла и обращу внимание лишь на особенности, необходимые для работы "Zabbix":
# vi /etc/php/7.2/fpm/php.ini
....
date.timezone = Asia/Novosibirsk
....
cgi.fix_pathinfo = 0
session.auto_start = 0
mbstring.func_overload = 0
....
date.timezone = Asia/Novosibirsk
....
cgi.fix_pathinfo = 0
session.auto_start = 0
mbstring.func_overload = 0
....
Обязательно проверяем корректность конфигурации, простейшим тестированием:
# php -e -c /etc/php/7.2/fpm/php.ini -r 'echo "OK\n";';
Опишем выделенный для "Zabbix" FPM-пул, для чистоты схемы и достижения лучшей производительности:
# vi /etc/php/7.2/fpm/pool.d/zabbix.conf
; Блок описания отдельного инстанса PHP-FPM
[zabbix]
; Unix user/group of processes
user = www-data
group = www-data
; The address on which to accept FastCGI requests
; Явно переключаемся на работу через локальный файловый "сокет", снижая задержки при вызовах
; (открытие файла всегда быстрее сетевой операции)
; listen = 127.0.0.1:9000
listen = /var/run/php/zabbix-php-fpm.sock
; Set permissions for Unix socket
listen.owner = www-data
listen.group = www-data
listen.mode = 0600
; Режим запуска инстанса
pm = dynamic
; Количество процессов, запускаемых при старте PHP-FPM
pm.start_servers = 20
; Максимальное количество процессов, которые могут быть запущены для обработки запросов
pm.max_children = 512
; Параметры количества запущенных неактивных процессов (находящихся в ожидании запросов)
pm.min_spare_servers = 5
pm.max_spare_servers = 20
; Количество запросов, после которого процесс будет перезапущен (для компенсации "утечек памяти" в скриптах)
pm.max_requests = 4096
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/sessions/
php_value[max_execution_time] = 300
php_value[memory_limit] = 128M
php_value[post_max_size] = 16M
php_value[upload_max_filesize] = 2M
php_value[max_input_time] = 300
php_value[max_input_vars] = 10000
[zabbix]
; Unix user/group of processes
user = www-data
group = www-data
; The address on which to accept FastCGI requests
; Явно переключаемся на работу через локальный файловый "сокет", снижая задержки при вызовах
; (открытие файла всегда быстрее сетевой операции)
; listen = 127.0.0.1:9000
listen = /var/run/php/zabbix-php-fpm.sock
; Set permissions for Unix socket
listen.owner = www-data
listen.group = www-data
listen.mode = 0600
; Режим запуска инстанса
pm = dynamic
; Количество процессов, запускаемых при старте PHP-FPM
pm.start_servers = 20
; Максимальное количество процессов, которые могут быть запущены для обработки запросов
pm.max_children = 512
; Параметры количества запущенных неактивных процессов (находящихся в ожидании запросов)
pm.min_spare_servers = 5
pm.max_spare_servers = 20
; Количество запросов, после которого процесс будет перезапущен (для компенсации "утечек памяти" в скриптах)
pm.max_requests = 4096
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/sessions/
php_value[max_execution_time] = 300
php_value[memory_limit] = 128M
php_value[post_max_size] = 16M
php_value[upload_max_filesize] = 2M
php_value[max_input_time] = 300
php_value[max_input_vars] = 10000
Удаляем ненужный файл конфигурации "по умолчанию", проверяем корректность новой и перезапускаем FPM-сервис:
# rm /etc/php/7.2/fpm/pool.d/www.conf
# /etc/init.d/php7.2-fpm restart
# /etc/init.d/php7.2-fpm restart
Оптимизация работы PHP с дисковой подсистемой.
Для ускорения операций создания и поддерживания PHP-интерпретатором web-сессий удобно вынести директорию файлов хранения таковых в специально созданную директорию, смонтированную в область ОЗУ.
Место сохранения сессий в PHP определяется параметром "session.save_path" и по умолчанию оно располагается в директории "/var/lib/php/sessions". Точнее всего это выявляется через вывод функции "php_info()". Мне представляется самым простым смонтировать поверх этой директории кусочек "tmpfs":
# vi /etc/fstab
....
# Tuning PHP-sessions`s place
tmpfs /var/lib/php/sessions tmpfs rw,nosuid,nodev,size=1024M,uid=www-data,gid=www-data,mode=0750 0 0
....
# Tuning PHP-sessions`s place
tmpfs /var/lib/php/sessions tmpfs rw,nosuid,nodev,size=1024M,uid=www-data,gid=www-data,mode=0750 0 0
....
# mount /var/lib/php/sessions
Сразу настраиваем простейший "сборщик мусора", удаляющий устаревшие файлы сессий:
# vi /etc/crontab
....
# Garbage collection for old files sessions of PHP (lifetime 31 days; in minutes)
03 */3 * * * root [ -d /var/lib/php/sessions ] && nice find /var/lib/php/sessions -type f -cmin +44640 -exec rm -f {} \; 1>/dev/null &
....
# Garbage collection for old files sessions of PHP (lifetime 31 days; in minutes)
03 */3 * * * root [ -d /var/lib/php/sessions ] && nice find /var/lib/php/sessions -type f -cmin +44640 -exec rm -f {} \; 1>/dev/null &
....
Установка и настройка фронтального web-сервера "Nginx".
Разработчики "Zabbix" рекомендуют к применению web-сервер "Apache2", но мы воспользуемся существенно более легковесным "Nginx" - это работает:
# apt-get install nginx-light
Для последующего включения в "Nginx" современного SSL/TLS и HTTPv2 генерируем DH-файл:
# mkdir -p /etc/ssl/nginx && chown -R root:root /etc/ssl/nginx
# openssl dhparam -out /etc/ssl/nginx/dhparam.2048.pem 2048
# openssl dhparam -out /etc/ssl/nginx/dhparam.2048.pem 2048
Слегка корректируем глобальную конфигурацию web-сервиса:
# vi /etc/nginx/nginx.conf
user www-data www-data;
....
worker_processes 8;
....
events {
worker_connections 1024;
....
}
http {
....
tcp_nodelay on;
tcp_nopush on;
# Запрещаем web-серверу сообщать о себе подробные данные
server_tokens off;
# Запрещаем просмотр содержимого директории, если не указан целевой файл
autoindex off;
# Отключаем проверку размера тела передаваемого PHP-FPM запроса
client_max_body_size 0;
client_body_buffer_size 4M;
....
....
worker_processes 8;
....
events {
worker_connections 1024;
....
}
http {
....
tcp_nodelay on;
tcp_nopush on;
# Запрещаем web-серверу сообщать о себе подробные данные
server_tokens off;
# Запрещаем просмотр содержимого директории, если не указан целевой файл
autoindex off;
# Отключаем проверку размера тела передаваемого PHP-FPM запроса
client_max_body_size 0;
client_body_buffer_size 4M;
....
Описываем типовую конфигурацию для web-сайта "Zabbix":
# vi /etc/nginx/sites-available/zabbix.example.net.conf
server {
listen 80;
server_name zabbix.example.net;
location / { rewrite ^(.+)$ https://$host$1 permanent; }
#include /etc/nginx/snippets/letsencrypt.conf;
}
server {
listen 443 ssl http2;
server_name zabbix.example.net;
access_log /var/log/nginx/zabbix.example.net_access.log;
error_log /var/log/nginx/zabbix.example.net_error.log;
ssl_dhparam /etc/ssl/nginx/dhparam.2048.pem;
ssl_certificate /etc/ssl/nginx/wildcard.example.net.crt;
ssl_certificate_key /etc/ssl/nginx/wildcard.example.net.key.decrypt;
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Выключаем невостребованную обычно перекодировку контента
charset off;
# Явно указываем корень файловой структуры сайта, выше которой web-сервер не должен выходить
root /var/www/zabbix.example.net/www;
index index.php;
# Глобальный обработчик событий отсутствия запрашиваемого файла
location / {
try_files $uri $uri/ =404;
}
# Блокируем доступ к типовым "закрытым" ресурсам
location ~* (/\.ht|/\.hg|/\.config) {
deny all;
log_not_found off;
access_log off;
}
# Блокируем доступ извне к внутренностям "Zabbix"
location ~ /(api\/|conf[^\.]|include|locate) {
deny all;
log_not_found off;
access_log off;
return 404;
}
# Обработчик прямых обращений к PHP-скриптам
location ~* \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php/zabbix-php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
# Напрямую отдаём "статические" данные
location /assets {
expires 10d;
access_log off;
}
}
listen 80;
server_name zabbix.example.net;
location / { rewrite ^(.+)$ https://$host$1 permanent; }
#include /etc/nginx/snippets/letsencrypt.conf;
}
server {
listen 443 ssl http2;
server_name zabbix.example.net;
access_log /var/log/nginx/zabbix.example.net_access.log;
error_log /var/log/nginx/zabbix.example.net_error.log;
ssl_dhparam /etc/ssl/nginx/dhparam.2048.pem;
ssl_certificate /etc/ssl/nginx/wildcard.example.net.crt;
ssl_certificate_key /etc/ssl/nginx/wildcard.example.net.key.decrypt;
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Выключаем невостребованную обычно перекодировку контента
charset off;
# Явно указываем корень файловой структуры сайта, выше которой web-сервер не должен выходить
root /var/www/zabbix.example.net/www;
index index.php;
# Глобальный обработчик событий отсутствия запрашиваемого файла
location / {
try_files $uri $uri/ =404;
}
# Блокируем доступ к типовым "закрытым" ресурсам
location ~* (/\.ht|/\.hg|/\.config) {
deny all;
log_not_found off;
access_log off;
}
# Блокируем доступ извне к внутренностям "Zabbix"
location ~ /(api\/|conf[^\.]|include|locate) {
deny all;
log_not_found off;
access_log off;
return 404;
}
# Обработчик прямых обращений к PHP-скриптам
location ~* \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php/zabbix-php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
# Напрямую отдаём "статические" данные
location /assets {
expires 10d;
access_log off;
}
}
Удаляем файл конфигурации "по умолчанию", подключаем новую, проверяем синтаксическую корректность и применяем:
# rm /etc/nginx/sites-enabled/default
# ln -s /etc/nginx/sites-available/zabbix.example.net.conf /etc/nginx/sites-enabled/zabbix.example.net.conf
# nginx -t && nginx -s reload
# ln -s /etc/nginx/sites-available/zabbix.example.net.conf /etc/nginx/sites-enabled/zabbix.example.net.conf
# nginx -t && nginx -s reload
Развёртывание и преднастройка "Zabbix Server".
Интерфейс только что вышедшего "Zabbix 5.0 LTS" сыроват и мне лично очень неудобны нововведения вроде безальтернативного навязывания бокового меню, замены шаблонов параметров мониторинга и вообще откровенная нелепость попытки обвязать широкопанельный формат отображения "фенечками", свойственными лишь мелким экранам мобильных телефонов. Останусь пока с "Zabbix 4.0 LTS", официально поддерживаемом до 31 Октября 2023.
Наконец-то "Zabbix" как продукт созрел до того, что его можно инсталлировать как DEB/RPM-пакет, без сборки из исходных кодов, как это было ранее. Из официальной документации узнаём, что по состоянию на 2020-й года разработчики поддерживают пакеты для "Linux Debian 8/9" и "Linux Ubuntu 16/18 LTS", загрузить которые можно с подключаемых репозиториев.
Установим утилиты, необходимые для ручного подключения дополнительных APT-репозиториев:
# apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
Перед подключением нового APT-репозитория скачаем и применим PGP-ключ, которым подписано содержимое репозитория:
# curl -fsSL https://repo.zabbix.com/zabbix-official-repo.key | sudo apt-key add -
Создаём выделенный конфигурационный файл с описанием подключаемого APT-репозитория:
# echo -e "# Official APT-repository Zabbix\ndeb [arch=amd64] http://repo.zabbix.com/zabbix/4.0/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) main\ndeb-src [arch=amd64] http://repo.zabbix.com/zabbix/4.0/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) main" > /etc/apt/sources.list.d/zabbix.list
Обновляем сведения о доступном программном обеспечении и устанавливаем "Zabbix Server" с дополнительными утилитами, нужными для мониторинга:
# apt-get update
# apt-get install zabbix-server-mysql fping traceroute nmap
# apt-get install zabbix-server-mysql fping traceroute nmap
Подготовим более удобное месторасположение для PHP-кода сайта "Zabbix":
# mkdir -p /var/www/zabbix.example.net/www
# setfacl --no-mask --set default:user::rwX,default:group::rwX,default:other:--X /var/www/zabbix.example.net/www
# setfacl --no-mask --set default:user::rwX,default:group::rwX,default:other:--X /var/www/zabbix.example.net/www
Разместим PHP-код "Zabbix" в выделенном для этого месте:
# cp -a /usr/share/zabbix/* /var/www/zabbix.example.net/www/
Ограничим несанкционированный доступ к PHP-коду:
# chown -R www-data:www-data /var/www/zabbix.example.net/www
# chmod -R ug+rw /var/www/zabbix.example.net/www
# chmod -R o-rw /var/www/zabbix.example.net/www
# chmod -R ug+rw /var/www/zabbix.example.net/www
# chmod -R o-rw /var/www/zabbix.example.net/www
Введём пользователя, в контексте которого по умолчанию (пользователь "zabbix" автоматически создаётся при инсталляции "Zabbix Server" из DEB-пакета) работает сервер мониторинга, в группу web-сервера, чтобы zabbix-сервер мог воздействовать на файлы конфигурации сайта:
# usermod --append --groups www-data zabbix
Разрешаем пользователю, в контексте которого работает "Zabbix Server", запускать утилиту сканирования сети с правами суперпользователя (в противном случае часть функций "nmap" будет урезана):
# echo "zabbix ALL=(ALL) NOPASSWD: /usr/bin/nmap -O *" > /etc/sudoers.d/zabbix
# visudo -cf /etc/sudoers.d/zabbix
# visudo -cf /etc/sudoers.d/zabbix
Передадим в СУБД "MySQL" заготовленную разработчиками серию команд, создающую необходимые таблицы:
# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -u zabbix -p zabbix
Остаётся лишь задать пароль к БД в конфигурации "Zabbix Server":
# vi /etc/zabbix/zabbix_server.conf
....
DBPassword=striongPassword
....
DBPassword=striongPassword
....
Перезапускаем сервис системы мониторинга и включаем его автозапуск:
# systemctl start zabbix-server && systemctl enable zabbix-server
Настройка аутентификации через внешний сервис LDAP/AD.
Практически наверняка корпоративный LDAP/AD работает с "самоподписанным" или сложно проверяемым SSL-сертификатом. Сервисам, пользующимся таким LDAP/AD, нужно явно разрешить допускать работу с любым SSL-сертификатом:
# vi /etc/environment
....
LDAPTLS_REQCERT="allow"
LDAPTLS_REQCERT="allow"
Внутрь PHP-FPM "пула" системные переменные окружения не передаются без явного на то указания:
# vi /etc/php/7.2/fpm/pool.d/zabbix.conf
[zabbix]
....
clear_env = No
env[LDAPTLS_REQCERT] = "allow"
....
....
clear_env = No
env[LDAPTLS_REQCERT] = "allow"
....
Укажем PHP-FPM принять обновлённую конфигурацию:
# /etc/init.d/php7.2-fpm reload
В web-интерфейсе "Zabbix" настройки подключения к LDAP-сервису достаточно просты и очевидны, чтобы не требовалось их комментировать:
Administration -> Authentication -> LDAP settings:
Enable: on
LDAP host: ldaps://ldap0.example.net
Port: 636
Base DN: ou=People,dc=example,dc=net
Search attribute: uid
Bind DN: uid=zabbix,ou=Accounts,ou=Services,dc=example,dc=net
Case sensitive login: off
Bind password: ***
Enable: on
LDAP host: ldaps://ldap0.example.net
Port: 636
Base DN: ou=People,dc=example,dc=net
Search attribute: uid
Bind DN: uid=zabbix,ou=Accounts,ou=Services,dc=example,dc=net
Case sensitive login: off
Bind password: ***
При этом есть нюанс - в web-интерфейсе отсутствует возможность указания крайне важного параметра фильтра пользователей, которым разрешена аутентификация. Пока эта функциональность не добавлена в web-интерфейс, на сайте разработчиков рекомендуют задать фильтр прямо в PHP-коде сайта:
# vi ./include/classes/ldap/CLdap.php
class CLdap {
....
public function __construct($arg = []) {
....
$this->cnf = [
....
// 'userfilter' => '(%{attr}=%{user})',
'userfilter' => '(&(%{attr}=%{user})(objectclass=person)(memberOf=cn=zabbixusers,ou=groups,dc=example,dc=net))',
....
];
....
}
....
}
....
public function __construct($arg = []) {
....
$this->cnf = [
....
// 'userfilter' => '(%{attr}=%{user})',
'userfilter' => '(&(%{attr}=%{user})(objectclass=person)(memberOf=cn=zabbixusers,ou=groups,dc=example,dc=net))',
....
];
....
}
....
}
С последующим использованием LDAP-аутентификации в "Zabbix" тоже пока не всё гладко, хотя вполне работоспособно. Прежде всего указать тип аутентификации для произвольного пользователя нельзя - это делается только для группы таковых. То есть, вначале надо создать выделенную группу (группы, на практике) пользователей, в параметрах которой указать, что аутентификация её членов должна производиться через LDAP:
Administration -> User groups -> Create user group:
Group name: Example users (LDAP)
Frontend access: LDAP
....
Group name: Example users (LDAP)
Frontend access: LDAP
....
Пользователя, который должен аутентифицироваться через LDAP, нужно предварительно создать в web-интерфейсе "Zabbix", после чего ввести в заготовленную ранее группу, членам которой предписано аутентифицироваться только через LDAP:
Administration -> Users -> Create user:
Alias: user
Groups: Example users (LDAP)
Password: (not mandatory for non internal authentication type)
Media:
Type: Email
Send to: user@example.net
Permissions:
User type: Zabbix Admin
Permissions: All groups Read-write
Alias: user
Groups: Example users (LDAP)
Password: (not mandatory for non internal authentication type)
Media:
Type: Email
Send to: user@example.net
Permissions:
User type: Zabbix Admin
Permissions: All groups Read-write
Настройка почтовых оповещений в "Zabbix".
Прежде всего нужно обеспечить отправку почтовых сообщений через какой-то сервер:
Administration -> Media types -> Email:
Type: Email
SMTP server: mail.example.net
SMTP server port: 25
....
Enabled: on
Type: Email
SMTP server: mail.example.net
SMTP server port: 25
....
Enabled: on
Отключаем неиспользуемые типы информирования:
Administration -> Media types -> Jabber, SMS:
Disable.
Disable.
По умолчанию оповещения через почту или другие сервисы в "Zabbix" отключены. Чтобы рассылка уведомлений работала в соответствии со спецификой объектов мониторинга, желательно завести разные группы таковых и связать группы объектов мониторинга с группами пользователей или конкретными пользователями, которым будут высылаться уведомления.
Создаём несколько групп пользователей, с говорящими о назначении названиями:
Configuration -> Host groups -> Create host group:
Development services
Hypervisors
Infrastructure objects
Linux servers
Network access
Power devices
Public services
Windows servers
Development services
Hypervisors
Infrastructure objects
Linux servers
Network access
Power devices
Public services
Windows servers
Описываем логику рассылки уведомлений в зависимости от групп пользователей:
Configuration -> Actions -> Create action:
Action:
Name: Report problems to infrastructure administrators
Conditions:
Host group equals Development services
....
Host group equals Windows servers
Operations:
....
Operations:
Send message to user groups: Example infrastructure administrators via all media
Action:
Name: Report problems to infrastructure administrators
Conditions:
Host group equals Development services
....
Host group equals Windows servers
Operations:
....
Operations:
Send message to user groups: Example infrastructure administrators via all media