Debian → ZTC набор дополнительных скриптов для Zabbix
Всем доброго времени суток, в данной статье я расскажу как расширить функционал систем мониторинга Zabbix. Мануалов в интернете довольно таки много и на официальном сайте хорошая документация. Zabbix, хорошая система мониторинга, но стандартные шаблоны скудны. В интернете наткнулся на набор скриптов ZTC, и при установке столкнулся с рядом сложностей и тонкостей, для решения который пришлось изучать логи. Что бы облегчить Вам жизнь, да и самому не забыть как я это делал, пишу эту статью. У меня веб сервер на Debian 6, Apache, Nginx, MySQL. Статей по настройке всего этого софта в паутине не счесть. На тестовом сервере я использовал эту статью. Сразу скажу, что все кроме Nginx устанавливал из репозиториев. Nginx собирал из исходников, как это делается можно посмотреть тут. Первая проблема, с которой я столкнулся это отсутствие модуля статуса, поэтому при конфигурировании по этой статье Nginx нужно включить этот модуль сразу. Делается это с помощью следующего параметра --with-http_stub_status_module. В итоге, команда на сборку, будет выглядеть так:
Будем считать, что сервер установлен и подключен к системе мониторинга. Далее скачиваем ztc здесь. Я брал source версию. Скрипты написаны на Python, и для работы он нужен, поэтому устанавливаем:
Для установки ztc нужно распоковать архив:
Переходим директорию
далее выполняем конфигурирование Zabbix агента и ztc:
Теперь в конфигах ztc нужно указать наши настройки: порты, пользователи, пароли. Лучше всего создавать отдельных пользователей для мониторинга. Конфиги лежат в /etc/ztc. Начнем с апача.
Чтобы timelog заработал, его нужно прописать в конфигурацию апача:
ищем где у нас прописаны форматы логов LogFormat и дописываем в конце
Теперь в конфиги всех сайтов, которые мы хотим опрашивать на время отклика дописываем
у меня это example.org
Добавляем в /etc/sudoers строчку:
перезапускаем апач:
Теперь скачаем нужный нам шаблон, лежат они здесь. Их здесь много, но нас сейчас интересуют Template_app_Apache2.xml, Template_app_MySQL.xml, Template_app_nginx.xml, Template_Linux_disk_sda.xml. Скачиваем их и импортируем в Zabbix. Идем Настройка>Шаблоны и жмем кнопку Импорт, выбираем нужный шаблон, ставим все галочки и ОК. Думаю стоит сразу все из импортировать. Следующим шагом, будет добавление шаблона к узлу сети, соответственно Настройка>Узлы сети, выбираем наш сервер. Далее в разных версиях заббикса по разному, у меня 2.0.2 и нужно перейти на вкладку шаблоны, в версии 1.8 никуда переходить не нужно было, нажимаем добавить и выбираем наш Template_app_apache2.
Проверяем все ли данные удается получить, в случае проблем проверяем: входит ли пользователь zabbix в группу adm, есть ли права записи в директории /var/log/zabbix, /var/log/zabbix-agent. И проверяем права на чтение /var/log/apache2/time.log. После каждого изменения перезапускаем агент заббикса, и если элементы данных отключились, включаем их. Права на /var/log/apache2 должны быть root:adm
Теперь подключим Nginx.
так выглядит мой конфиг
Далее в /etc/nginx/nginx.conf в секции http добавляем строчку
По аналогии с апачем в конфиг каждого сайта, который собираемся опрашивать на время отклика, добавляем строчку
в /etc/sudoers добавляем строчку
Теперь нужно создать страничку выдачи статистики.
и вставляем содержимое
далее, добавляем ссылку на этот файл в директорию sites-enabled
перезапускаем nginx
В заббиксе добавляем шаблон к нашему узлу, так как выше мы их все уже импортировали. Наш шаблон Template_app_nginx
И наконец, Mysql. Для его работы устанавливаем
Прописываем настройки в /etc/ztc/mysql.conf. Заполняем параметры user,password,database,host. Пользователя лучше создать отдельного.
Добавляем шаблон Template_app_MySQL к узлу.
Остался последний шаблон, мониторинг диска. Здесь немного сложнее. Каждый сервер может иметь различные диски и по количеству и по названию, поэтому создать универсальный шаблон не получится. Имеет смысл скопировать все из шаблона в конкретный сервер и настроить под него. Мониторить можно как диски целиком, так и отдельные разделы. Вводим команду
Смотрим какие диски используются и что будем мониторить. К примеру, у меня корень это /dev/sda1. Добавляем шаблон Template_Linux_disk_sda. Я буду диск полностью мониторить. Чтобы скопировать, заходим в элементы данных. Теперь нужно войти в каждый элемент нажать кнопку клонировать. Затем изменить параметр ключа, на нужный нам диск и сохранить, название измениться автоматически. К сожалению это нужно будет сделать для каждого раздела и не только элементы данных, но и графики. Графики тоже придется изменить на новые элементы данных.
Ну и собственно слайды:


