Ловушки SNMPv3 в Zabbix

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

Сказав это, я могу высказать свое мнение о сценарии. Так я бы написал эквивалентную вещь:

#!/bin/sh

day=$(date +'%u')
adir='/x/y'
bdir='/a/b'

case "$day" in
    5)  find "$adir" -type f -mtime -8 -name 'a[123]*' -exec cp {} "$bdir"/ ';'
        ;;
    *)  printf 'Error: Unhandled day "%s"\n' "$day" >&2
        exit 1
esac

Это просто использует тот факт, что различные имена, которые вы хотите сопоставить, могут сопоставляться с одним шаблоном подстановки имени файла. Он также не зависит от GNU cp, а его -tвариант (избавлен отxargs). И поскольку он не использует никаких «башизмов», его также можно интерпретировать как /bin/sh.

case... esacлегче читать (и писать ), чем набор if... then... elif.

1
27.11.2019, 09:17
1 ответ

То, как демон snmptrapd работает с ловушками, не позволяет получать какие-либо ловушки SNMPv3 без указания EngineID отправляющего устройства, т. е. если вы просто делаете следующее в /etc/snmp/snmptrapd.conf:

createUser snmpv3USER SHA auth_pass AES priv_pass
authUser log,execute snmpv3USER
perl do "/usr/bin/zabbix_trap_receiver.pl";

Вы никогда не получите ловушки SNMPv3 в файле /tmp/zabbix _traps.tmp, потому что usmUser, созданный внутри /var/lib/net -snmp/snmptrapd.conf, не соответствует фактическим требованиям, т.е. это..

Когда дело доходит до сообщений SNMPv3, большинство коммутаторов не могут их отправлять, поэтому мы застряли только с ловушками SNMPv3, а способ программирования snmptrapd работает только с идентификаторами EngineID для ловушек SNMPv3. Даже если я использую disableAuthorization yes в snmptrapd.conf, ловушки SNMPv3 не будут работать без EngineID для каждого отправляющего устройства, то есть устройства-коммутатора.

Теперь, чтобы получать ловушки SNMPv3, вам нужно получить все EngineID для всех коммутаторов, для этого я написал скрипт на Python, чтобы построить snmptrapd.conf с использованием SNMPv3, что является большим облегчением. Фактический файл имеет комментарий перед каждой строкой createUser, который показывает имя коммутатора и IP-адрес. Эта часть информации о ловушках SNMPv3 на самом деле упоминается в документации net -snmp, но когда я прочитал ее в первый раз, я не мог ее понять, потому что там написано The difference is that SNMPv3 TRAPs use the engineID of the local application sending the trap rather than the engineID of the remote application, поэтому, когда вы прочитаете ее в первый раз, вы будете сбиты с толку, но с немного концентрации становится очень ясно:

SNMPv3 TRAPs are a bit more complicated in some ways, but it makes sense the protocol works this way if you spend a long time thinking about it. The difference is that SNMPv3 TRAPs use the engineID of the local application sending the trap rather than the engineID of the remote application. This means that you have to create users in your remote user database with a bit more care and need to create one for every engineID you wish to send traps from. This means that if you want to have 100 snmp agents send snmpv3 traps to your trap receiver, you need 100 createUser directives in your /var/net-snmp/snmptrapd.conf file.

Файл /etc/snmp/snmptrapd.conf выглядит следующим образом:

createUser -e 0x800007c703609c9f1eff01 snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c703cc4e24e4c6c3 snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c703d4c19e743e86 snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c70378a6e10ca715 snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c70378a6e10c46f0 snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c70378a6e121bacd snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c70378a6e121b7d8 snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c703609c9f5136f4 snmpv3USER SHA auth_pass AES priv_pass

authUser log,execute snmpv3USER
perl do "/usr/bin/zabbix_trap_receiver.pl";

Файл намного длиннее, но теперь я могу получать все ловушки со всех коммутаторов. Я видел на stackoverflow, что у кого-то получилось с DES без использования EngineID, но это настоящая хрень, у меня никогда не работало ни для DES, ни для AES без EngineID.Это просто то, что было сделано на фоне другого программного обеспечения для мониторинга, которое ведет запись EngineID всех устройств для задачи приема ловушек.

Я также заметил, что ловушки от основного коммутатора поступают с виртуального интерфейса влана, на котором находится zabbix, поэтому мне пришлось модифицировать скрипт zabbix _trap _Receiver.pl следующим образом:

use NetSNMP::TrapReceiver; # should be added in order to get the script to work, otherwise it fails -- elekgeek 2nd DEC 2019
# get the host name
        $pdu_info{'receivedfrom'} =~ s/192.168.168.254/192.168.168.1/ig; # I added this line to get the core switch IP instead of zabbix's VLAN SVI IP, otherwise trap is not added to the CORE trap.fallback -- elekgeek 2nd DEC 2019
        my $hostname = $pdu_info{'receivedfrom'} || 'unknown';
        if ($hostname ne 'unknown')

При работе с ловушками мне приходилось видеть их как историю, поэтому я изменил пункт SNMP traps (fallback )с Тип информации=Журнал на Тип информации=Текст в шаблоне Template Module Generic SNMPv3.

Удачи в заббиксировании!

1
27.01.2020, 23:57

Теги

Похожие вопросы