Jak nastavit SNMP Trap v Zabbixu

V tomto návodu si společně ukážeme, jak nastavit SNMP trap v Zabbixu pro operační systému rodiny RHEL, a to pro SNMPv2 i pro SNMPv3!

Tento postup je naprosto totožný jak pro Zabbix Server, tak i pro Zabbix Proxy a v případě HA je potřeba ho zopakovat na všech nodech clusteru.

Instalace doplňkových komponent

Pro funkčnost SNMP traps potřebujete na server nainstalovat následující komponenty:

  • net-snmp (hlavní balík obsahující potřebné binárky a knihovny)
  • net-snmp-perl (perl modul pro SNMP)
  • net-snmp-utils (nástroje převážně pro debugging – volitelné)
dnf install net-snmp-utils net-snmp-perl net-snmp

Konfigurace SNMP Trap na úrovni OS

Nejprve si z oficiálního repozitáře Zabbixu stáhněte perl skript pro sběr SNMP traps a následné odesílání dat do Zabbixu.

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

Tento skript pak nastavte jako spustitelný:

chmod +x /usr/bin/zabbix_trap_receiver.pl

V dalším kroku je potřeba tento skript nastavit – otevřete ho:

nano /usr/bin/zabbix_trap_receiver.pl

Zde nastavte proměnnou $SNMPTrapperFile, která určuje, kam se bude ukládat SNMP trap soubor.

Nastavte cestu tak, aby se zaručilo, že se daný soubor nesmaže ani např. při restartu serveru.

V našem případě to bude soubor /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';

Následně tedy tuto složku vytvořte:

mkdir /var/log/snmptrap

Nastavení SNMP

Když máte nastaven skript pro přijímání SNMP traps a odesílání dat do Zabbixu, pak musíte nakonfigurovat i samotné SNMP.

Otevřete si konfigurační soubor v cestě /etc/snmp/snmptrapd.conf:

nano /etc/snmp/snmptrapd.conf

Níže vidíte příklad nastavení pro SNMPv1, SNMPv2 i SNMPv3 včetně výše zmíněného skriptu (SNMP komunit můžete vydefinovat více).

Pozor: Řádek obsahující volání perl skriptu pro SNMP traps musí být v konfiguračním souboru jako úplně poslední!

Pozor: Minimální délka hesla pro SNMPv3 musí být alespoň 8 znaků, v našem příkladu je heslo: %Heslo123%.

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

#SNMPv1,2
authCommunity execute initmax

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

Nastavení rotování logu pro snmptrap.log

Vytvořte konfigurační soubor pro logrotate:

nano /etc/logrotate.d/snmptrap

Zde nastavte následující parametry:

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

Povolení SNMP portu ve firewallu (volitelné)

Pomocí následujících příkazů přidejte port 162/UDP jako výjimku do firewallu:

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

Aplikování konfigurace SNMP Trap

Následujícími příkazy restartujte službu snmptrapd a povolte její spouštění po startu systému.

systemctl restart snmptrapd
systemctl enable snmptrapd

Zastavení nepotřebných služeb

V případě, že server, kde SNMP traps nastavujeme nebudeme chtít monitorovat pomocí SNMP, můžeme zastavit a zakázat spouštění služby snmpd.

Toto nijak neovlivní sběr a odesílání nastaveného SNMP traps do Zabbixu.

systemctl disable snmpd --now

Tím jste úspěšně dokončili nastavení sběru SNMP traps a můžete přikročit k nastavení samotného Zabbixu.

Konfigurace Zabbix Serveru

Na úrovni Zabbix Serveru povolte SNMP trapper a nastavte cestu k logu.

Otevřete si konfigurační soubor Zabbix Serveru v cestě /etc/zabbix/zabbix_server.conf:

nano /etc/zabbix/zabbix_server.conf

Zde upravte následující konfigurační direktivy a soubor uložte.

### 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

Pro aplikování změněných konfiguračních parametrů restartujte Zabbix Server:

systemctl restart zabbix-server

Konfigurace Zabbix Proxy (volitelné)

V případě, že nastavujete Zabbix Proxy je postup naprosto stejný, pouze dané direktivy upravíme v konfiguračním souboru Zabbix Proxy v cestě /etc/zabbix/zabbix_proxy.conf:

nano /etc/zabbix/zabbix_proxy.conf

Zde upravte konfigurační direktivy StartSNMPTrapperSNMPTrapperFile stejně jako v případě Zabbix Serveru:

### 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

Následuje restart systémové služby Zabbix Proxy:

systemctl restart zabbix-proxy

Tímto jste dokončili celé nastavení pro sběr SNMP traps a nezbývá než otestovat funkčnost a aplikovat sběr těchto dat v Zabbixu.

Otestování konfigurace pomocí CLI

Následujícím příkazem odešlete testovací SNMPv2 trap (simulace linkDown pro eth0):

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

To, že se SNMP trap správně odeslal můžete ověřit ve vytvořeném SNMP trap souboru v cestě /var/log/snmptrap/snmptrap.log:

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

