4 SNMP trap
Przegląd
Odbieranie pułapek SNMP jest przeciwieństwem odpytywania urządzeń z włączonym SNMP.
W tym przypadku informacje są wysyłane z urządzenia z włączonym SNMP do snmptrapd i są zbierane lub „przechwytywane” przez serwer Zabbix lub proxy Zabbix z pliku.
Zwykle pułapki są wysyłane po wystąpieniu zmiany jakiegoś warunku, a agent łączy się z serwerem na porcie 162 (w przeciwieństwie do portu 161 po stronie agenta, który jest używany do zapytań). Korzystanie z pułapek może umożliwić wykrycie krótkotrwałych problemów występujących pomiędzy kolejnymi odpytywaniami, które mogłyby zostać pominięte przez dane z zapytań.
Odbieranie pułapek SNMP w Zabbix zostało zaprojektowane do współpracy z snmptrapd oraz z jednym z mechanizmów przekazywania pułapek do Zabbix — skryptem Bash lub Perl albo SNMPTT.
Najprostszym sposobem skonfigurowania monitorowania pułapek po skonfigurowaniu Zabbix
jest użycie rozwiązania opartego na skrypcie Bash, ponieważ Perl i SNMPTT często
nie są dostępne we współczesnych dystrybucjach i wymagają bardziej złożonej konfiguracji.
Jednak to rozwiązanie wykorzystuje skrypt skonfigurowany jako traphandle.
Aby uzyskać lepszą wydajność w systemach produkcyjnych, użyj rozwiązania z osadzonym Perlem
(skrypt z opcją do perl lub SNMPTT).
Przebieg odbierania pułapki:
snmptrapdodbiera pułapkęsnmptrapdprzekazuje pułapkę do skryptu odbierającego (Bash, Perl) lub do SNMPTT- Odbiornik analizuje, formatuje i zapisuje pułapkę do pliku
- Moduł SNMP trapper Zabbix odczytuje i analizuje plik pułapek
- Dla każdej pułapki Zabbix znajduje wszystkie pozycje „SNMP trapper” z interfejsami hosta pasującymi do adresu odebranej pułapki. Należy pamiętać, że podczas dopasowywania używane jest tylko wybrane „IP” lub „DNS” w interfejsie hosta.
- Dla każdej znalezionej pozycji pułapka jest porównywana z wyrażeniem regularnym w
snmptrap[regexp]. Pułapka jest ustawiana jako wartość wszystkich dopasowanych pozycji. Jeśli nie zostanie znaleziona żadna pasująca pozycja, a istnieje pozycjasnmptrap.fallback, pułapka jest ustawiana jako jej wartość. - Jeśli pułapka nie została ustawiona jako wartość żadnej pozycji, Zabbix domyślnie zapisuje niedopasowaną pułapkę w logu. (Jest to konfigurowane przez opcję „Log unmatched SNMP traps” w Administration > General > Other.)
Uwagi dotyczące przełączenia awaryjnego HA
Podczas przełączania węzła wysokiej dostępności (HA) Zabbix będzie kontynuował przetwarzanie od ostatniego rekordu w ramach ostatniego znacznika czasu ISO 8601; jeśli ten sam rekord nie zostanie znaleziony, do określenia ostatniej pozycji zostanie użyty tylko znacznik czasu.
Konfigurowanie trapów SNMP
Ten typ pozycji wymaga następującej konfiguracji frontend.
-
Utwórz interfejs SNMP dla swojego hosta:
-
W Zbieranie danych > Hosty utwórz/edytuj hosta i w polu Interfejsy dodaj typ interfejsu "SNMP", podając adres IP lub DNS.
Adres z każdego odebranego trapu zostanie porównany z adresami IP i DNS wszystkich interfejsów SNMP, aby znaleźć odpowiadające hosty.
-
-
Skonfiguruj pozycję:
- W Zbieranie danych > Hosty utwórz/edytuj wymaganą pozycję.
- W polu Klucz użyj jednego z kluczy trapów SNMP:
| Klucz | ||
|---|---|---|
| Opis | Wartość zwracana | Komentarze |
| snmptrap[regexp] | ||
| Przechwytuje wszystkie trapy SNMP, które pasują do wyrażenia regularnego określonego w regexp. Jeśli regexp nie jest określone, przechwytuje dowolny trap. | trap SNMP | Tę pozycję można ustawić tylko dla interfejsów SNMP. Makra użytkownika i globalne wyrażenia regularne są obsługiwane w parametrze tego klucza pozycji. |
| snmptrap.fallback | ||
| Przechwytuje wszystkie trapy SNMP, które nie zostały przechwycone przez żadną z pozycji snmptrap[] dla tego interfejsu. | trap SNMP | Tę pozycję można ustawić tylko dla interfejsów SNMP. |
Dopasowywanie wielowierszowych wyrażeń regularnych nie jest obecnie obsługiwane.
- Ustaw Typ informacji na "Log", aby znaczniki czasu mogły zostać przeanalizowane. Inne formaty, takie jak "Numeric", również są akceptowalne, ale mogą wymagać niestandardowego obsługiwania trapów.
Konfigurowanie monitorowania pułapek SNMP
Konfigurowanie serwera/proxy Zabbix
Aby odczytywać trapy, serwer lub proxy Zabbix musi być skonfigurowany do uruchamiania procesu SNMP trapper i wskazywania pliku trapów, do którego zapisuje SNMPTT lub odbiornik trapów Bash/Perl. W tym celu edytuj plik konfiguracyjny (zabbix_server.conf lub zabbix_proxy.conf):
StartSNMPTrapper=1
SNMPTrapperFile=[TRAP FILE]
Jeśli parametr systemd PrivateTmp jest używany, ten plik prawdopodobnie nie będzie działał w /tmp.
Konfigurowanie odbiornika trapów Bash
Wymagania: tylko snmptrapd.
Skrypt odbiornika trapów Bash script
może być używany do przekazywania trapów do serwera Zabbix z snmptrapd przy użyciu pliku trappera. Aby
go skonfigurować, dodaj opcję traphandle do pliku konfiguracyjnego snmptrapd (snmptrapd.conf),
zobacz przykład.
snmptrapd może wymagać ponownego uruchomienia, aby wczytać zmiany w swojej konfiguracji.
Konfigurowanie odbiornika trapów Perl
Wymagania: Perl, Net-SNMP skompilowany z opcją --enable-embedded-perl (domyślnie od Net-SNMP 5.4)
Odbiornik trapów Perl (szukaj misc/snmptrap/zabbix_trap_receiver.pl) może być używany do przekazywania trapów do serwer Zabbix bezpośrednio z snmptrapd. Aby go skonfigurować:
- Dodaj skrypt Perl do pliku konfiguracyjnego snmptrapd (snmptrapd.conf), np.:
perl do "[FULL PATH TO PERL RECEIVER SCRIPT]";
- Skonfiguruj odbiornik, np.:
$SNMPTrapperFile = '[TRAP FILE]';
$DateTimeFormat = '[DATE TIME FORMAT]';
snmptrapd może wymagać ponownego uruchomienia, aby uwzględnić zmiany w konfiguracji.
Jeśli nazwa skryptu nie jest ujęta w cudzysłów, snmptrapd odmówi
uruchomienia i wyświetli komunikaty podobne do poniższych:
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
Konfigurowanie SNMPTT
Najpierw należy skonfigurować snmptrapd do używania SNMPTT.
Dla najlepszej wydajności SNMPTT powinien być skonfigurowany jako demon z użyciem snmptthandler-embedded, aby przekazywać do niego pułapki. Zobacz instrukcje dotyczące konfigurowania SNMPTT.
Gdy SNMPTT jest skonfigurowany do odbierania pułapek, skonfiguruj snmptt.ini:
- Włącz użycie modułu Perl z pakietu NET-SNMP:
net_snmp_perl_enable = 1
- Zapisuj pułapki do pliku pułapek, który będzie odczytywany przez Zabbix:
log_enable = 1
log_file = [TRAP FILE]
- Ustaw format daty i czasu:
date_time_format = %Y-%m-%dT%H:%M:%S%z
Pakiet "net-snmp-perl" został usunięty w RHEL 8.0-8.2; ponownie dodany w RHEL 8.3. Więcej informacji znajdziesz w sekcji znane problemy.
Teraz sformatuj pułapki tak, aby Zabbix mógł je rozpoznać (edytuj snmptt.conf):
- Każde polecenie FORMAT powinno zaczynać się od "ZBXTRAP [address]", gdzie [address] będzie porównywany z adresami IP i DNS interfejsów SNMP w Zabbix. Np.:
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
- Więcej informacji o formacie pułapek SNMP znajduje się poniżej.
Nie używaj nieznanych pułapek - Zabbix nie będzie w stanie ich rozpoznać.
Nieznane pułapki można obsłużyć, definiując ogólne zdarzenie w snmptt.conf:
EVENT general .* "General event" Normal
Format pułapki SNMP
Wszystkie niestandardowe odbiorniki pułapek Perl oraz konfiguracja pułapek SNMPTT muszą formatować pułapkę w następujący sposób:
[timestamp] [the trap, part 1] ZBXTRAP [address] [the trap, part 2]
gdzie
- [timestamp] - znacznik czasu w formacie "%Y-%m-%dT%H:%M:%S%z"
- ZBXTRAP - nagłówek wskazujący, że w tym wierszu rozpoczyna się nowa pułapka
- [address] - adres IP używany do znalezienia hosta dla tej pułapki
Należy pamiętać, że "ZBXTRAP" oraz "[address]" zostaną usunięte z wiadomości podczas przetwarzania. Jeśli pułapka będzie sformatowana inaczej, Zabbix może parsować pułapki w nieoczekiwany sposób.
Przykładowa pułapka:
2024-01-11T15:28:47+0200 .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
Spowoduje to utworzenie następującej pułapki dla interfejsu SNMP z IP=192.168.1.1:
2024-01-11T15:28:47+0200 .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
Wymagania systemowe
Zaleca się zainstalowanie plików MIB, aby zapewnić, że wartości pozycji będą wyświetlane w prawidłowym formacie. Bez plików MIB mogą wystąpić problemy z formatowaniem, takie jak wyświetlanie wartości w formacie HEX zamiast UTF-8 lub odwrotnie.
Obsługa dużych plików
Zabbix obsługuje duże pliki dla plików SNMP trapper. Maksymalny rozmiar pliku, jaki Zabbix może odczytać, wynosi 2\^63 (8 EiB). Należy pamiętać, że system plików może narzucać niższy limit rozmiaru pliku.
Rotacja logów
Zabbix nie zapewnia żadnego systemu rotacji logów — powinno to być obsługiwane przez użytkownika. Rotacja logów powinna najpierw zmienić nazwę starego pliku, a dopiero później go usunąć, aby żadne trapy nie zostały utracone:
- Zabbix otwiera plik trapów w ostatniej znanej lokalizacji i przechodzi do kroku 3
- Zabbix sprawdza, czy aktualnie otwarty plik został poddany rotacji, porównując numer inode z numerem inode zdefiniowanego pliku trapów. Jeśli nie ma otwartego pliku, Zabbix resetuje ostatnią lokalizację i przechodzi do kroku 1.
- Zabbix odczytuje dane z aktualnie otwartego pliku i ustawia nową lokalizację.
- Nowe dane są analizowane. Jeśli był to plik po rotacji, plik zostaje zamknięty i następuje powrót do kroku 2.
- Jeśli nie było nowych danych, Zabbix usypia na 1 sekundę i wraca do kroku 2.
System plików
Ze względu na implementację pliku pułapki, Zabbix wymaga, aby system plików obsługiwał i-węzły w celu rozróżniania plików (informacje są pobierane za pomocą wywołania stat()).
Przykłady konfiguracji z użyciem różnych wersji protokołu SNMP
Ten przykład wykorzystuje snmptrapd oraz skrypt odbierający Bash do przekazywania pułapek do serwer Zabbix.
Konfiguracja:
- Skonfiguruj Zabbix tak, aby uruchamiał SNMP trapper i
ustaw plik pułapek. Dodaj do
zabbix_server.conf:
StartSNMPTrapper=1
SNMPTrapperFile=/var/lib/zabbix/snmptraps/snmptraps.log
- Pobierz skrypt Bash do
/usr/sbin/zabbix_trap_handler.sh:
curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/trunk/templates/scripts/snmptraps/zabbix_trap_handler.sh
Jeśli to konieczne, dostosuj zmienną ZABBIX_TRAPS_FILE w skrypcie. Aby użyć wartości domyślnej, najpierw utwórz katalog nadrzędny:
mkdir -p /var/lib/zabbix/snmptraps
- Dodaj następującą konfigurację do
snmtrapd.conf(zobacz działający przykład)
traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh
snmptrapd może wymagać ponownego uruchomienia, aby uwzględnić zmiany w konfiguracji.
-
Utwórz pozycję SNMP TEST (pamiętaj o początkowych wymaganiach konfiguracyjnych):
Type: SNMP trap
Type of information: Log
Host interface: SNMP 127.0.0.1
Key:snmptrap["linkUp"]
Log time format: yyyyMMdd.hhmmss
Zwróć uwagę, że używany jest format daty i czasu ISO 8601.
- Następnie skonfigurujemy
snmptrapddla wybranej wersji protokołu SNMP i wyślemy testowe pułapki za pomocą narzędziasnmptrap.
SNMPv1, SNMPv2
Protokoły SNMPv1 i SNMPv2 opierają się na uwierzytelnianiu za pomocą "community string". W poniższym przykładzie użyjemy "secret" jako community string. Musi on mieć tę samą wartość na nadajnikach pułapek SNMP.
Należy pamiętać, że mimo iż SNMPv2 jest nadal szeroko używany w środowiskach produkcyjnych, nie oferuje żadnego szyfrowania ani rzeczywistego uwierzytelniania nadawcy. Dane są przesyłane jako zwykły tekst, dlatego te wersje protokołu powinny być używane wyłącznie w bezpiecznych środowiskach, takich jak sieć prywatna, i nigdy nie powinny być używane w żadnej publicznej ani zewnętrznej sieci.
Wersja SNMP 1 nie jest obecnie właściwie używana, ponieważ nie obsługuje liczników 64-bitowych i jest uznawana za protokół przestarzały.
Aby włączyć odbieranie pułapek SNMPv1 lub SNMPv2, należy dodać następującą linię do snmptrapd.conf.
Zastąp "secret" community string skonfigurowanym na nadajnikach pułapek SNMP:
authCommunity log,execute,net secret
Następnie możemy wysłać testową pułapkę za pomocą snmptrap. W tym przykładzie użyjemy popularnego OID "link up":
snmptrap -v 2c -c secret localhost '' linkUp.0
SNMPv3
SNMPv3 rozwiązuje problemy bezpieczeństwa SNMPv1/v2 i zapewnia uwierzytelnianie oraz szyfrowanie. Możesz użyć metod uwierzytelniania MD5 lub wielu SHA oraz DES/wielu AES jako szyfru.
Aby włączyć odbieranie SNMPv3, dodaj następujące linie do snmptrapd.conf:
createUser -e 0x8000000001020304 traptest SHA mypassword AES
authuser log,execute traptest
Zwróć uwagę na słowo kluczowe "execute", które pozwala wykonywać skrypty dla tego modelu bezpieczeństwa użytkownika.
snmptrap -v 3 -n "" -a SHA -A mypassword -x AES -X mypassword -l authPriv -u traptest -e 0x8000000001020304 localhost 0 linkUp.0
Jeśli chcesz używać silnych metod szyfrowania, takich jak AES192 lub AES256, użyj
net-snmp w wersji 5.8 lub nowszej. Może być konieczna ponowna kompilacja z opcją configure
: --enable-blumenthal-aes.
Starsze wersje net-snmp nie obsługują AES192/AES256.
Zobacz także: Strong Authentication or Encryption.
Weryfikacja
W obu przykładach zobaczysz podobne linie w pliku /var/lib/zabbix/snmptraps/snmptraps.log:
2024-01-30T10:04:23+0200 ZBXTRAP 127.0.0.1
UDP: [127.0.0.1]:56585->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 2538834
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0
Wartość pozycji w Zabbix będzie następująca:
2024-01-30 10:04:23 2024-01-30 10:04:21
2024-01-30T10:04:21+0200 UDP: [127.0.0.1]:56585->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 2538834
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0
Przykład z Perlem:
2024-01-30T11:42:54+0200 ZBXTRAP 127.0.0.1
PDU INFO:
receivedfrom UDP: [127.0.0.1]:58649->[127.0.0.1]:162
notificationtype TRAP
version 1
community public
errorstatus 0
transactionid 1
requestid 2101882550
messageid 0
errorindex 0
VARBINDS:
DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (457671) 1:16:16.71
SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: IF-MIB::linkUp.0