Мониторинг транков (trunk) в asterisk с помощью zabbix

Мне понадобился простой мониторинг состояния транков в asterisk. Иногда после проблем с интернетом на некоторых серверах автоматически не восстанавливаются транки к sip провайдерам. Приходится дергать их вручную через sip reload после того, как пользователи начинают жаловаться. А так как провайдеров может быть несколько, не всегда сразу становится понятно, что какой-то из каналов отвалился.

Введение

Я буду использовать очень простую проверку. В интернете находится много рецептов по мониторингу asterisk с помощью zabbix. Есть готовые наборы скриптов на питоне, есть шаблоны. Можно настроить мониторинг практически всего, что только пожелаешь.

Мне не хотелось во всем этом разбираться и нагромождать в систему, так как нужно только состояние транков — зарегистрирован или нет. Усложнять чем-то еще свои системы мониторинга не хотелось. Больше никакие данные мне не нужны. Я стараюсь настраивать мониторинг только тех параметров, которые реально необходимы. Это позволяет экономить время и ресурсы сервера.

С помощью простого sh скрипта я буду проверять суммарное количество транков в системе и сравнивать это число с числом зарегистрированных транков. Если разница этих чисел будет отлична от нуля, значит как минимум одна регистрация отвалилась. Нужно на всякий случай проверить сервер и выяснить причину.

После этой проверки можно тем же скриптом и перезапустить регистрации, но я в статье ограничусь только мониторингом состояния. Лично мне перезапуск в данном случае не нужен, так как ситуации бывают редко и я хочу сам проверить, почему регистрации отвалились.

Настройка агента для мониторинга транков (trunks)

Создадим папку для пользовательских скриптов в каталоге zabbix:

# mkdir /etc/zabbix/scripts

Создаем в ней скрипт asterisk.trunk.sh следующего содержания:

#!/bin/sh
# Получаем количество всех транков в системе
number_tranks=`/usr/sbin/asterisk -rx "sip show registry" | grep "SIP registrations" | awk '{print $1}'`
# Считаем количество зарегистрированных транков
reg_tranks=`/usr/sbin/asterisk -rx "sip show registry" | grep Registered | wc -l`
# Вычисляем разницу между полученными значениями
let result=$number_tranks-$reg_tranks
# Выводим результат вычисления
echo $result

Назначаем владельцем файла пользователя zabbix и выставляем права на выполнение скрипта:

# chown zabbix. /etc/zabbix/scripts/asterisk.trunk.sh
# chmod 0750 /etc/zabbix/scripts/asterisk.trunk.sh

Теперь просто запустите скрипт и посмотрите результат. Если все регистрации подключены, то скрипт должен вернуть значение 0:

# /etc/zabbix/scripts/asterisk.trunk.sh
0

Открываем на редактирование конфиг агента и добавляем параметр UserParameter:

UserParameter=asterisk.trunk,/etc/zabbix/scripts/asterisk.trunk.sh

Перезапускаем zabbix-agent той командой, что соответствует вашей системе. В CentOS 7 делаем так:

# systemctl restart zabbix-agent

Теперь проверим с помощью zabbix_agentd какое значение будет отправлять агент на сервер:

# zabbix_agentd -t asterisk.trunk
asterisk.trunk [t|0]

Все в порядке, то что надо. На этом настройка агента на сервере asterisk закончена. Переходим на сервер мониторинга.

Создание шаблона мониторинга asterisk на сервере zabbix

Нам нужно создать шаблон на сервере, для назначения его серверам с астериском. Здесь ничего сложного, делаем все то же самое, что мы делали ранее, настраивая мониторинг рейда mdadm. Идем в раздел Configuration -> Templates, нажимаем Create template.

Создание шаблона Asterisk

Пишем название и добавляем его в группу с шаблонами.

Указываем параметры нового шаблона

Открываем шаблон, переходим в раздел Items и жмем на Create item. Заполняем параметры нового итема как на картинке.

Создание элемента для мониторинга транков

Я поставил интервал проверок 120 секунд = 2 минуты. Вы можете поменять под свои нужды этот параметр. Сохраняем новый итем.

