Всем привет! Мы делаем проекты по Zabbix, накопили большую экспертизу и решили сделать переводы нескольких статей, которые нам показались интересными и полезными. Наверняка, будут полезны и вам. Также своим опытом делимся в телеграм-канале zabbix_ru, где вы можете найти полезные материалы и записи наших вебинаров, опубликованных на нашем ютуб-канале (прим. переводчика). Ниже ссылки на предыдущие статьи из цикла.

Миграция с MySQL на PostgreSQL

SELinux: интеграция с Zabbix и другими инструментами

Защита от ложных срабатываний триггеров в Zabbix с использованием функций min/max/avg

Zabbix – автоматизация управления пользователями (JIT)

Двухфакторная аутентификация (2FA) в Zabbix 7.0

В этой статье мы покажем вам, как настроить прием SNMP-трапов в Zabbix в операционной системе RHEL 9, как для SNMPv2, так и для SNMPv3! Этот процесс идентичен как для Zabbix Server, так и для Zabbix Proxy, и в случае использования HA его необходимо повторить на всех узлах кластера.

Установка дополнительных компонентов

Для настройки приёма SNMP-трапов необходимо установить на сервер следующие пакеты:

  • net-snmp (основной пакет, содержащий все необходимые бинарные файлы и библиотеки)

  • net-snmp-perl (модуль Perl для SNMP)

  • net-snmp-utils (инструменты в основном для отладки — опционально)

dnf install net-snmp-utils net-snmp-perl net-snmp

Настройка приема SNMP-трапов на уровне ОС

Сначала загрузите скрипт Perl для получения SNMP-трапов и отправки данных в Zabbix из официального репозитория Zabbix.

curl -o /usr/bin/zabbix_trap_receiver.pl https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/misc/snmptrap/zabbix_trap_receiver.pl

Затем сделайте этот скрипт исполняемым:

chmod +x /usr/bin/zabbix_trap_receiver.pl

Далее необходимо настроить этот скрипт — открыть его:

nano /usr/bin/zabbix_trap_receiver.pl

Здесь задайте переменную $SNMPTrapperFile, которая указывает, где будет храниться файл с принятыми SNMP-трапами.

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

В нашем случае это будет файл /var/log/snmptrap/snmptrap.log.

### Option: SNMPTrapperFile
#       Temporary file used for passing data to the server (or proxy). Must be the same
#       as in the server (or proxy) configuration file.
#
# Mandatory: yes
# Default: /tmp/zabbix_traps.tmp
$SNMPTrapperFile = '/var/log/snmptrap/snmptrap.log';

Создайте эту папку, затем:

mkdir /var/log/snmptrap

Настройки SNMP

После настройки скрипта для получения SNMP-трапов и отправки данных в Zabbix, далее необходимо настроить демон snmptrapd.

Откройте файл конфигурации /etc/snmp/snmptrapd.conf:

nano /etc/snmp/snmptrapd.conf

Ниже вы можете увидеть пример конфигурации для SNMPv1, SNMPv2 и SNMPv3, включая упомянутый выше сценарий (вы можете определить более одного сообщества SNMP).

Внимание: строка, содержащая вызов скрипта Perl для SNMP-трапов, должна быть самой последней строкой в ​​этом конфигурационном файле!

Внимание: минимальная длина пароля для SNMPv3 должна быть не менее 8 символов, в нашем примере пароль: %Password123%.

#SNMPv3
createUser -e 0x800000020109840301 monitoring SHA512 zabbix_trap AES256 %Password123%
authUser execute monitoring

#SNMPv1,2
authCommunity execute initmax

#Zabbix SNMP trap receiver
perl do "/usr/bin/zabbix_trap_receiver.pl";

Настройте ротацию лога для файла snmptrap.log

Создайте файл конфигурации logrotate:

nano /etc/logrotate.d/snmptrap

Здесь настройте следующие параметры:

/var/log/snmptrap/snmptrap.log {
    weekly
    rotate 12
    compress
    delaycompress
    missingok
    notifempty
}

Включить порт SNMP в брандмауэре (необязательно)

Используйте следующие команды для добавления порта 162/UDP в качестве исключения брандмауэра:

firewall-cmd --permanent --add-service=snmptrap
firewall-cmd --reload

Применение конфигурации приема SNMP-трапов

Выполните следующие команды, чтобы перезапустить службу snmptrapd и включить ее работу после загрузки системы.

systemctl restart snmptrapd
systemctl enable snmptrapd

Остановите ненужные услуги

Если вы не хотите контролировать сервер с помощью SNMP, вы можете остановить и отключить службу snmpd.

Это не влияет на процесс сбора и отправки настроенных SNMP-трапов в Zabbix.

systemctl disable snmpd --now

Теперь вы успешно завершили настройку сбора трапов SNMP и можете перейти к настройке самого Zabbix.

Конфигурация Zabbix сервера

Сначала включите обработку SNMP-трапов и укажите путь к файлу с собранными трапами.

Откройте файл конфигурации Zabbix сервера /etc/zabbix/zabbix_server.conf:

nano /etc/zabbix/zabbix_server.conf

Отредактируйте здесь следующие параметры конфигурации и сохраните файл.

### Option: SNMPTrapperFile
#       Temporary file used for passing data from SNMP trap daemon to the server.
#       Must be the same as in zabbix_trap_receiver.pl or SNMPTT configuration file.
#
# Mandatory: no
# Default:
# SNMPTrapperFile=/tmp/zabbix_traps.tmp

SNMPTrapperFile=/var/log/snmptrap/snmptrap.log

### Option: StartSNMPTrapper
#       If 1, SNMP trapper process is started.
#
# Mandatory: no
# Range: 0-1
# Default:
# StartSNMPTrapper=0

StartSNMPTrapper=1

Чтобы применить измененные параметры конфигурации, перезапустите Zabbix сервер:

systemctl restart zabbix-server

Настройка Zabbix Proxy (необязательно)

Если вы настраиваете Zabbix Proxy, процедура точно такая же.

Единственное отличие состоит в том, что те же самые параметры конфигурации будут изменены в файле конфигурации прокси-сервера Zabbix в /etc/zabbix/zabbix_proxy.conf:

nano /etc/zabbix/zabbix_proxy.conf

Здесь измените параметры конфигурации StartSNMPTrapper и SNMPTrapperFile так же, как и для сервера Zabbix:

### Option: SNMPTrapperFile
#       Temporary file used for passing data from SNMP trap daemon to the proxy.
#       Must be the same as in zabbix_trap_receiver.pl or SNMPTT configuration file.
#
# Mandatory: no
# Default:
# SNMPTrapperFile=/tmp/zabbix_traps.tmp

SNMPTrapperFile=/var/log/snmptrap/snmptrap.log

### Option: StartSNMPTrapper
#       If 1, SNMP trapper process is started.
#
# Mandatory: no
# Range: 0-1
# Default:
# StartSNMPTrapper=0

StartSNMPTrapper=1

После этого следует перезапуск службы Zabbix Proxy:

systemctl restart zabbix-proxy

Вы завершили всю настройку сбора SNMP-трапов, осталось только протестировать функционал и применить сбор этих данных в Zabbix.

Тестирование конфигурации с помощью CLI

Отправьте тестовый трап SNMPv2 (имитацию «linkDown») с помощью следующей команды:

snmptrap -v 2c -c initmax localhost '' SNMPv2-MIB::snmpMIB IF-MIB::linkDown  s eth0

Проверить, что SNMP-трап был отправлен ​​правильно, можно в созданном файле с SNMP-трапами по следующему пути /var/log/snmptrap/snmptrap.log:

tail -n15 /var/log/snmptrap/snmptrap.log

Чтобы дать представление о том, как выглядит вывод непосредственно в логе, вот пример:

2024-02-10T00:53:43+0100 ZBXTRAP 127.0.0.1
PDU INFO:
  notificationtype               TRAP
  errorstatus                    0
  transactionid                  9
  version                        1
  errorindex                     0
  community                      public
  requestid                      1092987547
  receivedfrom                   UDP: [127.0.0.1]:32856->[127.0.0.1]:162
  messageid                      0
VARBINDS:
  DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (2804608) 7:47:26.08
  SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: SNMPv2-MIB::snmpMIB
  IF-MIB::linkDown               type=4  value=STRING: "eth0"

Отправка SNMPv3-трапа немного сложнее. Тестовая команда, имитирующая «linkDown» сетевого адаптера для SNMPv3, выглядит следующим образом. Не забудьте адаптировать настройки SNMP к конкретному устройству или настройкам локальной инфраструктуры.

snmptrap -v3 -umonitoring -lauthPriv -aSHA512 -Azabbix_trap -xAES256 -X%Password123% -e0x800000020109840301 localhost "" SNMPv2-MIB::snmpMIB IF-MIB::linkDown s eth1

Затем вы сможете найти вывод в файле /var/log/snmptrap/snmptrap.log:

tail -n20 /var/log/snmptrap/snmptrap.log

Пример вывода для SNMP-трапа версии 3 можно увидеть ниже:

2024-02-10T01:11:42+0100 ZBXTRAP 127.0.0.1
PDU INFO:
  contextName
  errorstatus                    0
  notificationtype               TRAP
  securitylevel                  3
  requestid                      1877627576
  version                        3
  securityName                   monitoring
  transactionid                  1
  securitymodel                  3
  errorindex                     0
  messageid                      653771479
  contextEngineID                0x80001f888081e0634397b4c66500000000
  receivedfrom                   UDP: [127.0.0.1]:53391->[127.0.0.1]:162
  securityEngineID               0x800000020109840301
VARBINDS:
  DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (2912564) 8:05:25.64
  SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: SNMPv2-MIB::snmpMIB
  IF-MIB::linkDown               type=4  value=STRING: "eth1"

Мы намеренно отправляем тестовые команды на другой сетевой интерфейс для SNMPv2 (eth0) и SNMPv3 (eth1), чтобы их можно было легко отличить друг от друга.