Pro představu níže vidíte příklad toho, jak výstup vypadá přímo v logu:

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"

Odeslání SNMP trap ve verzi 3 je o něco složitější. Testovací příkaz simulující „linkDown“ síťového adaptéru eth1 pro SNMPv3 tedy vypadá takto.

Nezapomeňte nastavení SNMP přizpůsobit vašemu konkrétnímu zařízení nebo nastavení místní infrastruktury.

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

Výstup pak opět můžete najít v souboru /var/log/snmptrap/snmptrap.log:

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

Příklad výstupu pro SNMP trap verze 3 vidíte zde:

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"

Záměrně zde posíláme testovací příkazy na rozdílný síťový interface pro SNMPv2 (eth0) a SNMPv3 (eth1), aby to od sebe bylo lehce rozpoznatelné.

Nyní už se můžeme přesunout na nastavení hosta a vytvoření šablony pro monitoring pomocí SNMP v Zabbixu.

Konfigurace v Zabbixu

V Zabbixu nejprve musíte vybraného hosta připravit na monitoring pomocí SNMP.

To uděláte tak, že mu přidáte interface typu SNMP a tomuto interface nastavíte správnou IP adresu a port.

V naší testovací konfiguraci použijeme pro monitoring localhost a výchozí port 161.

SNMP komunitu (proměnná {$SNMP_COMMUNITY}) je potřeba přizpůsobit pro standardní SNMP monitoring. Pro SNMP Trap se komunita vyhodnocuje již na úrovni konfiguračního souboru pro snmptrapd daemon, viz část /etc/snmp/snmptrapd.conf. Nebude mít tedy vliv na SNMP Trap item a je potřeba to v nastavení zohlednit.

To můžete udělat buďto globálně, v sekci Administration -> Macros anebo lokálně na úrovni hosta – v záložce Macros.

Tuto změnu však můžete provést i pouze na úrovni vytvořeného SNMP interface tak, jak vidíte na obrázku níže.

Nastavení hosta uložte a v tuto chvíli jste připraveni zahájit monitoring pomocí SNMP.

Pokud si chcete vyzkoušet základní funkcionalitu SNMP, tak pro vás máme připravenou vzorovou šablonu pro Zabbix 6.0 a novější, kterou si můžete stáhnout na odkaze níže.

Vzorovou šablonu SNMP trap pro Zabbix 6.0+ si můžete stáhnout zde: zabbix_snmptrap_example_template.xml.

Pokud ale rádi zkoumáte, anebo si k lepšímu pochopení potřebujete celý proces tzv. „osahat“, tak můžete pokračovat v kapitolách dál, kde vás jednotlivými kroky provedeme.

Vytvoření testovacího itemu snmptrap.fallback (volitelné)

Item typu fallback primárně slouží k zachycení všech SNMP zpráv, které nebyly předtím zachyceny žádným jiným konkrétním itemem v dané šabloně.

Proto si item tohoto typu vytvoříme jako první – vytvořte si novou šablonu a do ní přidejte nový item nastavený tak, jak vidíte na obrázku níže.

Nyní zkuste znovu spustit již jednou použitý testovací příkaz pro SNMPv2 simulující linkDown na eth0:

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

V Zabbixu, v sekci Monitoring -> Latest data si pak na vašem testovacím hostu ověřte, že data dorazila správně.

Zde můžete vidět, že testovací data skutečně dorazila v pořádku. Zpráva má správnou SNMP komunitu, zdrojový server je skutečně localhost a data zprávy obsahují odeslaný řetězec.

Nyní se můžeme přesunout k vytvoření konkrétních items pro jednotlivé monitorované položky.

Vytvoření testovacího itemu snmptrap (volitelné)

Ve vaší nové šabloně si vytvořte nové items typu SNMP trap, které budou odpovídat nám posílaným testovacím příkazům.

Pro zjednodušení použijeme v klíči těchto itemů regulérní výraz tak, jak vidíte zde:

Druhý item pro testovací příkaz na eth1 přes SNMPv3 můžete z toho nově vytvořeného itemu jednoduše naklonovat, a pouze v regulérním výrazu změňte název síťového inteface na eth1.

Konfiguraci šablony uložte a znovu spusťte naše dva testovací příkazy.

Pro SNMPv2 na eth0:

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

V latest data pak uvidíte, že tento test tentokrát nezachytil snmptrap.fallback, ale správný item pro tento inteface, který jste si předem vytvořili.

A stejným způsobem ověříme i funkčnost druhého snmptrap itemu pro eth1.

Znovu spusťte náš testovací příkaz pro SNMPv3 na linkDown interface eth1:

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

A v latest data ověřte, že zpráva byla úspěšně zachycena pomocí tohoto itemu:

Gratulujeme, tímto máte tuto vzorovou konfiguraci hotovou a úspěšně jste pronikli do základů monitoringu pomocí SNMP traps!