Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

3 SNMP трапы

Обзор

Получение SNMP трапов является полной противоположностью запросам к SNMP устройствам.

В этом случае информация отправляется с SNMP устройства и собирается или "ловится" Zabbix'ом.

Обычно трапы отправляются при наступлении некоторых условий и агент подключается на 162 порт сервера (в отличии от 161 порта на стороне агента, который используется для запросов). Использование трапов может помочь обнаружить некоторые кратковременные проблемы, которые происходят между интервалами опроса и могут быть пропущены при запросах данных.

Получение SNMP трапов в Zabbix рассчитано на работу с snmptrapd и с одним из встроенных механизмов передачи трапов в Zabbix - либо bash / perl скрипты, либо SNMPTT.

Самым простым способом настроить мониторинг трапов после настройки Zabbix это использовать решение на основе Bash скрипта, так как Perl и SNMPTT зачастую отсутствуют в современных дистрибутивах и требуют более сложной настройки. Однако, это решение использует скрипт, который настраивается в виде traphandle. Для повышения производительности в производственных системах используйте встроенное решение Perl (либо скрипт с do perl опцией, либо SNMPTT).

Последовательность действий при получении трапа:

  1. snmptrapd получает трап
  2. snmptrapd передает трап скрипту получателю (Bash, Perl) или SNMPTT
  3. Получатель разбирает, форматируют и записывает трап в файл
  4. Zabbix SNMP траппер читает и анализирует файл с трапами
  5. Zabbix ищет все соответствующие элементы данных с типом "SNMP трап" на интерфейсах узлов сети по каждому трапу, которые совпадают с полученным адресом из трапа. Возьмите на заметку, только выбранный "IP" или "DNS" у интерфейса узла сети используется в процессе поиска соответствия.
  6. По каждому найденному элементу данных, трап сравнивается с регулярными выражениями snmptrap\[регулярное выражение\]. Если совпадение найдено, трап записывается значением для всех совпавших элементов данных. Если совпадений не найдено, но существует элемент данных snmptrap.fallback, трап записывается значением для этого элемента данных.
  7. Если трап не задан значением какому либо элементу данных, Zabbix по умолчанию журналирует не совпавшие трапы. (Это поведение настраивается в "Журналировать не совпадающие SNMP трапы" в Администрирование → Общие → Прочие).

1 Настройка SNMP трапов

Настройка следующих полей в веб-интерфейсе является специфичной для этого типа элементов данных:

  • Ваш узел сети должен иметь SNMP интерфейс

В Настройка → Узлы сети, в поле Интерфейсы узла сети добавьте SNMP интерфейс с корректными IP или DNS адресами. Адрес из каждого полученного трапа сравнивается с IP и DNS адресами всех SNMP интерфейсов для поиска подходящих узлов сети.

  • Настройка элемента данных

В поле Ключ используйте один из ключей SNMP трапов:

Ключ
Описание Возвращаемое значение Комментарии
snmptrap[регулярное выражение]
Отлов всех SNMP трапов , который соответствуют регулярному выражению, указанном в поле регулярное выражение. Если регулярное выражение не указано, принимаются все трапы. SNMP трап Этот элемент данных можно привязать только к SNMP интерфейсам.
В параметре этого ключа элемента данных поддерживаются пользовательские макросы и глобальные регулярные выражения.
snmptrap.fallback
Отлов всех SNMP трапы, которые не соответствуют ни одному из элементов данных snmptrap[] для этого интерфейса. SNMP трап Такой элемент данных можно привязать только к SNMP интерфейсам.

Многострочное совпадение по регулярному выражению в данный момент времени не поддерживается.

Укажите Тип информации значением 'Журнал (лог)' для обработки штампов времени. Обратите внимание, что другие форматы, такие как 'Числовой' также приемлемы, но для этого может потребоваться пользовательский обработчик трапов.

Для того чтобы мониторинг SNMP трапов работал, он должен быть сначала корректно настроен.

Настройка мониторинга SNMP трапов

Настройка Zabbix сервера/прокси

Для чтения трапов, Zabbix сервер или прокси должны быть настроены на запуск процесса SNMP траппера, а также должны знать абсолютный путь к файлу с трапами, который заполняется при помощи SNMPTT или получателя трапов Bash / Perl. Чтобы это сделать, измените файл конфигурации (zabbix_server.conf или zabbix_proxy.conf):

StartSNMPTrapper=1
       SNMPTrapperFile=[ФАЙЛ С ТРАПАМИ]

Если используется systemd параметр PrivateTmp, этот файл вряд ли заработает в /tmp.

Настройка получателя трапов Bash

Требования: только snmptrapd.

