Настройка jabber оповещений в Zabbix

Для настройки jabber оповещений в Zabbix необходимо в веб-интерфейсе открыть «Администрирование» — «Способы оповещений«, создать способ оповещения jabber (либо выбрать существующий).

В способе оповещения указать следующие параметры:
Описание: любое
Тип: Jabber
Идентификатор Jabber: идентификатор (логин)
Пароль: пароль Jabber
Поставить галочку «Активно» и нажать «Сохранить«.

Теперь когда способ оповещения создан, откроем «Администрирование» — «Пользователи«, выберем пользователя, перейдем на вкладку «Оповещения» и добавим:
Тип: Jabber
Отправлять на: логин Jabber
Когда активно: Здесь можно ограничить время приема сообщений, например в рабочие дни 1-5,09:00-18:00
Использовать если важность: Важность триггеров для которых получать сообщения
Состояние: Активировано
Жмем «Добавить» и «Сохранить«.

Сервер Jabber обязательно должен быть настроен на этой же машине что и Zabbix сервер, иначе чтобы настроить отправку через внешний Jabber сервер необходимо писать скрипт и добавить его в «Способы оповещений».

Смотрите также:
Установка и настройка EJabberd в Ubuntu

Настройка Zabbix SNMP Traps

Предположим что мы настроили snmptt по инструкции Настройка SNMP Traps в Ubuntu

Теперь допилим конфигурационный файл /etc/snmp/snmptt.conf.
После FORMAT всегда должно идти ZBXTRAP $aA
Пример:

#пропал линк на порту
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT ZBXTRAP $aA Link down on interface $1.  Admin state: $2.  Operational state: $3
#появился линк на порту
EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
FORMAT ZBXTRAP $aA Link up on interface $1.  Admin state: $2.  Operational state: $3

Основные параметры /etc/snmp/snmptt.ini:

net_snmp_perl_enable = 1
mibs_environment = ALL
date_time_format = %H:%M:%S %Y/%m/%d
log_enable = 1
log_file = /var/log/snmptt/snmptt.log
unknown_trap_log_enable = 1
unknown_trap_log_file = /var/log/snmptt/snmpttunknown.log

Добавим следующие параметры в конфигурационный файл /etc/zabbix/zabbix_server.conf:

StartSNMPTrapper=1
SNMPTrapperFile=/var/log/snmptt/snmptt.log

Теперь добавим элемент данных через админ панель Zabbix, например в шаблоне:
Имя: (любое)
Тип: (SNMP trap)
Ключ: (snmptrap[выражение] или snmptrap.fallback чтобы ловить все трапы для узла)
Тип информации: (Журнал (лог))

Судя по добавленным элементам данных можно добавить триггеры.

Вот и все.

Создание внешней проверки Zabbix для SQL запроса SELECT

Вчера добавил график, который рисует сумму платежей из MySQL базы биллинга с другого сервера.

Добавлять пришлось через внешние проверки.

В первую очередь был создан скрипт и положен в стандартную директорию скриптов либо другую, указав ее при этом параметром «ExternalScripts=/var/scripts» в конфигурационном файле /etc/zabbix_server.conf. После чего необходимо перезапустить Zabbix сервер командой:

sudo service zabbix-server restart

Содержимое написанного скрипта:

mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -h 192.168.0.1 -e 'SELECT SUM(money) FROM nika_system.mon WHERE date= CURDATE() - INTERVAL 1 DAY;' -s -N

Скрипт соединяется с базой данный биллинга и суммирует все платежи за предыдущий день, параметры -s и -N удаляют в ответе запроса ненужные данные, благодаря чему мы получаем только цифру с плавающей точкой.

Файл скрипта также необходимо сделать исполняемым, например командой:

chmod a+x /var/scripts/money.sh

В панели управления Zabbix необходимо добавить элемент данных с внешней проверкой указав ключ money.sh, тип данных число с плавающей точкой и временем выполнения например раз в пол дня (это 43200 сек), потом создать график добавив в него созданный элемент данных.

Все.

Настройка Template App MySQL в Zabbix

Буду настраивать на Zabbix 2.2 и Ubuntu 14 LTS.

Для начала подключимся к mysql серверу:

mysql -u root -p

И выполним команды чтобы добавить пользователя от имени которого будем получать информацию:

GRANT USAGE ON *.* TO 'mysqlmonitor'@'localhost' IDENTIFIED BY 'ПАРОЛЬ';
FLUSH PRIVILEGES;
exit

Проверить пользователя можно выполнив команду:
mysql -umysqlmonitor -pПАРОЛЬ -e»status»