Для сбора данных все готово. Теперь назначаем шаблон серверам с астериском, где мы подготовили агенты мониторинга и скрипты и ждем поступления данных. Проверять как обычно идем в Latest data. Через пару минут должны поступить значения.

Просмотр данным мониторинга asterisk

У меня пришло значение 0 как и должно быть. Все регистрации на месте. Теперь нам нужно добавить триггер, который будет отправлять уведомление, если какая-нибудь из регистраций отвалится. Для этого идем в созданный шаблон и переходим в раздел Triggers. Жмем Create trigger и указываем значения, как у меня.

Создание триггера мониторинга регистраций

Если 3 последние проверки покажут значение, отличное от 0, сработает триггер и прилетит уведомление на почту. Сохраняем триггер. На этом все. Можете проверить работу любым способом, который придумаете. Например, временно измените пароль на одном из транков, или добавив новый с несуществующими параметрами. Можно и не проверять, все должно и так работать 🙂

Возможные ошибки

Если ваш новый item не работает, получает статус not supported, а в описании причины ошибка:

Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)

Необходимо разрешить пользователю zabbix, от которого работает скрипт, запускать asterisk. Для этого добавляем в файл /etc/sudoers в самый конец следующую строку:

zabbix ALL = NOPASSWD: /usr/sbin/asterisk

После этого проверяем выполнение скрипта от пользователя zabbix:

# sudo -u zabbix /etc/zabbix/scripts/asterisk.trunk.sh

Если получаете вывод значения, значит все в порядке. Если же все равно видите ошибку:

Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)

Добавьте в скрипт перед /usr/sbin/asterisk выполнение /usr/bin/sudo. Должно получиться так:

reg_tranks=`/usr/bin/sudo /usr/sbin/asterisk -rx "sip show registry" | grep Registered | wc -l`

После этого отцепите шаблон от хоста и добавьте заново. Подождите несколько минут обновления данных. Вы можете снова получить ошибку, но уже другого рода:

sudo: sorry, you must have a tty to run sudo

Эта ошибка появится, если у вас пользователь zabbix создан без какой-либо оболочки. Это зависит от системы и версии заббикс агента. Проверить можно в файле /etc/passwd:

# cat /etc/passwd | grep zabbix
zabbix:x:496:496:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin

Пользователям без оболочки по-умолчанию запрещено использовать sudo, которое мы добавили в скрипт. Исправить это можно в фале /etc/sudoers, закомментировав параметр:

#Defaults    requiretty

После этого снова отцепляем шаблон и прикрепляем заново. Теперь должно быть все в порядке.

Постарался предусмотреть все варианты развития событий. Наличие тех или иных ошибок будет зависеть от операционной системы и версии zabbix и asterisk.

Заключение

В очередной раз zabbix подтвердил свою простоту и гибкость настроек. Буквально за несколько минут, после беглого безрезультатного поиска в гугле, я смастерил простенький скрипт и добавил его к системе мониторинга. Поставленную задачу он успешно выполняет. Так как ставил на разные системы, пришлось отловить несколько ошибок.

Мониторинг OpenWRT в Zabbix

Установить непосредственно заббикс-агент с репозиториев OpenWRT:

opkg update
opkg install zabbix-agentd

Создать пользователя и группу

echo "zabbix:*:42223:42223:zabbix:/var:/bin/false" >> /etc/passwd
echo "zabbix:x:42223:" >> /etc/group

Создать папку под pid-файл (с нужными правами)

mkdir /var/tmp
chown zabbix /var/tmp


Сконфигурировать агента

vi /etc/zabbix_agentd.conf

Hostname=openwrt
StartAgents=1
PidFile=/var/tmp/zabbix_agentd.pid
LogFileSize=1
LogFile=/tmp/zabbix_agentd.log
Server=1.2.3.4
ServerActive=1.2.3.4

Набор дополнительных пользовательских параметров, позволяющих отслеживать состояние WiFi соединения, можно взять в Gist.
Добавить run-скрипт

vi /etc/init.d/zabbix_agentd

#!/bin/sh /etc/rc.common
# Copyright (C) 2008-2011 OpenWrt.org