Можно использовать Bash скрипт получателя трапов для передачи трапов Zabbix серверу напрямую с snmptrapd. Чтобы его настроить, добавьте опцию traphandle в файл конфигурации (snmptrapd.conf) snmptrapd, смотрите пример.

Настройка SNMPTT

Для начала, snmptrapd необходимо настроить на использование SNMPTT.

Для извлечения лучшей производительности, SNMPTT необходимо сконфигурировать демоном с использованием snmptthandler-embedded для передачи ему трапов. Смотрите инструкции по настройке SNMPTT.

Когда SNMPTT настроек на получение трапов, настройте snmptt.ini:

  1. включите использование модуля Perl из NET-SNMP пакета:

    net_snmp_perl_enable = 1

  2. включите журналирование трапов в файл с трапами, который Zabbix будет читать:

    log_enable = 1 log_file = [ФАЙЛ С ТРАПАМИ]

  3. задайте формат времени/даты:

    date_time_format = %H:%M:%S %Y/%m/%d = [ФОРМАТ ВРЕМЕНИ]

Пакет "net-snmp-perl" удален в RHEL/CentOS 8.0-8.2; добавлен заново в RHEL 8.3. Для получения более подробной информации смотрите известные проблемы.

Теперь задайте формат трапов, чтобы они распознавались Zabbix (измените snmptt.conf):

  1. Каждая инструкция FORMAT должна начинаться с "ZBXTRAP [адрес]", где [адрес] будет сравниваться с IP и DNS адресами у SNMP интерфейсов в Zabbix. Например:

    EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal FORMAT ZBXTRAP $aA Device reinitialized (coldStart)

  2. Подробнее о формате SNMP трапов смотрите ниже.

Не используйте неизвестные трапы - Zabbix может их не распознать. Неизвестные трапы могут быть обработаны, если задать общее событие в snmptt.conf:

EVENT general .\* "General event" Normal
Настройка получателя Perl трапов

Требования: Perl, Net-SNMP скомпилированный с --enable-embedded-perl (компилируется по умолчанию начиная с Net-SNMP 5.4)

Получатель трапов Perl (ищите в misc/snmptrap/zabbix_trap_receiver.pl) можно использовать для передачи трапов Zabbix серверу напрямую с snmptrapd. Для его настройки:

  • добавьте Perl скрипт в файл конфигурации snmptrapd (snmptrapd.conf), Например:

    perl do "[ПОЛНЫЙ ПУТЬ К СКРИПТУ ПОЛУЧАТЕЛЯ PERL]";

  • настройте сам получатель, например:

    $SNMPTrapperFile = '[ФАЙЛ С ТРАПАМИ]'; $DateTimeFormat = '[ФОРМАТ ДАТЫ/ВРЕМЕНИ]';

Если имя скрипта не заключено в кавычки, snmptrapd откажется запускаться с сообщениями наподобие этих:

Regexp modifiers "/l" and "/a" are mutually exclusive at (eval 2) line 1, at end of line
       Regexp modifier "/l" may not appear twice at (eval 2) line 1, at end of line
Формат SNMP трапа

Все заданные получатели трапов perl и конфигурация SNMPTT трапов должны форматировать трап следующим образом:

[штамп времени] [трап, часть 1] ZBXTRAP [адрес] [трап, часть 2]

где

  • [штамп времени] - штамп времени используемый в элементах данных типа 'Журнал (лог)'
  • ZBXTRAP - заголовок, который указывает, что с этой строки начался новый трап
  • [адрес] - IP адрес, используемый для поиска узла сети для этого трапа

Обратите внимание, что "ZBXTRAP" и "[адрес]" при обработке отрезаются из сообщения. Если трап форматируется как-то иначе, Zabbix может разобрать такие трапы неожиданным образом.

Пример трапа:

11:30:15 2011/07/27 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events" localhost - ZBXTRAP 192.168.1.1 Link down on interface 2. Admin state: 1. Operational state: 2

Что приведет к следующему виду трапа для SNMP интерфейса с IP=192.168.1.1:

11:30:15 2011/07/27 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events" localhost - Link down on interface 2. Admin state: 1. Operational state: 2

Требования к системе

Поддержка больших файлов

У Zabbix имеется "поддержка больших файлов" при работе с файлами SNMP трапов. Максимальный размер файла, который Zabbix может прочитать, это 2^63 (8 Эбайт). Обратите внимание, что файловая система может иметь меньшее ограничение на максимальный размер файлов.

Ротация журнала