Создадим файл с настройками подключения к mysql серверу:
/etc/zabbix/.my.cnf
Добавим в него содержимое:

[mysql]
user=mysqlmonitor
password=ПАРОЛЬ
[mysqladmin]
user=mysqlmonitor
password=ПАРОЛЬ

Скопируем нужный файл userparameter_mysql.conf:

sudo cp /usr/share/doc/zabbix-agent/examples/userparameter_mysql.conf /etc/zabbix/zabbix_agentd.conf.d/userparameter_mysql.conf

Отредактируем его, изменив путь в переменной HOME на путь где находится файл .my.cnf, в нашем случае это HOME=/etc/zabbix.

Хочу заметить что в главном конфигурационном файле /etc/zabbix/zabbix_agentd.conf должна быть прописана строка Include=/etc/zabbix/zabbix_agentd.conf.d/ благодаря которой будут подгружаться все конфигурационные файлы в этой директории.

Перезапустим zabbix агента чтобы изменения вступили в силу:

sudo service zabbix-agent restart

Все, теперь в административной панели zabbix сервера можно добавить к хосту шаблон «Template App MySQL» и любоваться графиками.

Резервное копирование Zabbix

Придумал и набросал пару строк для резервного копирования mysql базы данных и директории с http файлами.

Первым делом делаем копию mysql базы данных zabbix (ключом —ignore-table исключим ненужные таблицы с историей, так как они могу занимать гигабайты) и архивируем ее:

mysqldump --ignore-table=zabbix.history --ignore-table=zabbix.history_uint --ignore-table=zabbix.trends --ignore-table=zabbix.trends_uint -u ПОЛЬЗОВАТЕЛЬ -h localhost -pПАРОЛЬ zabbix | gzip -c > /backups/zabbix_`date +%Y-%m-%d`.sql.gz

Вторым шагом будет архивация http файлов zabbix:

tar -cvjf /backups/`date +%Y-%m-%d`_zabbix.tar.bz2 /usr/share/zabbix/

Вместо директории /backups/ можно монтировать и указать какой нибудь сетевой диск из интернета и на него делать резервные копии.
Обе строки можно добавить в /etc/crontab чтобы копии выполнялись например ежедневно, или добавить их в файл, а в /etc/crontab/ указать путь к этому файлу, вот например каждый день в 3 утра:

0 3 * * * ПОЛЬЗОВАТЕЛЬ СТРОКА > /dev/null 2>&1

(где в качестве пользователя указывается существующий пользователь в системе от имени которого будет выполнятся команда, а в качестве строки указанная выше команда или путь к исполняемому файлу с списком указанных выше команд)
Пример с указанием на файл:

0 3 * * * root /backups/script.sh > /dev/null 2>&1

Смотрите также: Немного о CRON

Установка и настройка Zabbix агента в Ubuntu

В Ubuntu/Debian Zabbix агент устанавливается довольно легко.
Изначально достаточно ввести команду установки:

sudo apt-get install zabbix-agent

И немного изменить конфигурационный файл /etc/zabbix/zabbix_agentd.conf
А именно указать:
LogFileSize=1 (размер файла логов в мегабайтах)
EnableRemoteCommands=1 (разрешить выполнение команд в системе Zabbix сервером)
Server=192.168.1.11 и ServerActive=192.168.1.11 (ip адрес удаленного Zabbix сервера)
Hostname=имя (такое же как hostname системы)
ListenIP=192.168.1.1 (если в системе несколько сетевых интерфейсов с разными ip и необходимо чтобы zabbix агент работал на конкретном из них, а не на всех, то укажем его ip)

Редактировать конфигурационный файл можно например стандартным редактором nano (в котором Ctrl+O и Enter служит для сохранения изменений, а Ctrl+X для выхода).
Пример открытия файла в редакторе:

sudo nano /etc/zabbix/zabbix_agentd.conf

Если на сервере много IP адресов, а zabbix-agent должен работать на одном, а не на всех, то укажем его:

ListenIP=192.168.0.5

Перезапустим Zabbix агента чтобы изменения в конфигурационном файле вступили в силу:

sudo /etc/init.d/zabbix-agent restart

Посмотреть на какиех интерфейсах запущен zabbix-agent можно так:

sudo netstat -tulpn | grep :10050

Проверим запустится ли zabbix-agent после перезапуска системы и при при необходимости активируем автозапуск:

sudo systemctl is-enabled zabbix-agent.service
sudo systemctl enable zabbix-agent.service

