Инструкция по настройке интеграции Zabbix с SNMP TRAP и отправке TRAP’ов на E-Mail.
Отправка на E-mail осуществляется внешним скриптом, что позволяет получать TRAP’ы на E-mail без использования Zabbix.
Оглавление
Используемое ПО
- CentOS Linux release 7.5.1804 (Core)
- net-snmp, Version : 5.7.2
- snmptt, Version : 1.4
- ssmtp, Version : 2.64
- Zabbix, Version : 3.4.11
Принцип работу
- Утилита snmptrapd (из пакета net-snmp) получает TRAP от устройства и запускает обработчик TRAP’ов — snmptt.
- snmptt обрабатывает полученный TRAP:
- Фильтрует полученные данные (не все трапы мы хотим сохранять в Zabbix и отправлять на E-mail);
- Переводит TRAP в формат понятный Zabbix и сохраняет в файл (который в дальнейшем анализирует Zabbix);
- Выполняет внешний скрипт для отправки TRAP’а на E-mail.
- Внешний скрипт, с помощью утилиты ssmtp, отправляет TRAP на E-mail.
Установка пакетов
Предполагаем, что Zabbix уже установлен и настроен.
yum install epel-release yum install snmptt net-snmp-utils net-snmp-perl perl-Sys-Syslog ssmtp
Настройка Zabbix
Если вы не используете Zabbix и вам нужно только получать TRAP’ы на E-mail, вы можете пропустить этот этап.
Включаем поддержку SNMP TRAP в Zabbix и указываем лог файл из которого Zabbix будет брать данные. Лог файл должен иметь определённый формат, его подготовит snmptt.
/etc/zabbix/zabbix_server.conf
StartSNMPTrapper=1 SNMPTrapperFile=/var/log/zabbix/zabbix_traps.tmp
Перезапускам Zabbix.
systemctl restart zabbix-server
Настройка «Узел сети» в Zabbix
Настраиваем наш «Узел сети» в Zabbix с которого будем получать SNMP TRAP.
В данном случае это АТС Avaya (Nortel) CS1000E.
Создаём «Элемент данных».
Тип: | SNMP Trap |
Ключ: | snmptrap.fallback |
Тип информации: | Журнал (лог) |
Формат времени в журнале (логе): | hh:mm:sszyyyy/MM/dd |
Настройка snmptrapd
Отключаем авторизацию (на ваше усмотрение) и настраиваем обработчик SNMP TRAP событий, в нашем случае snmptt.
/etc/snmp/snmptrapd.conf
disableAuthorization yes traphandle default /usr/sbin/snmptthandler mib :all
Настройка snmptt
Указываем путь к временному файлу, в который snmptt будет писать подготовленные данные для Zabbix. Настраиваем формат даты и времени.
/etc/snmp/snmptt.ini
net_snmp_perl_enable = 1 log_file = /var/log/zabbix/zabbix_traps.tmp date_time_format = %H:%M:%S %Y/%m/%d
Незабываем настроить logrotate для zabbix_traps.tmp.
/etc/logrotate.d/snmptt
/var/log/zabbix/zabbix_traps.tmp { weekly rotate 12 compress delaycompress missingok notifempty create 0664 snmptt snmptt }
Настраиваем правила по умолчанию преобразования SNMP TRAP
Полученные от snmptrapd трапы преобразуем в понятный Zabbix формат.
Т.к. мы ещё не знаем какие, в каком виде и с каких OID’ов будут приходить TRAP’ы, настроим правило преобразования по умолчанию. Далее, проанализируем полученные TRAP’ы и настроим более детальное преобразование, которое будет удобно читать человеку.
/etc/snmp/snmptt.conf
Правило преобразования по умолчанию.
EVENT general .* "General event" Normal FORMAT ZBXTRAP $ar "$N" $+*
Запускаем сервисы
systemctl start snmptt systemctl enable snmptt systemctl start snmptrapd systemctl enable snmptrapd
Проверяем работоспособность
И так, мы всё настроили. Теперь отправим с нашего оборудования TRAP (в моём случае Avaya CS1000E версии 7.65) и посмотрим в каком формате он придёт и как отобразится в логах и в Zabbix.
Отправился TRAP с информацией об удачном сохранении конфигурации АТС.
Смотрим как TRAP отображается в Zabbix
Как видно, в этом TRAP’е много лишней информации, которая нам не нужна и только мешает анализу происходящий событий.
Создадим в snmptt правило преобразования, которое уберёт лишние данные.
Настройка правила преобразования snmptt
Нам нужно понять, какие и откуда (из каких полей) получить данные. Для этого посмотрим «сырые данные» SNMP TRAP’а.
Анализ «сырых данных» SNMP TRAP’а
Анализируем лог файл для Zabbix подготовленный snmptt.
/var/log/zabbix/zabbix_traps.tmp
18:18:15 2018/07/28 .1.3.6.1.4.1.562.3.10.10.1.0.5 Normal "General event" 10.0.1.2 - ZBXTRAP 10.0.1.2 "general" enterprises.562.3.10.10.2.1.0:323 enterprises.562.3.10.10.2.2.0:07 E2 07 1C 12 12 0F 00 00 enterprises.562.3.10.10.2.3.0:5 enterprises.562.3.10.10.2.4.0:Navigation System Name:Navigation Site Name:CS enterprises.562.3.10.10.2.5.0:0 enterprises.562.3.10.10.2.6.0:10.0.1.2enterprises.562.3.10.10.2.7.0:TEMU207 enterprises.562.3.10.10.2.8.0:8 enterprises.562.3.10.10.2.9.0:202 enterprises.562.3.10.10.2.10.0:Backup process to local Removable Media Device ended successfully.
Приведём это к более читаемому виду:
18:18:15 2018/07/28 .1.3.6.1.4.1.562.3.10.10.1.0.5 Normal "General event" 10.0.1.2 - ZBXTRAP 10.0.1.2 "general" enterprises.562.3.10.10.2.1.0:323 enterprises.562.3.10.10.2.2.0:07 E2 07 1C 12 12 0F 00 00 enterprises.562.3.10.10.2.3.0:5 enterprises.562.3.10.10.2.4.0:Navigation System Name:Navigation Site Name:CS enterprises.562.3.10.10.2.5.0:0 enterprises.562.3.10.10.2.6.0:10.0.1.2 enterprises.562.3.10.10.2.7.0:TEMU207 enterprises.562.3.10.10.2.8.0:8 enterprises.562.3.10.10.2.9.0:202 enterprises.562.3.10.10.2.10.0:Backup process to local Removable Media Device ended succfully.
Нас интересует:
- OID с которого отправляется TRAP.
- Строка 2: «.1.3.6.1.4.1.562.3.10.10.1.0.5»
- Сообщение об ошибке или информационное сообщение от АТС в TRAP’е.
- Строка 9: «TEMU207»
- Описание этой ошибки или сообщения.
- Строка 12: «Backup process to local Removable Media Device ended succfully.»
Создание правил преобразования
Данные из OID записываются в переменные и далее мы уже оперируем переменными.
/etc/snmp/snmptt.conf
# Events for Avaya (Nortel) CS1000 EVENT general .1.3.6.1.4.1.562.3.10.10.1.0.* "CS1000 event" Normal MATCH $7: !(AUD000|TIM000) FORMAT ZBXTRAP $ar $7$Fn$10 EXEC /etc/snmp/trapemail "$7" "$10" "$x" "$X"
Рассмотрим подробнее:
Строка 3 «EVENT»: OID с которого получаем TRAP. Мы его выяснили выше, но вместо цифры 5 в конце OID’а, ставим * (это wildcard), т.к. с АТС могут приходить OID’ы и с другими цифрами в конце (например 3).
Значение этих цифр смотрим тут: http://www.mibdepot.com/cgi-bin/getmib3.cgi?win=mib_a&i=1&n=COMMON-TRAP-MIB&r=avaya&f=COMMON-TRAP-MIB.mib&v=v1&t=def#AlarmSeverity
Строка 4 «MATCH»: MATCH позволяет организовать фильтрацию. В данном случае, фильтр настроен игнорировать TRAP’ы в которых присутствуют сообщения «AUD000» или «TIM000» (конструкция: !(AUD000|TIM000)) в переменной $7.
Эти информационные сообщения достаточно часто приходят от АТС. Они информируют нас, что с АТС всё хорошо и ни какой полезной нагрузки не несут. Нет нужды хранить их в Zabbix или получать с ними оповещения на E-mail.
Строка 4 «FORMAT»: Описываем в каком формате будет записываться информация в лог. Тут как раз и настраиваем хранение в логе только нужной нам информации.
- ZBXTRAP — слово необходимое Zabbix, что бы он понял, что эта запись в логе для него.
- $ar — переменная с IP адресом узла с которого отправляется TRAP. По этому IP, Zabbix понимает к какому «Узлу сети» относится TRAP.
- $7 — переменная, в ней записано «TEMU207»
- $Fn — перевод строки
- $10 — переменная, в ней хранится «Backup process to local Removable Media Device ended succfully.»
Строка 5 «EXEC»: Запускам внешний скрипт и передаём ему атрибуты. В данном случае это скрипт для отправки TRAP’а на E-Mail (о нём ниже), но может быть и другой скрипт, например записи TRAP’ов в базу данных.
Подробнее по всем параметры в документации: http://snmptt.sourceforge.net/docs/snmptt.shtml
Перезапускам сервис snmptt.
systemctl restart snmptt
Результаты настройки правил snmptt
Отправляем новый TRAP с оборудования и смотрим на результаты.
/var/log/zabbix/my_zabbix_traps.tmp
17:24:47 2018/07/28 .1.3.6.1.4.1.562.3.10.10.1.0.5 Normal "CS1000 event" 10.0.1.2 - ZBXTRAP 10.0.1.2 TEMU207 Backup process to local Removable Media Device ended successfully.
Как видно, в логе который анализирует Zabbix, осталась только нужная информация.
А вот как эта информация выглядит в Zabbix.
После того как убрали «мусор», стало куда более наглядно и понятно.
Отправка TRAP’а на E-mail
Каждый раз, когда приходит TRAP, snmptt используя функция EXEC запускает данный скрипт и скрипт, используя утилиту ssmtp отправляет оповещение на E-mail.
Настройка ssmtp
/etc/ssmtp/ssmtp.conf
# Адрес почтового сервера # У меня поднят локальный сервер Exim mailhub=127.0.0.1 ... # Разрешаем перезаписывать поле From FromLineOverride=YES
Скрипт отправки на E-mail
/etc/snmp/trapemail
#/bin/bash echo "To: alarm@domain.ru" > /tmp/traptomail.txt echo "From: CS1000 <cs1000@domain.ru>" >> /tmp/traptomail.txt echo "MIME-Version: 1.0" >> /tmp/traptomail.txt echo "Content-Type: text/html; charset=utf-8" >> /tmp/traptomail.txt echo "Subject: $1 [$3 $4]" >> /tmp/traptomail.txt echo " " >> /tmp/traptomail.txt echo "<code>" >> /tmp/traptomail.txt echo "$1" >> /tmp/traptomail.txt echo "$2" >> /tmp/traptomail.txt echo "</code>" >> /tmp/traptomail.txt ssmtp -t < /tmp/traptomail.txt
Присваиваем скрипту права на исполнение.
chmod 777 /etc/snmp/trapemail
Результат работы скрипта
Сообщение в почте.
Ссылки
- Документация snmptt: http://snmptt.sourceforge.net
- Документация snmptrapd: http://net-snmp.sourceforge.net/docs/man/snmptrapd.html
- mibDepot (A Free SNMP MIB Search Engine for SNMP MIBs): http://www.mibdepot.com
Похожие записи...
Latest posts by Андрей Торженов (see all)
- Куда переходить с Helpdesk OTRS? Альтернативы OTRS - 27/02/2022
- Windows 11. Не работает обновление, не входит в OneDrive, OneNote и другие Microsoft сервисы - 29/01/2022
- Попытка взлома Mikrotik? - 24/12/2021
- После обновления до Proxmox 7.1 не запускаются виртуальные машины - 28/11/2021
- libflashplayer.so пропатченный от Time bomb - 11/02/2021