avatar Debian ZTC набор дополнительных скриптов для Zabbix

Всем доброго времени суток, в данной статье я расскажу как расширить функционал систем мониторинга Zabbix. Мануалов в интернете довольно таки много и на официальном сайте хорошая документация. Zabbix, хорошая система мониторинга, но стандартные шаблоны скудны. В интернете наткнулся на набор скриптов ZTC, и при установке столкнулся с рядом сложностей и тонкостей, для решения который пришлось изучать логи. Что бы облегчить Вам жизнь, да и самому не забыть как я это делал, пишу эту статью. У меня веб сервер на Debian 6, Apache, Nginx, MySQL. Статей по настройке всего этого софта в паутине не счесть. На тестовом сервере я использовал эту статью. Сразу скажу, что все кроме Nginx устанавливал из репозиториев. Nginx собирал из исходников, как это делается можно посмотреть тут. Первая проблема, с которой я столкнулся это отсутствие модуля статуса, поэтому при конфигурировании по этой статье Nginx нужно включить этот модуль сразу. Делается это с помощью следующего параметра --with-http_stub_status_module. В итоге, команда на сборку, будет выглядеть так:
./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. Я буду диск полностью мониторить. Чтобы скопировать, заходим в элементы данных. Теперь нужно войти в каждый элемент нажать кнопку клонировать. Затем изменить параметр ключа, на нужный нам диск и сохранить, название измениться автоматически. К сожалению это нужно будет сделать для каждого раздела и не только элементы данных, но и графики. Графики тоже придется изменить на новые элементы данных.

Ну и собственно слайды:
Zabbix+ZTC

zabbix+ztc

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

1 комментарий

avatar
Классная идея, честно говоря я о данном функционале и не знал, а пользовался стандартными наборами шаблонов. Спасибо за идею, подумаю теперь в своем хозяйстве расширить функционал…
Есть что добавить? Регистрируйся и оставляй комментарии!