Теперь мы можем перейти к настройке хоста и созданию шаблона для мониторинга с помощью SNMP в Zabbix.

Конфигурация в Zabbix

Сначала необходимо подготовить выбранный хост для мониторинга с использованием SNMP в Zabbix. Это можно сделать, добавив к нему интерфейс SNMP и установив правильный IP-адрес и порт для этого интерфейса. В нашей тестовой конфигурации мы будем использовать localhost и порт по умолчанию 161 для мониторинга. SNMP-community (переменная {$SNMP_COMMUNITY}) необходимо адаптировать для стандартного мониторинга SNMP.

Для SNMP-трапа community проверяется на уровне конфигурационного файла демона snmptrapd в/etc/snmp/snmptrapd.conf. Но не это не отменяет того, что community также необходимо учесть в настройках самого Zabbix. Сделать это можно глобально, в разделе Administration -> Macros, или локально на уровне хоста — во вкладке Macros. Однако вы также можете внести это изменение только на уровне созданного интерфейса SNMP, как показано на рисунке ниже.

Сохраните настройки хоста, и теперь вы готовы начать мониторинг с использованием SNMP.

Если вы хотите опробовать базовые функции SNMP, мы подготовили пример шаблона для Zabbix 6.0 и более поздних версий, который вы можете скачать по ссылке ниже.

Пример шаблона для приема SNMP-трапов для Zabbix 6.0+ можно загрузить здесь: zabbix_snmptrap_example_template.xml.

Создание тестового элемента snmptrap.fallback (необязательно)

Элемент типа fallback в первую очередь используется для захвата всех сообщений SNMP, которые ранее не были захвачены каким-либо другим конкретным элементом в шаблоне.

Поэтому сначала мы создадим элемент такого типа — создадим новый шаблон, добавим в него новый элемент и настроим его как на изображении ниже.

Теперь попробуйте снова запустить уже использованную тестовую команду для SNMPv2, имитирующую linkDown на eth0:

snmptrap -v 2c -c initmax localhost '' SNMPv2-MIB::snmpMIB IF-MIB::linkDown  s eth0

В Zabbix в разделе Monitoring -> Latest data проверьте на тестовом хосте, что данные поступили корректно.

Здесь видно, что тестовые данные действительно пришли корректно. Сообщение имеет корректное SNMP-сообщество, исходный сервер действительно localhost, а данные сообщения содержат отправленную строку.

Теперь мы можем перейти к созданию конкретных элементов для отдельных отслеживаемых объектов.

Создание тестового элемента snmptrap (необязательно)

В новом шаблоне создайте новые элементы SNMP-ловушек, которые будут соответствовать тестовым командам из предыдущих шагов.

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

Вы можете клонировать второй элемент для тестовой команды на eth1 через SNMPv3 из вновь созданного элемента и изменить имя сетевого интерфейса на eth1 в регулярном выражении.

Сохраните конфигурацию шаблона и снова запустите две тестовые команды.

Для SNMPv2 на eth0:

snmptrap -v 2c -c initmax localhost '' SNMPv2-MIB::snmpMIB IF-MIB::linkDown  s eth0

В последних данных вы увидите, что на этот раз тест не обнаружил snmptrap.fallback, а обнаружил правильный элемент для этого интерфейса, который вы создали заранее.

И таким же образом проверим работоспособность второго элемента snmptrap для eth1. Еще раз выполните нашу тестовую команду для SNMPv3 для linkDown на интерфейсе eth1:

snmptrap -v3 -umonitoring -lauthPriv -aSHA512 -Azabbix_trap -xAES256 -X%Heslo123% -e0x800000020109840301 localhost "" SNMPv2-MIB::snmpMIB IF-MIB::linkDown s eth1

А в последних данных проверьте, что сообщение было успешно перехвачено с помощью этого элемента:

На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал zabbix_ru, где будет еще больше полезной информации.

Комментарии (2)


  1. hellp03
    10.12.2025 05:18

    Ничего не имею против initMAX, сам разбирался по их материалам с написанием виджетов для Zabbix.

    По поводу этой статьи, все понятно, не сильно отличается от оф. документации, но как я считаю, что здесь что в оф доке ни слова о том что масштабировать это решение, то еще приключение. Т.к. для одной железки все просто указал EngineID в snmptrapd.conf createUser -e 0x800000020109840301 и все хорошо.

    А если железка не одна а тысяча, а еще они периодически меняются. Тут конечно можно соорудить велосипед с костылями, добавить скрипт который по snmp например собирет со всех железок EngineID и запишет их в snmptrapd.conf все это запихнуть в крон, плюсом периодически перезагружать сервис который принимает трапы. Либо настроить не trap, а inform. Который не требует подтверждения, при этом нужно наоборот прописать EngineID сервера (и проксиков если оборудование мониторится с них) на оборудовании, но это как мне кажется проще автоматизировать и масштабировать.


  1. net_racoon
    10.12.2025 05:18

    ОМГ, они до сих порт не запилили нормальную поддержку трапов?