SNMP TRAP отправка на E-mail и интеграция с Zabbix

Автор: Андрей Торженов

Инструкция по настройке интеграции Zabbix с SNMP TRAP и отправке TRAP’ов на E-Mail

Инструкция по настройке интеграции 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

Принцип работу

  1. Утилита snmptrapd (из пакета net-snmp) получает TRAP от устройства и запускает обработчик TRAP’ов — snmptt.
  2. snmptt обрабатывает полученный TRAP:
    • Фильтрует полученные данные (не все трапы мы хотим сохранять в Zabbix и отправлять на E-mail);
    • Переводит TRAP в формат понятный Zabbix и сохраняет в файл (который в дальнейшем анализирует Zabbix);
    • Выполняет внешний скрипт для отправки TRAP’а на E-mail.
  3. Внешний скрипт, с помощью утилиты 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.

Создаём «Элемент данных».

Элемент данный Zabbix для получения SNMP TRAP

Элемент данный Zabbix для получения SNMP TRAP

Тип: 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

Zabbix. Смотрим SNMP TRAP'ы в меню "Последние данные"

Zabbix. Смотрим SNMP TRAP’ы в меню «Последние данные»

Как видно, в этом 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.

Нас интересует:

  1. OID с которого отправляется TRAP.
    • Строка 2: «.1.3.6.1.4.1.562.3.10.10.1.0.5»
  2. Сообщение об ошибке или информационное сообщение от АТС в TRAP’е.
    • Строка 9: «TEMU207»
  3. Описание этой ошибки или сообщения.
    • Строка 12: «Backup process to local Removable Media Device ended succfully.»

Создание правил преобразования

Данные из OID записываются в переменные и далее мы уже оперируем переменными.

SNMP OID и переменные

SNMP 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.

Zabbix. Смотрим SNMP TRAP’ы в меню «Последние данные»

Zabbix. Смотрим SNMP TRAP’ы в меню «Последние данные»

После того как убрали «мусор», стало куда более наглядно и понятно.

Отправка 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

Результат работы скрипта

Сообщение в почте.

TRAP в E-Mail

TRAP в E-Mail

Ссылки

The following two tabs change content below.
В профессиональной сфере занимаюсь всем, что связанно с IT. Основная специализация - VoIP и сети передачи данных. Стараюсь не заниматься Windows серверами (но иногда приходится) и 1С.

Добавить комментарий