P.S. Если используется несколько серверов MySQL с репликацией, очень рекомендую настроить мониторинг очереди репликации, статей в интернете я видел много.
./configure --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid \
--user=www-data \
--group=www-data \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-mail \
--with-mail_ssl_module \
--with-http_stub_status_module
Будем считать, что сервер установлен и подключен к системе мониторинга. Далее скачиваем ztc здесь. Я брал source версию. Скрипты написаны на Python, и для работы он нужен, поэтому устанавливаем:
apt-get install python
. Для установки ztc нужно распоковать архив:
tar -zxvf ztc-12.01.1.tar.gz
Переходим директорию
cd ztc-12.01.1
для установки из под root выполняем:python setup.py install
далее выполняем конфигурирование Zabbix агента и ztc:
echo "Include=/etc/zabbix-agent.d/" >> /etc/zabbix/zabbix_agentd.conf
/etc/init.d/zabbix-agent restart
mkdir /var/log/zabbix
chmod 755 /var/log/zabbix
chown zabbix:zabbix /var/log/zabbix
Теперь в конфигах ztc нужно указать наши настройки: порты, пользователи, пароли. Лучше всего создавать отдельных пользователей для мониторинга. Конфиги лежат в /etc/ztc. Начнем с апача.
nano /etc/ztc/apache.conf
и вставляем примерно следующее
[main]
##
# Template_Linux_with_apache2 configuration file
proto=http
port=8080
host=localhost
resource=/server-status
logdir=/var/log/apache2/
timelog=time.log
# slowlog: requests wich took more then specified time (in microseconds)
# would be logger to slowlog_file
# 0 - disable this feature..
slowlog=5
slowlog_file=slow.log
Чтобы timelog заработал, его нужно прописать в конфигурацию апача:
nano /etc/apache2/apache2.conf
ищем где у нас прописаны форматы логов LogFormat и дописываем в конце
LogFormat "%D <whatever>" timelog
Теперь в конфиги всех сайтов, которые мы хотим опрашивать на время отклика дописываем
CustomLog /var/log/apache2/time.log timelog
у меня это example.org
nano /etc/apache2/sites-enabled/example.org
<VirtualHost *:8080>
DocumentRoot /home/example/www
ServerAdmin admin@example.org
ServerName example.org
ServerAlias www.example.org
ErrorLog /home/example/logs/apache_error.log
CustomLog /var/log/apache2/time.log timelog
<Directory />
#Order Deny,Allow
#Deny from all
Options -ExecCGI -Indexes -Includes +FollowSymLinks
AllowOverride All
<Limit GET POST>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
Добавляем в /etc/sudoers строчку:
zabbix ALL=(ALL) NOPASSWD: /opt/ztc/bin/apache_reqtime.py
перезапускаем апач:
/etc/init.d/apache2 restart
Теперь скачаем нужный нам шаблон, лежат они здесь. Их здесь много, но нас сейчас интересуют Template_app_Apache2.xml, Template_app_MySQL.xml, Template_app_nginx.xml, Template_Linux_disk_sda.xml. Скачиваем их и импортируем в Zabbix. Идем Настройка>Шаблоны и жмем кнопку Импорт, выбираем нужный шаблон, ставим все галочки и ОК. Думаю стоит сразу все из импортировать. Следующим шагом, будет добавление шаблона к узлу сети, соответственно Настройка>Узлы сети, выбираем наш сервер. Далее в разных версиях заббикса по разному, у меня 2.0.2 и нужно перейти на вкладку шаблоны, в версии 1.8 никуда переходить не нужно было, нажимаем добавить и выбираем наш Template_app_apache2.
Проверяем все ли данные удается получить, в случае проблем проверяем: входит ли пользователь zabbix в группу adm, есть ли права записи в директории /var/log/zabbix, /var/log/zabbix-agent. И проверяем права на чтение /var/log/apache2/time.log. После каждого изменения перезапускаем агент заббикса, и если элементы данных отключились, включаем их. Права на /var/log/apache2 должны быть root:adm
Теперь подключим Nginx.
nano /etc/ztc/nginx.conf
так выглядит мой конфиг
# Make sure that nginx compiled with status module
# and it is enabled on some localtion or vhost
# e.g.:
# server {
# listen localhost:8080;
# server_name nginx_status.localhost;
# location /server-status {
# <----> stub_status on;
#<-----> access_log off;
#<-----> allow 127.0.0.1;
#<-----> deny all;
#<-----> }
#}
proto=http
host=localhost
port=80
resource=/server-status
timelog=/var/log/nginx/time.log
statuslog=/var/log/nginx/status.log
Далее в /etc/nginx/nginx.conf в секции http добавляем строчку
log_format time_log '$upstream_response_time $request <anything you want>';
По аналогии с апачем в конфиг каждого сайта, который собираемся опрашивать на время отклика, добавляем строчку
access_log /var/log/nginx/time.log time_log;
в /etc/sudoers добавляем строчку
zabbix ALL=(ALL) NOPASSWD: /opt/ztc/bin/nginx_reqtime.py
Теперь нужно создать страничку выдачи статистики.
nano /etc/nginx/sites-available/status
и вставляем содержимое
server {
listen localhost:80;
server_name nginx_status.localhost;
location /server-status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
далее, добавляем ссылку на этот файл в директорию sites-enabled
ln -s /etc/nginx/sites-available/status /etc/nginx/sites-enabled
перезапускаем nginx
/etc/init.d/nginx restart
В заббиксе добавляем шаблон к нашему узлу, так как выше мы их все уже импортировали. Наш шаблон Template_app_nginx
И наконец, Mysql. Для его работы устанавливаем
apt-get install python-mysqldb
Прописываем настройки в /etc/ztc/mysql.conf. Заполняем параметры user,password,database,host. Пользователя лучше создать отдельного.
Добавляем шаблон Template_app_MySQL к узлу.
Остался последний шаблон, мониторинг диска. Здесь немного сложнее. Каждый сервер может иметь различные диски и по количеству и по названию, поэтому создать универсальный шаблон не получится. Имеет смысл скопировать все из шаблона в конкретный сервер и настроить под него. Мониторить можно как диски целиком, так и отдельные разделы. Вводим команду
mount
Смотрим какие диски используются и что будем мониторить. К примеру, у меня корень это /dev/sda1. Добавляем шаблон Template_Linux_disk_sda. Я буду диск полностью мониторить. Чтобы скопировать, заходим в элементы данных. Теперь нужно войти в каждый элемент нажать кнопку клонировать. Затем изменить параметр ключа, на нужный нам диск и сохранить, название измениться автоматически. К сожалению это нужно будет сделать для каждого раздела и не только элементы данных, но и графики. Графики тоже придется изменить на новые элементы данных.
Ну и собственно слайды:


P.S. Если используется несколько серверов MySQL с репликацией, очень рекомендую настроить мониторинг очереди репликации, статей в интернете я видел много.
1 комментарий