Zabbix не предоставляет какую-либо систему ротации журналов - это должно быть обеспечено пользователем. Ротация журналов должна начинаться с переименовывания старого файла и только после этого удаления, чтобы никакие трапы не пропали:

  1. Zabbix открывает файл с трапами с последней известной позиции и переходит к 3 шагу.
  2. Zabbix проверяет была ли выполнена ротация открытого в данный момент файла, сравнивая номера inode с заданным у файла трапов номером inode. Если открытого файла нет, Zabbix сбрасывает последнюю позицию и переходит к 1 шагу.
  3. Zabbix читает данные из открытого в данный момент файла и устанавливает новую позицию.
  4. Обрабатываются новые данные. Если этот файл был ротирован, то он закрывается и Zabbix переходит назад ко 2 шагу.
  5. Если не было новых данных, Zabbix засыпает на 1 секунду и возвращается ко 2 шагу.
Файловая система

Из-за реализации файла с трапами, для Zabbix требуется файловая система с поддержкой inode для того чтобы различать файлы (эта информация берется из вызова stat()).

Примеры настройки с использованием разных версий SNMP протоколов

Этот пример использует snmptrapd и Bash скрипт получателя для передачи трапов Zabbix серверу.

Настройка:

  1. Настройте Zabbix, чтобы запускался SNMP траппер и укажите файл с трапами. Добавьте в zabbix_server.conf:

    StartSNMPTrapper=1 SNMPTrapperFile=/tmp/my_zabbix_traps.tmp

  2. Загрузите Bash скрипт в /usr/sbin/zabbix_trap_handler.sh:

    curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/6.2/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh

При необходимости настройте ZABBIX_TRAPS_FILE переменную в скрипте. Для использования значения по умолчанию создайте сначала родительскую директорию:

mkdir -p /var/lib/zabbix/snmptraps
  1. Добавьте в snmtrapd.conf следующее (смотрите рабочий пример)

    traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh

  2. Создайте SNMP элемент данных TEST:

    SNMP интерфейс узла сети с IP: 127.0.0.1 Ключ: snmptrap["linkup"] Формат времени в журнале (логе): yyyyMMdd.hhmmss

  3. Далее мы настроим snmptrapd на выбранную нами версию SNMP протокола и отправим тестовые трапы, используя snmptrap утилиту.

SNMPv1, SNMPv2

Протоколы SNMPv1 и SNMPv2 полагаются на аутентификацию по "community строке". В примере ниже мы будем использовать "secret" как community строку. У отправителей SNMP трапов необходимо указать такое же значение.

Обратите внимание, хоть SNMPv2 всё еще широко используется в производственных средах, он не предлагает какое либо шифрование и действительной аутентификации отправителя. Так как данные отправляются в виде обычного текста, следовательно, эти версии протоколов можно использовать только в безопасных средах, таких как приватные частные сети, и никогда не использовать в какой-либо общедоступной или в сторонних сетях.

SNMP версии 1 в настоящее время практически не используется, так как не поддерживает 64-битные счетчики и считается устаревшим протоколом.

Чтобы включить прием SNMPv1 или SNMPv2 трапов, вам необходимо добавить следующую строку в snmptrapd.conf. Замените "secret" на значение строки SNMP community указанное в отправителях SNMP трапов:

authCommunity log,execute,net secret

Далее мы можем отправить тестовый трап, используя команду snmptrap. В этом примере мы будем использовать типовой OID "link up":

snmptrap -v 2c -c secret localhost 0 linkUp.0
SNMPv3

SNMPv3 решает проблемы безопасности SNMPv1/v2 и обеспечивает аутентификацию и шифрование. Вы можете использовать как SHA, так и MD5 методами аутентификации и AES или DES шифраторами.

Чтобы включить прием SNMPv3 добавьте следующие строки в snmptrapd.conf:

createUser -e 0x8000000001020304 traptest SHA mypassword AES
       authuser log,execute traptest

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

# snmptrap -v 3 -n "" -a SHA -A mypassword -x AES -X mypassword -l authPriv -u traptest -e 0x8000000001020304 localhost 0 linkUp.0

Если вы желаете использовать надежные методы шифрования, такие как AES192 или AES256, пожалуйста, используйте net-snmp начиная с версии 5.8. Вам, возможно, потребуется пересобрать его с опцией configure: --enable-blumenthal-aes. Более старые версии net-snmp не поддерживают AES192/AES256. Смотрите также: http://www.net-snmp.org/wiki/index.php/Strong_Authentication_or_Encryption

Проверка настройки

В обоих примерах в вашем /var/lib/zabbix/snmptraps/snmptraps.log вы увидите похожие строки:

20220805.102235 ZBXTRAP 127.0.0.1
       UDP: [127.0.0.1]:35736->[127.0.0.1]:162
       DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
       SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0

Значение элемента данных в Zabbix будет:

2022-08-05 10:54:43 2022-08-05 10:54:41 
       
       20220805.105441 UDP: [127.0.0.1]:44262->[127.0.0.1]:162
       DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
       SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0

Смотрите также