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 StartSNMPTrapper
a SNMPTrapperFile
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!
Dejte nám Like, sdílejte nás nebo nás sledujte 😍
Ať vám nic neunikne: