3 SNMP slazdi

Pārskats

SNMP trigeru saņemšana ir pretēja SNMP iespējotu ierīču vaicāšanai.

Šajā gadījumā informācija tiek nosūtīta no SNMP iespējotas ierīces uz snmptrapd, un to no faila savāc jeb "pārtver" Zabbix serveris vai Zabbix starpniekserveris.

Parasti trigeri tiek nosūtīti, mainoties kādam nosacījumam, un aģents izveido savienojumu ar serveri, izmantojot 162. portu (pretstatā 161. portam aģenta pusē, kas tiek izmantots vaicājumiem). Trigeru izmantošana var palīdzēt noteikt īslaicīgas problēmas, kas rodas starp vaicājumu intervāliem un kuras vaicājumu dati var nepamanīt.

SNMP trigeru saņemšana Zabbix ir paredzēta darbam ar snmptrapd un vienu no mehānismiem trigeru nodošanai Zabbix — vai nu Bash vai Perl skriptu, vai SNMPTT.

Vienkāršākais veids, kā iestatīt trigeru uzraudzību pēc Zabbix konfigurēšanas, ir izmantot Bash skripta risinājumu, jo Perl un SNMPTT mūsdienu distribūcijās bieži nav pieejami un prasa sarežģītāku konfigurēšanu. Tomēr šis risinājums izmanto skriptu, kas konfigurēts kā traphandle. Lai nodrošinātu labāku veiktspēju produkcijas sistēmās, izmantojiet iegulto Perl risinājumu (vai nu skriptu ar do perl opciju, vai SNMPTT).

Trigera saņemšanas darbplūsma:

  1. snmptrapd saņem trigeri
  2. snmptrapd nodod trigeri saņēmēja skriptam (Bash, Perl) vai SNMPTT
  3. Saņēmējs parsē, formatē un ieraksta trigeri failā
  4. Zabbix SNMP trapper nolasa un parsē trigeru failu
  5. Katram trigerim Zabbix atrod visus "SNMP trapper" vienumus ar hostu saskarnēm, kas atbilst saņemtā trigera adresei. Ņemiet vērā, ka salīdzināšanas laikā tiek izmantots tikai hosta saskarnē atlasītais "IP" vai "DNS".
  6. Katram atrastajam vienumam trigeris tiek salīdzināts ar regulāro izteiksmi snmptrap[regexp]. Trigeris tiek iestatīts kā vērtība visiem atbilstošajiem vienumiem. Ja netiek atrasts neviens atbilstošs vienums un ir snmptrap.fallback vienums, trigeris tiek iestatīts kā tā vērtība.
  7. Ja trigeris netika iestatīts kā neviena vienuma vērtība, Zabbix pēc noklusējuma reģistrē neatbilstošo trigeri žurnālā. (To konfigurē ar "Log unmatched SNMP traps" sadaļā Administration > General > Other.)
Piezīmes par HA pārslēgšanos kļūmes gadījumā

Augstas pieejamības (HA) mezgla pārslēgšanās laikā Zabbix turpinās apstrādi pēc pēdējā ieraksta pēdējā ISO 8601 laikspiedola ietvaros; ja tas pats ieraksts netiks atrasts, tad pēdējās pozīcijas noteikšanai tiks izmantots tikai laikspiedols.

SNMP slazdu konfigurēšana

Šim vienuma tipam ir nepieciešama šāda lietotāja saskarnes konfigurācija.

1. Izveidojiet SNMP saskarni savam hostam

  • Sadaļā Data collection > Hosts izveidojiet/rediģējiet hostu un laukā Interfaces pievienojiet saskarnes tipu "SNMP", norādot IP vai DNS adresi.

    Adrese no katra saņemtā slazda tiks salīdzināta ar visu SNMP saskarņu IP un DNS adresēm, lai atrastu atbilstošos hostus.

2. Konfigurējiet vienumu

  • Sadaļā Data collection > Hosts izveidojiet/rediģējiet nepieciešamo vienumu.
  • Laukā Key izmantojiet vienu no SNMP slazdu atslēgām:
Key
Description Return value Comments
snmptrap[regexp]
Uztver visus SNMP slazdus, kas atbilst regulārajai izteiksmei, kas norādīta regexp. Ja regexp nav norādīts, tiek uztverts jebkurš slazds. SNMP slazds Šo vienumu var iestatīt tikai SNMP saskarnēm.
Šī vienuma atslēgas parametrā tiek atbalstīti lietotāja makrosi un globālās regulārās izteiksmes.
snmptrap.fallback
Uztver visus SNMP slazdus, kurus šai saskarnei neuztvēra neviens no snmptrap[] vienumiem. SNMP slazds Šo vienumu var iestatīt tikai SNMP saskarnēm.

Vairākrindu regulāro izteiksmju atbilstības pārbaude pašlaik netiek atbalstīta.

  • Lai laikspiedoli tiktu parsēti, iestatiet Type of information uz "Log". Ir pieļaujami arī citi formāti, piemēram, "Numeric", taču tiem var būt nepieciešams pielāgots slazdu apstrādātājs.

SNMP trap monitoringa iestatīšana

Zabbix servera/starpniekservera konfigurēšana

Lai nolasītu slazdus, Zabbix serverim vai starpniekserverim jābūt konfigurētam tā, lai palaistu SNMP trapper procesu un norādītu uz slazdu failu, kurā raksta SNMPTT vai Bash/Perl slazdu uztvērējs. Lai to izdarītu, rediģējiet konfigurācijas failu (zabbix_server.conf vai zabbix_proxy.conf):

StartSNMPTrapper=1
SNMPTrapperFile=[TRAP FILE]

Ja tiek izmantots systemd parametrs PrivateTmp , maz ticams, ka šis fails darbosies mapē /tmp.

Bash slazdu uztvērēja konfigurēšana

Prasības: tikai snmptrapd.

Bash slazdu uztvērēja skriptu var izmantot, lai pārsūtītu slazdus uz Zabbix serveri no snmptrapd, izmantojot trapper failu. Lai to konfigurētu, pievienojiet opciju traphandle snmptrapd konfigurācijas failam (snmptrapd.conf), skatiet piemēru.

Iespējams, būs jāpārstartē snmptrapd, lai tas ielādētu konfigurācijas izmaiņas.

Perl trap uztvērēja konfigurēšana

Prasības: Perl, Net-SNMP kompilēts ar --enable-embedded-perl (tas tiek darīts pēc noklusējuma kopš Net-SNMP 5.4)

Perl trap uztvērēju (skatiet misc/snmptrap/zabbix_trap_receiver.pl) var izmantot, lai pārsūtītu trap uz Zabbix serveri tieši no snmptrapd. Lai to konfigurētu:

  • pievienojiet Perl skriptu snmptrapd konfigurācijas failam (snmptrapd.conf), piemēram:
perl do "[FULL PATH TO PERL RECEIVER SCRIPT]";
  • konfigurējiet uztvērēju, piemēram:
$SNMPTrapperFile = '[TRAP FILE]';
$DateTimeFormat = '[DATE TIME FORMAT]';

Lai piemērotu izmaiņas konfigurācijā, var būt nepieciešams restartēt snmptrapd.

Ja skripta nosaukums nav ievietots pēdiņās, snmptrapd atteiksies startēties, parādot ziņojumus, kas ir līdzīgi šiem:

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
SNMPTT konfigurēšana

Vispirms snmptrapd jākonfigurē tā, lai tas izmantotu SNMPTT.

Lai nodrošinātu vislabāko veiktspēju, SNMPTT jākonfigurē kā dēmons, izmantojot snmptthandler-embedded, lai nodotu tam trapi. Skatiet norādījumus par SNMPTT konfigurēšanu.

Kad SNMPTT ir konfigurēts trapu saņemšanai, konfigurējiet snmptt.ini:

  1. iespējojiet Perl moduļa izmantošanu no NET-SNMP pakotnes:
net_snmp_perl_enable = 1
  1. reģistrējiet trapus trapu failā, ko nolasīs Zabbix:
log_enable = 1
log_file = [TRAP FILE]
  1. iestatiet datuma un laika formātu:
date_time_format = %Y-%m-%dT%H:%M:%S%z