START=60
SERVICE_PID_FILE=/var/run/zabbix/zabbix_agentd.pid

start() {
[ -f /etc/zabbix_agentd.conf ] || return 1
user_exists zabbix 53 || user_add zabbix 53
group_exists zabbix 53 || group_add zabbix 53
[ -d /var/log/zabbix ] || {
mkdir -m0755 -p /var/log/zabbix
chown zabbix:zabbix /var/log/zabbix
}
[ -d /var/run/zabbix ] || {
mkdir -m0755 -p /var/run/zabbix
chown zabbix:zabbix /var/run/zabbix
}
chgrp zabbix -R /sys/kernel/debug/ieee80211/
chmod g+r -R /sys/kernel/debug/ieee80211/
chgrp -R zabbix /var/state/
chmod g+r -R /var/state/
service_start /usr/sbin/zabbix_agentd
}
stop() {
service_stop /usr/sbin/zabbix_agentd
}

chmod +x /etc/init.d/zabbix_agentd
/etc/init.d/zabbix_agentd start

Zabbix и asterisk по snmp

Источник знаний – http://habrahabr.ru/sandbox/33568/
yum install net-snmp net-snmp-utils net-snmp-libs net-snmp-devel
Тестирование asterisk что он собран с поддержкой snmp
CLI> module show like snmp
res_snmp.so                    SNMP SubAgent for Asterisk             0
1 modules loade
В /etc/asterisk/res_snmp.conf
[general]
subagent = yes
enabled = yes
в /etc/snmp/snmpd.conf вносим (в конец)
# Asterisk use
createUser asteriskZabbix MD5 asterzabbix DES
rwuser asteriskZabbix priv
# Asterisk configuratio
master agentx
agentXSocket /var/agentx/master
agentXPerms 0660 0550 nobody asterisk

Если на тестовое подключение нет ответа – значит asterisk запущен не под рутом
помогает добавление в /etc/snmp/snmpd.conf вносим (в конец)

agentuser asterisk
agentgroup asterisk
Проверяем запуск сервиса
chkconfig snmpd on
chkconfig snmptrap on
service snmpd start
service snmptrapd start
chmod 755 /var/agentx
Шаблоны asterisk-mib.txt digium-mib.txt грузим от сюд
и сюда /usr/share/snmp/mibs/
Тестирование подключения с паролем
snmpwalk -v 3 -u asteriskZabbix -n “” -l authPriv -a MD5 -A asterzabbix -X asterzabbix localhost ASTERISK-MIB::astConfigUpTime
ответ
ASTERISK-MIB::astConfigUpTime.0 = Timeticks: (6745740) 18:44:17.40

У вас появляется ругательства вида (1.3.6.1.4.1.22736.1.5.4.1.2)
Проверяем наличие
snmptranslate 1.3.6.1.4.1.22736.1.5.4.1.2

Достаточно в zabbix теперь загрузить шаблон и подключить к нужному серверу
Шаблон брать от сюда и менять все PASSWORD на asterzabbix (наш пароль)
http://www.mzintegration.com/downloads/Template_Asterisk.xml
В zabbix он грузиться в Configuration – Tempaltes – Import
Теперь в настройках Host у zabbix надо к стандартному Agent interfaces включить SNMP interfaces

Установка zabbix
http://www.zabbix.com/wiki/howto/monitor/os/linux/agentinstallonlinux

Порты открывать 161 и 162 по udp, и 10050 и 10051 по tcp (пример показан для vpn (tun0))
iptables -A INPUT -i tun0 -p udp -m udp –dport 161:162 -j ACCEPT
iptables -A INPUT -i tun0 -p tcp -m tcp –dport 10050:10051 -j ACCEPT

По просьбам трудящихся фото.
Параметры мониторинга зависят от шаблона загруженного в zabbix, шаблон легко редактируется, если вам хочется что-то добавить – смотрите asterisk-mib.txt – читаете описание к параметру и редактируете шаблон.

На первом фото – канал завис и провисел всю ночь.

foto1
Показывается параметры из шаблона
foto2
Настройка клиента
foto3