Если используется iptables, то добавим два правила (можно также добавить к правилам, например -s 192.168.0.20, если нужно разрешить подключение к агенту только с конкретных IP-адресов):

sudo iptables -A INPUT -p tcp --dport 10050 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 10051 -m state --state NEW,ESTABLISHED -j ACCEPT

Готово.

Смотрите также:
Установка Zabbix в Ubuntu из пакетов дистрибутивов

Как увеличить число последних событий в панели Zabbix

Заметил что в панели Zabbix отображается максимум 20 последних событий, а остальные необходимо смотреть в группах узлов сети.

Чтобы увеличить число отображаемых последних событий откроем файл ../zabbix/include/defines.inc.php в любом редакторе, например в nano:

sudo nano /usr/share/zabbix/include/defines.inc.php

и примерно на 537 строке найдем следующее:

define('DEFAULT_LATEST_ISSUES_CNT', 20);

Изменим цифру 20 например на 150 и сохраним изменения, после этого в панели Zabbix будет отображаться 150 последних событий.

Кстати в редакторе nano комбинация клавиш Ctrl+W используется для поиска, Ctrl+O и Enter для сохранения, а Ctrl+X для выхода.

Решение ошибки запуска Zabbix сервера и агента

Столкнулся со следующими ошибками запуска zabbix-server и zabbix-agent в Ubuntu:

service zabbix-server start
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.55" (uid=1000 pid=30492 comm="start zabbix-server ") interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")
service zabbix-agent start
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.51" (uid=1000 pid=30423 comm="start zabbix-agent ") interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

Решается данная ошибка выполнением команд от имени root:
sudo service zabbix-server start
sudo service zabbix-agent start

Все.

SQL запросы для Zabbix

Напишу несколько полезных примеров sql запросов для базы данных Zabbix:

Поиск хоста по имени:

SELECT * FROM hosts WHERE host like '%name%';
SELECT * FROM hosts WHERE name like '%name%';

Поиск элементов данных указанного хоста:

SELECT * FROM items WHERE hostid = '10105';

Поиск истории значений для указанного элемента данных:

SELECT * FROM history WHERE itemid = '24526';

Удалим всю историю элемента данных до 01.11.2014 (время указано в Unix формате, конвертеры можно найти через поисковик):

DELETE FROM history WHERE itemid = '24526' AND clock < '1414800000';

Удаление всей истории данных до 01.11.2014:

DELETE FROM history WHERE clock < '1414800000';

Массово менял интервал и динамику изменений в элементы данных шаблонов и хостов я следующими запросами (первый определяет ID шаблона или хоста, второй изменяет интервалы):

SELECT * FROM `hosts` WHERE host="Template ICMP Ping";
UPDATE items SET delay=3600 WHERE hostid=10105 AND delay=600;
UPDATE items SET trends=180 WHERE hostid=10047 AND trends=365;

Настройка низкоуровневого обнаружения в Zabbix

Низкоуровневое обнаружение позволяет автоматически создавать элементы данных, триггеры, графики.
Массово его лучше не использовать, так как на практике заметил что оно дает значительную нагрузку на систему.

Приведу пример настройки обнаружения для просмотра загрузки портов управляемого коммутатора.
Для начала открываем «Настройка» — «Шаблоны«, создаем новый шаблон или напротив готового нажимаем «Обнаружение«.
Нажимаем «Создать правило» и заполняем основные параметры:

Name: Interaces
Type: SNMPv2 agent
Key: snmp.discovery
SNMP OID: ifDescr
SNMP community: public
Port: 161

Вторым шагом будет создание прототипа элемента данных:

Name: ifInOctets.$1
Type: SNMPv2 agent
Key: ifInOctets.["{#SNMPINDEX}"]
SNMP OID: ifInOctets.{#SNMPINDEX}
SNMP community: public
Port: 161
Type of information: Numeric (float)
Units: B
Use custom multiplier: 8
Store value: Delta (speed per second)
New aplication: ifInOctets

Пример создания прототипа триггера:

Name: ifOperStatus.{#SNMPINDEX} on {HOST.HOST} was changed
Expression: {template name:ifOperStatus.["{#SNMPINDEX}"].diff()}=1

Вместо «ifInOctets» аналогично можно использовать например: ifOutOctets, ifInErrors, ifOutErrors, ifInDiscards, ifOutDiscards, ifOperStatus и т.д.

При создании графика в имени пишем например «Трафик. Порт {#SNMPINDEX}» и добавим в Item например два элемента данных, отвечающие за входящий (ifInOctets) и исходящий трафик (ifOutOctets).

Смотрите также:
Список SNMP OID и MIB для интерфейсов