Pakotne "net-snmp-perl" tika noņemta RHEL 8.0-8.2 versijās; atkārtoti pievienota RHEL 8.3. Plašāku informāciju skatiet zināmajās problēmās.

Tagad formatējiet trapus, lai Zabbix tos varētu atpazīt (rediģējiet snmptt.conf):

  1. Katram FORMAT priekšrakstam jāsākas ar "ZBXTRAP [address]", kur [address] tiks salīdzināta ar Zabbix SNMP saskarņu IP un DNS adresēm. Piemēram:
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
  1. Plašāku informāciju par SNMP trapu formātu skatiet zemāk.

Neizmantojiet nezināmus trapus — Zabbix tos nevarēs atpazīt. Nezināmus trapus var apstrādāt, definējot vispārīgu notikumu failā snmptt.conf:

EVENT general .* "General event" Normal
SNMP trap formāts

Visiem pielāgotajiem Perl trap uztvērējiem un SNMPTT trap konfigurācijai trap ir jāformatē šādi:

[timestamp] [trap, 1. daļa] ZBXTRAP [address] [trap, 2. daļa]

kur

  • [timestamp] - laika zīmogs formātā "%Y-%m-%dT%H:%M:%S%z"
  • ZBXTRAP - galvene, kas norāda, ka šajā rindā sākas jauns trap
  • [address] - IP adrese, kas tiek izmantota, lai atrastu šim trap atbilstošo hostu

Ņemiet vērā, ka apstrādes laikā "ZBXTRAP" un "[address]" tiks izgriezti no ziņojuma. Ja trap ir formatēts citādi, Zabbix var neparedzēti parsēt trap.

Trap piemērs:

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

Tā rezultātā SNMP saskarnei ar IP=192.168.1.1 tiks iegūts šāds trap:

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

Sistēmas prasības

Ieteicams instalēt MIB failus, lai nodrošinātu, ka vienumu vērtības tiek attēlotas pareizajā formātā. Bez MIB failiem var rasties formatēšanas problēmas, piemēram, vērtību attēlošana HEX formātā UTF-8 vietā vai otrādi.

Lielu failu atbalsts

Zabbix atbalsta lielus failus SNMP trapper failiem. Maksimālais faila izmērs, ko Zabbix var nolasīt, ir 2\^63 (8 EiB). Ņemiet vērā, ka failu sistēma var noteikt zemāku faila izmēra ierobežojumu.

Žurnālfailu rotācija

Zabbix nenodrošina nekādu žurnālfailu rotācijas sistēmu — tas jānodrošina lietotājam. Žurnālfailu rotācijai vispirms jāpārdēvē vecais fails un tikai pēc tam tas jādzēš, lai netiktu zaudēti nekādi slazdi:\

  1. Zabbix atver slazdu failu pēdējā zināmajā atrašanās vietā un pāriet uz 3. soli
  2. Zabbix pārbauda, vai pašlaik atvērtais fails ir rotēts, salīdzinot inode numuru ar norādītā slazdu faila inode numuru. Ja nav atvērta faila, Zabbix atiestata pēdējo atrašanās vietu un pāriet uz 1. soli.
  3. Zabbix nolasa datus no pašlaik atvērtā faila un iestata jauno atrašanās vietu.
  4. Jaunie dati tiek parsēti. Ja tas bija rotētais fails, fails tiek aizvērts un process atgriežas uz 2. soli.
  5. Ja jaunu datu nav, Zabbix gaida 1 sekundi un atgriežas uz 2. soli.
Failu sistēma

Trap faila ieviešanas dēļ Zabbix nepieciešama failu sistēma, kas atbalsta inode, lai atšķirtu failus (informācija tiek iegūta ar stat() izsaukumu).

Iestatīšanas piemēri, izmantojot dažādas SNMP protokola versijas

Šajā piemērā tiek izmantots snmptrapd un Bash saņēmēja skripts, lai pārsūtītu trap ziņojumus uz Zabbix serveri.

Iestatīšana:

  1. Konfigurējiet Zabbix, lai palaistu SNMP trapper un iestatītu trap failu. Pievienojiet zabbix_server.conf:
StartSNMPTrapper=1
SNMPTrapperFile=/var/lib/zabbix/snmptraps/snmptraps.log
  1. Lejupielādējiet Bash skriptu uz /usr/sbin/zabbix_trap_handler.sh:
curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/trunk/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh

Ja nepieciešams, pielāgojiet skriptā mainīgo ZABBIX_TRAPS_FILE. Lai izmantotu noklusējuma vērtību, vispirms izveidojiet vecākdirektoriju:

mkdir -p /var/lib/zabbix/snmptraps
  1. Pievienojiet tālāk norādīto snmtrapd.conf (skatiet strādājošu piemēru)
traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh

Lai piemērotu konfigurācijas izmaiņas, snmptrapd var būt nepieciešams restartēt.

  1. Izveidojiet SNMP vienumu TEST (ņemiet vērā sākotnējās konfigurācijas prasības):\

    Tips: SNMP trap
    Informācijas tips: Log Hosta saskarne: SNMP 127.0.0.1
    Atslēga: snmptrap["linkUp"]
    Žurnāla laika formāts: yyyyMMdd.hhmmss

Ņemiet vērā, ka tiek izmantots ISO 8601 datuma un laika formāts.

  1. Tālāk mēs konfigurēsim snmptrapd mūsu izvēlētajai SNMP protokola versijai un nosūtīsim testa trap ziņojumus, izmantojot utilītu snmptrap.
SNMPv1, SNMPv2

SNMPv1 un SNMPv2 protokoli izmanto autentifikāciju ar "community string". Tālāk redzamajā piemērā mēs izmantosim "secret" kā community string. Tai jābūt iestatītai uz to pašu vērtību arī SNMP trap sūtītājos.

Lūdzu, ņemiet vērā, ka, lai gan SNMPv2 joprojām tiek plaši izmantots produkcijas vidēs, tas nepiedāvā nekādu šifrēšanu un reālu sūtītāja autentifikāciju. Dati tiek sūtīti atklātā tekstā, tādēļ šīs protokola versijas drīkst izmantot tikai drošās vidēs, piemēram, privātā tīklā, un tās nekad nevajadzētu izmantot publiskos vai trešo pušu tīklos.

SNMP 1. versija mūsdienās faktiski vairs netiek izmantota, jo tā neatbalsta 64 bitu skaitītājus un tiek uzskatīta par mantotu protokolu.

Lai iespējotu SNMPv1 vai SNMPv2 trap ziņojumu pieņemšanu, snmptrapd.conf jāpievieno šāda rinda. Aizstājiet "secret" ar SNMP community string, kas konfigurēta SNMP trap sūtītājos:

authCommunity log,execute,net secret

Pēc tam mēs varam nosūtīt testa trap ziņojumu, izmantojot snmptrap. Šajā piemērā izmantosim bieži sastopamo "link up" OID:

snmptrap -v 2c -c secret localhost '' linkUp.0
SNMPv3

SNMPv3 novērš SNMPv1/v2 drošības problēmas un nodrošina autentifikāciju un šifrēšanu. Varat izmantot MD5 vai vairākas SHA autentifikācijas metodes, kā arī DES/vairākus AES kā šifru.

Lai iespējotu SNMPv3 pieņemšanu, pievienojiet snmptrapd.conf šādas rindas:

createUser -e 0x8000000001020304 traptest SHA mypassword AES
authuser log,execute traptest

Lūdzu, pievērsiet uzmanību atslēgvārdam "execute", kas ļauj izpildīt skriptus šim lietotāja drošības modelim.

snmptrap -v 3 -n "" -a SHA -A mypassword -x AES -X mypassword -l authPriv -u traptest -e 0x8000000001020304 localhost 0 linkUp.0

Ja vēlaties izmantot spēcīgas šifrēšanas metodes, piemēram, AES192 vai AES256, lūdzu, izmantojiet net-snmp, sākot ar versiju 5.8. Iespējams, tas būs jāpārkompilē ar configure opciju: --enable-blumenthal-aes. Vecākas net-snmp versijas neatbalsta AES192/AES256. Skatiet arī: Strong Authentication or Encryption.

Verifikācija

Abos piemēros jūs redzēsiet līdzīgas rindas savā /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

Vienuma vērtība Zabbix būs:

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

Piemērs ar Perl:

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

Skatiet arī