Существует еще один способ мониторинга через запуск прописанных в zabbix_agentd.conf правил в виде
UserParameter=sip.peersonline,sudo /usr/sbin/asterisk -rx ‘sip show peers’|grep –text -i ‘sip peers’|awk ‘{print $5}’

Волшебная строка, показывающея падение регистрации (при любых вариантах кроме строки Registered будет показана цифра отличная от нуля)
UserParameter=sip.unreachable,sudo /usr/sbin/asterisk -rx ‘sip show registry’ | grep -v ‘Host’ | grep -v ‘SIP registration’ | grep -v ‘Registered’ | wc -l

Еще интересные строки

Пинг до определенного ip адреса, на выходе 1 или 0 в зависимости от пингуется или нет
UserParameter=ping.lost,sudo /bin/ping -c1 -W3 192.168.134.133 | grep -o ‘[0-9]* received’ | tr -cd ‘[0-9]’ | awk ‘{print $1}’
Проверка определенного sip пира на регистрацию, на выходе 1 или 0 в зависимости от статуса “ОК”
UserParameter=sip.reglost,sudo /usr/sbin/asterisk -rx ‘sip show peer 422’ | grep –text -i ‘Status’ | grep –text -i ‘OK’ | wc -l

Для работоспособности сего решения необходимо:
yum install sudo
Наличие пользователя с именем zabbix в системе

И в /etc/sudoers надо добавить строку вида
zabbix ALL = NOPASSWD: /usr/sbin/asterisk

Проверка:
su zabbix
sudo /usr/sbin/asterisk -rx ‘sip show registry’

Если не выдало ошибок на права, значит все работает

Update:

Напрягся и переписал шаблон Template_Asterisk, за место Zap стало показывать DAHDI каналы
zabbix-dahdi
Шаблон кроме имени DAHDI Channels, от Zap отличается строчками

astChanTypeChannels.DAHDI
.1.3.6.1.4.1.22736.1.5.4.1.7[“index”, 1.3.6.1.4.1.22736.1.5.4.1.2, “DAHDI”]

ну и не забудьте в этом же Tempate поменять графический вывод, выкинуть Zap и добавить DAHDI

Как найти нужный параметр мониториться ли канал? Делаете звонок и потом в консоле делаете вот это
snmpwalk -v 3 -u asteriskZabbix -n “” -l authPriv -a MD5 -A asterzabbix -X asterzabbix localhost ASTERISK-MIB::astChanTypeChannels

