Zabbix
Zabbix scripts & templates for Apache, Asterisk, Elasticsearch, Disk IO, MongoDB, MySQL, Nginx, Oracle, Php-fpm, Postfix, RabbitMQ, Redis, Sphinx, PostgreSQL
Install / Use
/learn @RuslanMahotkin/ZabbixREADME
zabbix
Набор сценариев и шаблонов для мониторинга различных сервисов.
Основные принципы написания сценариев:
- простота: небольшой объем кода;
- единообразие: одинаковые подходы к получению. обработке и отправке на сервер статистики;
- штатные средства: использование идущих в дистрибутиве и устанавливаемых по умолчанию утилит(в основном);
- данные типа траппер;
- данные получаются одним запросом к сервису;
- данные отправляются на сервер одним пакетом;
- сбор/отправка всех данных и обнаружение в одном сценарии.
Сценарии собирают не все доступные данные - фильтрация осуществляется или в самом сценарии, или из-за отсутствия их описания в шаблоне сервером Zabbix.
Версии сервисов:
- Apache 2.2.15;
- Asterisk 16.3;
- Elasticsearch 1.7.1;
- Mongodb 4.0.9;
- MySQL 8.0.15;
- Nginx 1.16.0;
- Oracle 10g;
- PHP-FPM 7.3.4;
- RabbitMQ 3.6.6(erlang 19.2);
- Redis 5.0.4;
- Sphinx 2.2.11.
Общее описание работы сценария:
- Сценарий вызывается Zabbix-сервером для получения значения описанной в шаблоне переменной типа zabbix-агент Status.
- Сценарий получает, фильтрует, обрабатывает и отправляет на сервер zabbix_sender-ом все данные за один раз.
Linux (CentOS 6.X)
Сценарии:
- написаны на bash;
- получают данные curl-ом или штатным клиентом сервиса;
- фильтруют/обрабатывают данные с помощью awk;
- отправляют данные zabbix_sender-ом;
- размещаются в каталоге /etc/zabbix.
Порядок установки:
-
Установка пакетов агента и утилиты отправки данных: zabbix, zabbix-agent, zabbix-sender.
-
Запуск агента при старте системы и права на каталог/файл конфигурации:
chmod 700 /etc/rc.d/init.d/zabbix-agent; chkconfig zabbix-agent on
chmod 2750 /etc/zabbix; chgrp -R zabbix /etc/zabbix
chmod 640 /etc/zabbix/zabbix_agentd.conf
- Разрешение портов в файерволе:
# IP адрес сервера Zabbix
$ZabbServIP='X.X.X.X'
# Агент
/sbin/iptables -A INPUT -p tcp --dport 10050 -s $ZabbServIP -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 10050 -d $ZabbServIP -j ACCEPT
# Сервер
/sbin/iptables -A OUTPUT -p tcp --dport 10051 -d $ZabbServIP -j ACCEPT
/sbin/iptables -A INPUT -p tcp --sport 10051 -s $ZabbServIP -j ACCEPT
- Настройка агента в файле /etc/zabbix/zabbix_agentd.conf:
SourceIP = IP.адрес.zabbix.агента
Server = IP.адрес.zabbix.сервера
ListenIP = IP.адрес.zabbix.агента
ServerActive = IP.адрес.zabbix.сервера
Timeout = >5
- Установка требуемых сценариев.
Для обработки JSON данных в мониторинге Elasticsearch, MongoDB и RabbitMQ используется исправленный JSON.sh (http://github.com/dominictarr/JSON.sh).
Apache, шаблон mytemplate-apache-trap.xml
Предполагается, что Apache работает за nginx-ом.
Сценарий отправки статистики сервера Apache на сервер Zabbix
chmod 750 /etc/zabbix/apache_stat.sh
chgrp zabbix /etc/zabbix/apache_stat.sh
/etc/nginx/nginx.conf - добавить в сервер мониторинга (описан в разделе nginx)
# Статистика apache
location = /as {
# Адрес проксируемоего сервера
proxy_pass http://127.0.0.1;
}
В httpd.conf установить параметры:
ServerName- возвращаемое hostname имя хоста;Allow from- IP адрес сервера.
/etc/https/conf/httpd.conf - создание сервера мониторинга
# Модуль статуса
LoadModule status_module modules/mod_status.so
...
# Сохранение расширенной информации о каждом запросе
ExtendedStatus On
...
# Мониторинг ----------------------------------------------
<VirtualHost 127.0.0.1:80>
# Имя сервера
ServerName DNS.имя.сервера.
# Отключение журнализации
CustomLog /dev/null combined
<Location /as>
SetHandler server-status
Order allow,deny
Allow from IP.адрес.сер.вера
</Location>
</VirtualHost>
/etc/zabbix/zabbix_agentd.conf - подключение сценария к zabbix-агенту
UserParameter = apache_status,/etc/zabbix/apache_stat.sh
Перезапуск сервисов
service nginx reload; service httpd restart; service zabbix-agent restart
Asterisk, шаблон mytemplate-asterisk-trap.xml
Установить утилиту Netcat - пакет nc(в CentOS 7 - nmap-ncat).
В файле настройки модуля AMI и сценарии в подстроке
... Username: Пользователь_мониторинга\r\nSecret: Пароль_мониторинга\r\n ...
установить свои значения 'Пользователь_мониторинга' и 'Пароль_мониторинга'.
/etc/asterisk/manager.conf - настроить модуль AMI и задать пользователя
[general]
enabled = yes
bindaddr = 127.0.0.1
allowmultiplelogin = no
displayconnects = no
authtimeout = 5
authlimit = 3
[Пользователь_мониторинга]
secret = Пароль_мониторинга
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.255
write = command,reporting
Перезапустить модуль AMI
asterisk -rx 'manager reload'
Сценарий отправки статистики сервера Asterisk на сервер Zabbix
chmod 750 /etc/zabbix/asterisk_stat.sh
chgrp zabbix /etc/zabbix/asterisk_stat.sh
/etc/zabbix/zabbix_agentd.conf - подключение сценария к zabbix-агенту
UserParameter = asterisk_status,/etc/zabbix/asterisk_stat.sh
Перезапуск агента
service zabbix-agent restart
Elasticsearch, шаблон mytemplate-elasticsearch-trap.xml
Сценарий отправки статистики сервера Elasticsearch на сервер Zabbix
chmod 750 /etc/zabbix/{elasticsearch_stat.sh,JSON.sh}
chgrp zabbix /etc/zabbix/{elasticsearch_stat.sh,JSON.sh}
/etc/zabbix/zabbix_agentd.conf - подключение сценария к zabbix-агенту
UserParameter = elasticsearch_status,/etc/zabbix/elasticsearch_stat.sh
Перезапуск агента
service zabbix-agent restart
IO - дисковый ввод/вывод, шаблон mytemplate-io-trap.xml
Так как сценарий выполняет вызов iostat с 5 секундным замером, то параметр
Timeout в zabbix_agentd.conf должен быть больше 5.
Установить пакет sysstat (версии не ниже 9.0.4-27). Удалить сбор статистики по cron
rm -f /etc/cron.d/sysstat
Сценарий отправки статистики дискового ввода-вывода на сервер Zabbix
chmod 750 /etc/zabbix/io_stat.sh
chgrp zabbix /etc/zabbix/io_stat.sh
/etc/zabbix/zabbix_agentd.conf - подключение сценария к zabbix-агенту
UserParameter = iostat_status,/etc/zabbix/io_stat.sh
UserParameter = iostat.discovery_disks,/etc/zabbix/io_stat.sh disks
Перезапуск агента
service zabbix-agent restart
MongoDB, шаблон mytemplate-mongodb-trap.xml
Сценарий отправки статистики сервера MongoDB на сервер Zabbix
chmod 750 /etc/zabbix/{JSON.sh,mongodb_stat.sh}
chgrp zabbix /etc/zabbix/{JSON.sh,mongodb_stat.sh}
/etc/zabbix/zabbix_agentd.conf - подключение сценария к zabbix-агенту
UserParameter = mongodb_status,/etc/zabbix/mongodb_stat.sh
UserParameter = mongodb.discovery_db,/etc/zabbix/mongodb_stat.sh db
Перезапуск агента
service zabbix-agent restart
MySQL, шаблон mytemplate-mysql-trap.xml
В сценарии в подстроке
... --user=Пользователь_мониторинга --password=Пароль_мониторинга ...
установить свои значения 'Пользователь_мониторинга' и 'Пароль_мониторинга'.
Сценарий отправки статистики сервера MySQL на сервер Zabbix
chmod 750 /etc/zabbix/mysql_stat.sh
chgrp zabbix /etc/zabbix/mysql_stat.sh
Mysql-пользователь мониторинга
mysql -p
mysql> GRANT USAGE ON *.* TO 'Пользователь_мониторинга'@'localhost' IDENTIFIED BY 'Пароль_мониторинга';
mysql> FLUSH PRIVILEGES;
mysql> \q
/etc/zabbix/zabbix_agentd.conf - подключение сценария к zabbix-агенту
UserParameter = mysql_status,/etc/zabbix/mysql_stat.sh
Перезапуск агента
service zabbix-agent restart
MySQL репликация, шаблон mytemplate-mysql-slave-trap.xml
Сценарий отправки статистики репликации сервера MySQL на сервер Zabbix
chmod 750 /etc/zabbix/mysql_slave_stat.sh
chgrp zabbix /etc/zabbix/mysql_slave_stat.sh
Привилегия клиента репликации Mysql-пользователю мониторинга
mysql -p
mysql> GRANT REPLICATION CLIENT ON *.* TO 'Пользователь_мониторинга'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> \q
/etc/zabbix/zabbix_agentd.conf - подключение сценария к zabbix-агенту
UserParameter = mysql_slave_status,/etc/zabbix/mysql_slave_stat.sh
Перезапуск агента
service zabbix-agent restart
Nginx, шаблон mytemplate-nginx-trap.xml
Сценарий отправки статистики сервера Nginx на сервер Zabbix
chmod 750 /etc/zabbix/nginx_stat.sh
chgrp zabbix /etc/zabbix/nginx_stat.sh
В httpd.conf установить параметры:
server_name- возвращаемое hostname имя хоста;listenиallow- IP адрес сервера.
/etc/nginx/nginx.conf - создание сервера мониторинга
# Сервер мониторинга -------------------------------------
server {
# Прослушиваемые адрес:порт(*:80|*:8000)
listen ip.адрес.сер.вера:80;
# Имя и псевдонимы виртуального сервера(_)
server_name DNS.имя.сервера;
# Отключение журнализации
access_log off;
# Таймаут закрытия keep-alive соединения со стороны сервера в секундах(75)
keepalive_timeout 0;
### Доступ к серверу
# Локальный
allow ip.адрес.сер.вера;
# Запрет доступа остальным
deny all;
# Статистика nginx
location = /ns {
# Включение обработчика статуса
stub_status on;
}
}
/etc/zabbix/zabbix_agentd.conf - подключение сценария к zabbix-агенту
UserParameter = nginx_status,/etc/zabbix/nginx_stat.sh
Перезапуск сервисов
service nginx reload; service zabbix-agent restart
Oracle, шаблон mytemplate-oracle-trap.xml
Сценарий отправки статистики сервера Oracle на сервер Zabbix
chmod 750 /etc/zabbix/{oracle_stat.sh,oraenv}
chgrp zabbix /etc/zabbix/{oracle_stat.sh,oraenv}
Добавление пользователя, под которым запущен агент zabbix, в группу для доступа к SQL Plus
usermod --append --groups oinstall zabbix
/etc/zabbix/oraenv - задать переменные окружения Oracle
export ORACLE_HOME=
export PATH=$PATH:$ORACLE_HOME/bin
export NLS_LANG=
export TZ=
В сценарии в строке
conn Пользователь_мониторинга/Пароль_мониторинга
установить свои значения 'Пользователь_мониторинга' и 'Пароль_мониторинга'.
Создание Oracle-пользователя и присвоение ему прав для всех БД. БД задается установкой переменной ORACLE_SID в ее SID перед запуском sqlplus
su - oracle