ASTERISK-MIB::astChanTypeChannels.1 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.2 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.3 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.4 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.5 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.6 = Gauge32: 1  < это SIP
ASTERISK-MIB::astChanTypeChannels.7 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.8 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.9 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.10 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.11 = Gauge32: 0 < это DAHDI
ASTERISK-MIB::astChanTypeChannels.12 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.13 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.14 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.15 = Gauge32: 0
=====================================================================================
Дополнения:
Как мониторить с помощью zabbix 2.2 mysql сервера через Template App MySQL
Хорошая документация была вся в иероглифах ( http://qiita.com/iwaim@github/items/8443acf4a4917e5b21fb )
Фокус с этой документацие не прокатил ( http://blog.themilkyway.org/2013/11/how-to-monitor-mysql-using-the-new-zabbix-template-app-mysql/ )

1.Создаете еще одного пользователя для мониторинга
mysql> GRANT PROCESS ON *.* TO ‘zabagent’@’127.0.0.1’ IDENTIFIED BY ‘123pass’;

mysql> flush privileges;
2.Создаете папку /var/lib/zabbix и помещаете туда файл .my.cnf с содержанием

mkdir /var/lib/zabbix
touch .my.cnf
chmod 400 /var/lib/zabbix/.my.cnf
chown -R zabbix:zabbix /var/lib/zabbix
cat .my.cnf
[client]
user = zabagent
password = 123pass
host =127.0.0.1
3.Перезапускает агента
service zabbix-agent restart

zabbix on centos

Хочу отметить, что эта инструкция родилась в процессе внедрения Zabbix в стенах компании Acronis.
В процессе экспертизы и проведенных мною исследований, она доказала свое право на жизнь и благополучно служит нам верой и правдой день изо дня.

Перед нами стоит нетривиальная задача, добиться максимальной производительности известной системы мониторинга zabbix.
Среди многих статей в интернете, есть много описаний типовых установок этой системы. Я подробно опишу, как заставить работать zabbix быстрее.
В качестве базовой системы я буду использовать CentOS 6.4. Так же как и многие я люблю Debian, Gentoo и все остальные дистрибутивы, но эта статья именно для CentOS.

Все что нужно делать я распишу подробно и шаг за шагом, и начнем с базовой настройки нашего CentOS

# Выключаем SELINUX
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# Настраиваем часовой пояс
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime

# Запускаем синхронизацию времени

yum install ntp -y
chkconfig ntpd on
/etc/init.d/ntpd stop
ntpdate 0.ru.pool.ntp.org 1.ru.pool.ntp.org 2.ru.pool.ntp.org 3.ru.pool.ntp.org
/etc/init.d/ntpd start

# Устанавливаем вспомогательные компоненты
yum install wget nano wget ntpdate -y

# Эти репозитории должны быть, очень много пакетов что нет в базовых репозиториях, мы найдем тут

wget dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm
rm *.rpm -f

# Этот репозиторий нам пригодится но мы его выключим по умолчанию

rpm –import dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
cd /tmp
wget dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm && rpm -ivh rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

# Выключаем, будем использовать через –enablerepo=rpmforge
sed -i 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo

# А вот это жемчужина для web систем и не только, тут действительно есть очень много того, что нужно администратору в своей работе. MustHave
wget -q -O - http://www.atomicorp.com/installers/atomic | sh

# Ставим полезный софт

yum install nano mc screen sudo nscd htop ntp zip unzip pigz iotop sysstat lsof strace atop multitail -y
yum –enablerepo=rpmforge install htop -y

# Обновляем систему
yum update -y

Теперь перейдем к установке самого zabbix и требуемых ему компонентов:

SERVER

# Установим официальный репозиторий zabbix для centos
rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm

# Убиваем все старые компоненты MySQL, Это удалит MySQL!
yum remove php-* mysql-* MariaDB-* -y

# Устанавливаем mariadb из репозитория atomic
yum install mariadb-server mariadb-devel mariadb-client -y

# Устанавливаем много компонентов и модулей которые нужны для работы zabbix

yum install ntp php56w php56w-mysql php56w-mbstring php56w-mcrypt rpm-build gcc mariadb-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel php56w-fpm php56w-cli php56w-gd php56w-imap php56w-ldap php56w-odbc php56w-pear php56w-xml php56w-xmlrpc php56w-pecl-apc hp-magpierss php56w-snmp php56w-tidy spawn-fcgi openssl perl-TimeDate webalizer perl-DateTime-Format-HTTP perl-DateTime-Format-Builder perl-TimeDate libevent-devel php56w-pecl-memcache nginx cronie cronie-anacron crontabs postfix sysstat -y

# Устанавливаем сам zabbix

yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent

# Настраиваем MariaDB, нужно привести ее конфиг к такому виду (эти конфиг расчитан на 16ГБ ОЗУ на сервере)
[root@zabbix ~] nano /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
default_storage_engine=InnoDB
innodb_file_per_table = 1

#
#
# network
connect_timeout = 60
wait_timeout = 28800
max_connections = 200
max_allowed_packet = 512M
max_connect_errors = 1000

# limits
tmp_table_size = 512M
max_heap_table_size = 256M
table_cache = 1024

# logs
log_error = /var/log/mysql/mysql-error.log
#slow_query_log_file = /var/log/mysql/mysql-slow.log
#slow_query_log = 1
#long_query_time = 20

# innodb
default_storage_engine=InnoDB
innodb_file_per_table = 1
innodb_status_file = 1
innodb_additional_mem_pool_size = 128M
innodb_buffer_pool_size = 12G # Значение этого параметра должно быть не более 60% от объема ОЗУ на сервере
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000
innodb_flush_log_at_trx_commit = 2
innodb_support_xa = 0
innodb_log_buffer_size = 128M

# experimental
innodb_stats_update_need_lock = 0

# other stuff
event_scheduler = 1
query_cache_type = 0
query_cache_size = 536870912
join_buffer_size=1M
query_cache_limit=2M
sort_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=4M
key_buffer = 256M
key_buffer_size=64M
open_files_limit = 100000
thread_cache_size = 100

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

# Добавляем mysql в автозагрузку
chkconfig mysqld on && /etc/init.d/mysqld restart

# Добавляем php-fpm в автозагрузку

chkconfig –levels 235 php-fpm on
/etc/init.d/php-fpm start

# Удаляем конфиги по умолчанию nginx

rm /etc/nginx/conf.d/default.conf -f
rm /etc/nginx/conf.d/virtual.conf -f

# Создаем базу zabbix

mysql -e ‘CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;’
mysql -e ‘grant all privileges on zabbix.* to zabbix@localhost identified by «9c9yUiUuros»;’
mysql -e ‘flush privileges;’

# Заливаем стандартные схемы для базы zabbix

mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.2.0/create/schema.sql
mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.2.0/create/images.sql
mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.2.0/create/data.sql

# Добавляем правила iptables

iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 10050 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 10051 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW -m udp –dport 10050 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW -m udp –dport 10051 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
service iptables save

# Внесем обязательные изменения в конфигурацию php
[root@zabbix ~] nano /etc/php.ini

post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Europe/Moscow

# Приведем конфигурациию zabbix к следующему виду:
egrep -v ‘^#|^$’ /etc/zabbix/zabbix_server.conf

[root@zabbix ~] nano /etc/zabbix/zabbix_server.conf

LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
DBName=zabbix
DBUser=zabbix
DBUser=zabbix
DBPassword=9c9yUiUuros
DBSocket=/var/lib/mysql/mysql.sock
SNMPTrapperFile=/var/log/snmptt/snmptt.log
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts

# Добавляем сервер zabbix в автозагрузку
chkconfig zabbix-server on

# Немного изменим стандартную конфигурацию nginx, приведем конфиг к такому виду:
[root@zabbix ~] nano /etc/nginx/nginx.conf

user nginx;
worker_processes 10;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
use epoll;

multi_accept on;

}

error_log /var/log/nginx/error.log warn;

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main ‘$remote_addr — $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;

access_log /var/log/nginx/access.log main;

connection_pool_size 256;
client_header_buffer_size 4k;
client_max_body_size 100m;
large_client_header_buffers 8 8k;
request_pool_size 4k;
output_buffers 1 32k;
postpone_output 1460;
proxy_max_temp_file_size 0;
gzip on;
gzip_min_length 1024;
gzip_proxied any;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/xml application/xml application/x-javascript text/javascript text/css text/json;
gzip_comp_level 8;
gzip_disable «MSIE [1-6]\.(?!.*SV1)»;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 75 20;
server_names_hash_max_size 8192;
ignore_invalid_headers on;
server_name_in_redirect off;

proxy_buffer_size 8k;
proxy_buffers 32 4k;
proxy_connect_timeout 1000;
proxy_read_timeout 12000;
proxy_send_timeout 12000;
proxy_cache_path /var/cache/nginx levels=2 keys_zone=pagecache:5m inactive=10m max_size=50m;
real_ip_header X-Real-IP;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

allow all;

include /etc/nginx/conf.d/*.conf;
}

# Настраиваем nginx на работу с zabbix и php-fpm
[root@zabbix ~]# nano /etc/nginx/conf.d/zabbix.conf

server {
listen 80;
server_name имя;
server_name другое имя;

location / {
root /usr/share/zabbix;
index index.php index.html index.htm;
}

location ~ \.php$ {
root /usr/share/zabbix;
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
location ~ /\.ht {
deny all;
}
}

server {
listen 80;
server_name _;

location / {
root /usr/share/zabbix;
index index.php index.html index.htm;
}

location ~ \.php$ {
root /usr/share/zabbix;
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
location ~ /\.ht {
deny all;
}
}

# Убираем из автозагрузки apache

chkconfig –levels 235 httpd off
/etc/init.d/httpd stop

# Добавляем nginx в автозагрузку

chkconfig –levels 235 nginx on
/etc/init.d/nginx start

Вот таким простым методом, мы получаем высокопроизводительную установку zabbix.

Статья была бы не полной, если бы я не сказал об установке zabbix-proxy и zabbix-agent, предполагается что шаги базовой настройки системы (в самом начале статьи) мы уже прошли

PROXY

# Установим официальный репозиторий zabbix для centos
rpm -ivh http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm

# Удаляем старый софт

yum remove zabbix-proxy-* -y
yum remove mysql* mysql-*

# Устанавливаем mariadb из репозитория atomic
yum install mariadb-server mariadb-devel mariadb-client -y

# После удаления компонентов mysql, могли удалиться важные компоненты
yum install -y cronie cronie-anacron crontabs postfix sysstat

# Собственно сам zabbix из официального репозитория
yum install zabbix zabbix-agent zabbix-proxy-mysql zabbix-proxy -y

Рассмотрим случай, что zabbix-proxy нужно поставить на чем то другом, например fedora 14

mkdir /root/zabbix && cd /root/zabbix
wget repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-2.0.9-1.el6.x86_64.rpm
wget repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-agent-2.0.9-1.el6.x86_64.rpm
wget repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-proxy-2.0.9-1.el6.x86_64.rpm
wget repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-proxy-mysql-2.0.9-1.el6.x86_64.rpm
wget repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-get-2.0.9-1.el6.x86_64.rpm
rpm -Uhv *.rpm

# Настраиваем MariaDB, нужно добавить параметры
[root@zabbix ~] nano /etc/my.cnf

default_storage_engine=InnoDB
innodb_file_per_table = 1

# Добавляем zabbix в автозагрузку

chkconfig zabbix-proxy on
chkconfig zabbix-agent on
chkconfig mysqld on && /etc/init.d/mysqld start

# Создаем базу

mysql -e ‘CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;’
mysql -e ‘grant all privileges on zabbix.* to zabbix@localhost identified by «lNZrKeZASv0L»;’
mysql -e ‘flush privileges;’

# Заливаем стандартные схемы для базы zabbix

mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.0.9/create/schema.sql
mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.0.9/create/images.sql

# Добавляем правила iptables

iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 10050 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 10051 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW -m udp –dport 10050 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW -m udp –dport 10051 -j ACCEPT
service iptables save

# Настраиваем сам zabbix-proxy

sed -i «s/^Server=.*/Server=адрес-сервера-zabbix/g» /etc/zabbix/zabbix_proxy.conf
sed -i «s/^Hostname=.*/Hostname=имя-этого-прокси-который-указали-zabbix-server/g» /etc/zabbix/zabbix_proxy.conf
sed -i «s/^DBName=.*/DBName=zabbix/g» /etc/zabbix/zabbix_proxy.conf
echo ProxyMode=0 >> /etc/zabbix/zabbix_proxy.conf
echo ProxyLocalBuffer=1 >> /etc/zabbix/zabbix_proxy.conf
echo ProxyLocalBuffer=ProxyOfflineBuffer=100 >> /etc/zabbix/zabbix_proxy.conf
echo HousekeepingFrequency=1r=100 >> /etc/zabbix/zabbix_proxy.conf
echo DataSenderFrequency=300 >> /etc/zabbix/zabbix_proxy.conf
echo StartPollers=5 >> /etc/zabbix/zabbix_proxy.conf
echo StartIPMIPollers=1 >> /etc/zabbix/zabbix_proxy.conf
echo StartPollersUnreachable=1 >> /etc/zabbix/zabbix_proxy.conf
echo StartTrappers=5 >> /etc/zabbix/zabbix_proxy.conf
echo StartHTTPPollers=1 >> /etc/zabbix/zabbix_proxy.conf
echo StartDBSyncers=4 >> /etc/zabbix/zabbix_proxy.conf
echo Timeout=10 >> /etc/zabbix/zabbix_proxy.conf
echo FpingLocation=/usr/sbin/fping >> /etc/zabbix/zabbix_proxy.conf
echo Fping6Location=/usr/sbin/fping6 >> /etc/zabbix/zabbix_proxy.conf
echo DebugLevel=3 >> /etc/zabbix/zabbix_proxy.conf
echo StartDiscoverers=10 >> /etc/zabbix/zabbix_proxy.conf
echo DBPassword=lNZrKeZASv0L >> /etc/zabbix/zabbix_proxy.conf

# Проверяем конфигурационный файл zabbix-proxy
egrep -v '^#|^$' /etc/zabbix/zabbix_proxy.conf

# Поехали

/etc/init.d/zabbix-proxy start

AGENT, очевидно мы будем его разворачивать через chef или puppet но для полноты материала

# Установим официальный репозиторий zabbix для centos
rpm -ivh http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm

# Устанавливаем агента из официального репозитория
yum install zabbix zabbix-agent -y

или если у Вас не очень свежая fedora
rpm -Uhv http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-2.0.9-1.el6.x86_64.rpm

# Даем пользователю zabbix права sudo и создаем папки для наших будущих скриптов

usermod -s /bin/bash zabbix
echo ‘zabbix ALL=(ALL) NOPASSWD: ALL’ >> /etc/sudoers
sed -i ‘s/Defaults\ requiretty/#Defaults\ requiretty/g’ /etc/sudoers
mkdir /etc/zabbix/scripts/
chmod 750 /etc/zabbix/scripts/

# Добавляем zabbix-agent в автозагрузку
chkconfig zabbix-agent on

# Добавляем правила iptables

iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 10050 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 10051 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW -m udp –dport 10050 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW -m udp –dport 10051 -j ACCEPT
service iptables save

# Настраиваем нашего zabbix-agent

sed -i «s/^Server=.*/Server=адрес-zabbix-sever-или-proxy/g» /etc/zabbix/zabbix_agentd.conf
sed -i «s/^ServerActive=.*/ServerActive=адрес-zabbix-sever-или-proxy/g» /etc/zabbix/zabbix_agentd.conf
sed -i «s/^Hostname=.*/Hostname=`hostname`/g» /etc/zabbix/zabbix_agentd.conf
echo EnableRemoteCommands=1 >> /etc/zabbix/zabbix_agentd.conf
echo LogRemoteCommands=1 >> /etc/zabbix/zabbix_agentd.conf
echo Timeout=30 >> /etc/zabbix/zabbix_agentd.conf

# Готово, наблюдаем логи
/etc/init.d/zabbix-agent restart && tail -f -n 100 /var/log/zabbix/zabbix_*.log

Спасибо за Ваше внимание, если Вы сочтете этот материал интересным, то я буду рад поделиться еще многим и многим!

Zabbix 2 — мониторим MySQL

Новая версия Zabbix 2, помимо прочих плюшек, умеет легко и красиво мониторить основные параметры MySQL-серверов. Более того, в ней для этого есть стандартный шаблон Template Default MySQL. И как оказалось, настраивается он в пару нажатий.

Итак, на хосте, который надо мониторить, нам понадобится следующее:

1. Выполняем в MySQL запрос вида
GRANT USAGE ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'superpassword';

2. В zabbix_agentd.conf проверяем подключение дополнительных конфигов и путь к ним:
Include=/etc/zabbix/conf.d/

3. Если при установке агента файл userparameter_mysql.conf не распаковался, создаем его в каталоге из п.2:

UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'

UserParameter=mysql.size[*],echo “select sum($(case “$3″ in both|””) echo “data_length+index_length”;; data|index) echo “$3_length”;; free) echo “data_free”;; esac)) from information_schema.tables$([[ “$1” = “all” || ! “$1″ ]] || echo ” where table_schema=’$1′”)$([[ “$2” = “all” || ! “$2” ]] || echo “and table_name=’$2′”);” | HOME=/var/lib/zabbix mysql -N

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V

4. В этом файле обращаем внимание на переменную HOME=/var/lib/zabbix. Именно в этот каталог надо положить файл .my.cnf со следующим содержанием:
[client]
user = zabbix
password = superpassword

5. Все, теперь осталось подключить шаблон к хосту и наблюдать за цифрами и веселыми картинками.