4 SNMP slazds

Pārskats

SNMP trapu saņemšana ir pretstats 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 tiek savākta jeb "notverta" no faila, ko nolasa Zabbix serveris vai Zabbix starpniekserveris.

Parasti trapi tiek nosūtīti, mainoties kādam nosacījumam, un aģents savienojas ar serveri 162. portā (pretstatā 161. portam aģenta pusē, kas tiek izmantots vaicājumiem). Trapu izmantošana var palīdzēt noteikt dažas īslaicīgas problēmas, kas rodas starp vaicājumu intervāliem un var palikt nepamanītas vaicājumu datos.

SNMP trapu saņemšana Zabbix ir izstrādāta darbam ar snmptrapd un vienu no mehānismiem trapu nodošanai Zabbix - vai nu Bash, vai Perl skriptu, vai SNMPTT.

Vienkāršākais veids, kā pēc Zabbix konfigurēšanas iestatīt trapu uzraudzību, ir izmantot Bash skripta risinājumu, jo Perl un SNMPTT mūsdienu distribūcijās bieži vien nav pieejami un tiem nepieciešama sarežģītāka konfigurācija. Tomēr šis risinājums izmanto skriptu, kas konfigurēts kā traphandle. Labākai veiktspējai ražošanas sistēmās izmantojiet iebūvēto Perl risinājumu (vai nu skriptu ar do perl opciju, vai SNMPTT).

Trapa saņemšanas darbplūsma:

  1. snmptrapd saņem trapu.
  2. snmptrapd nodod trapu saņēmēja skriptam (Bash, Perl) vai SNMPTT.
  3. Saņēmējs parsē, formatē un ieraksta trapu failā.
  4. Zabbix SNMP trapper nolasa un parsē trapa failu.
  5. Katram trapam Zabbix atrod visus SNMP trapper vienumus ar hostu saskarnēm, kas atbilst saņemtā trapa adresei. Ņemiet vērā, ka atbilstības noteikšanai tiek izmantots tikai izvēlētais IP vai DNS hosta saskarnē.
  6. Katram atrastajam vienumam trapu salīdzina ar regexp snmptrap[regexp]. Traps tiek iestatīts kā vērtība visiem atbilstošajiem vienumiem. Ja netiek atrasts neviens atbilstošs vienums un ir snmptrap.fallback vienums, traps tiek iestatīts kā tā vērtība.
  7. Ja traps nav iestatīts kā neviena vienuma vērtība, Zabbix pēc noklusējuma reģistrē neatbilstošo trapu. (To konfigurē 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 trapu konfigurēšana

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

1. darbība: izveidojiet SNMP saskarni hostam
  1. Sadaļā Data collection > Hosts izveidojiet hostu vai rediģējiet esošo.
  2. Laukā Interfaces atlasiet SNMP saskarnes tipu.
  3. Ievadiet IP adresi/DNS nosaukumu un porta numuru.
  4. Nolaižamajā sarakstā atlasiet SNMP version: (SNMPv1, SNMPv2 vai SNMPv3) un pievienojiet saskarnes akreditācijas datus atkarībā no izvēlētās SNMP versijas.

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

2. darbība: konfigurējiet vienumu
  1. Hostam izveidojiet vienumu vai rediģējiet esošo.
  2. Laukā Key izmantojiet vienu no SNMP trap atslēgām:

    • snmptrap[regexp] - uztver visus SNMP trapus, kas atbilst regexp parametrā norādītajai regulārajai izteiksmei; ja regexp nav norādīts, uztver jebkuru trapu.
      Parametrā tiek atbalstīti lietotāja makrosi un globālās regulārās izteiksmes.
      Atgrieztā vērtība: SNMP traps.
      Šo vienumu var iestatīt tikai SNMP saskarnēm.
    • snmptrap.fallback - uztver visus SNMP trapus, kurus nav uztvēris neviens no šīs saskarnes snmptrap[] vienumiem.
      Atgrieztā vērtība: SNMP traps.
      Šo vienumu var iestatīt tikai SNMP saskarnēm.

Pašlaik vairāku rindu regulāro izteiksmju atbilstība netiek atbalstīta.

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

SNMP trap monitoringa iestatīšana

Zabbix servera/starpniekservera konfigurēšana

Lai nolasītu trapus, Zabbix serverim vai starpniekserverim ir jākonfigurē SNMP trapper process un jānorāda trapu fails, kurā raksta SNMPTT vai Bash/Perl trapu saņēmē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, šis fails, visticamāk, nedarbosies /tmp.

Bash trapu saņēmēja konfigurēšana

Prasības: tikai snmptrapd.

Bash trapu saņēmēja skriptu var izmantot, lai nodotu trapus Zabbix serverim no snmptrapd, izmantojot trapper failu. Lai to konfigurētu, pievienojiet traphandle opciju snmptrapd konfigurācijas failam (snmptrapd.conf), skatiet piemēru.

Lai stātos spēkā konfigurācijas izmaiņas, snmptrapd var būt nepieciešams restartēt.

Perl trapa uztvērēja konfigurēšana

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

Perl trapa uztvērēju (meklējiet misc/snmptrap/zabbix\_trap\_receiver.pl) var izmantot, lai nodotu trapus uz Zabbix serveris 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 tiktu ielādētas konfigurācijas izmaiņas, snmptrapd, iespējams, būs jāpārstartē.

Ja skripta nosaukums nav ievietots pēdiņās, snmptrapd atteiksies startēties un parādīs ziņojumus, kas 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 ir jākonfigurē, lai tas izmantotu SNMPTT.

Lai nodrošinātu vislabāko veiktspēju, SNMPTT vajadzētu konfigurēt kā dēmonu, izmantojot snmptthandler-embedded, lai tam nodotu trapus. 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; tā tika atkārtoti pievienota RHEL 8.3. Plašāku informāciju skatiet zināmajās problēmās.

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

  1. Katram FORMAT paziņojumam jāsākas ar ZBXTRAP [address], kur [address] tiks salīdzināta ar SNMP saskarņu IP un DNS adresēm Zabbix. Piem.:
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
  1. Skatiet tālāk vairāk par SNMP trapa formātu.

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

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

Visiem pielāgotajiem Perl trapa uztvērējiem un SNMPTT trapa konfigurācijai trapa formāts ir jāveido šādi:

[timestamp] [the trap, part 1] ZBXTRAP [address] [the trap, part 2]

kur

  • [timestamp] - laikspiedols %Y-%m-%dT%H:%M:%S%z formātā.
  • ZBXTRAP - galvene, kas norāda, ka šajā rindā sākas jauns trapa ieraksts.
  • [address] - IP adrese, ko izmanto, lai atrastu šī trapa hostu.

Ņemiet vērā, ka ZBXTRAP un [address] apstrādes laikā tiks izgriezti no ziņojuma. Ja trapa formāts ir citāds, Zabbix var parsēt trapus negaidītā veidā.

Trapa 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

Tas SNMP saskarnei ar IP=192.168.1.1 rezultēsies šādā 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 žurnālfailu rotācijas sistēmu - tā ir jānodrošina lietotājam. Žurnālfailu rotācijai vispirms ir jāpārdēvē vecais fails un tikai pēc tam tas jādzēš, lai netiktu zaudēti nekādi slazdi:

  1. Zabbix atver trap 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 ticis rotēts, salīdzinot inode numuru ar definētā trap 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 tiek atgriezts 2. solī.
  5. Ja jaunu datu nav, Zabbix guļ 1 sekundi un atgriežas 2. solī.
Failu sistēma

Trap faila implementācijas dēļ Zabbix failu sistēmai ir jā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 trigerus uz Zabbix serveris.

Iestatīšana:

  1. Konfigurējiet Zabbix, lai palaistu SNMP trapper un iestatītu trapa 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/7.4/templates/scripts/snmptraps/zabbix_trap_handler.sh

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

mkdir -p /var/lib/zabbix/snmptraps
  1. Pievienojiet šādu rindu snmtrapd.conf (skatiet darba piemēru)
traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh

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

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

    Tips: SNMP trap
    Informācijas tips: Log
    Host interfeiss: 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 izvēlētajai SNMP protokola versijai un nosūtīsim testa trigerus, izmantojot utilītu snmptrap.
SNMPv1, SNMPv2

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

Lūdzu, ņemiet vērā, ka, lai gan SNMPv2 joprojām tiek plaši izmantots ražošanas vidēs, tas nenodrošina šifrēšanu un patiesu sūtītāja autentifikāciju. Dati tiek sūtīti kā vienkāršs teksts, tāpēc šīs protokola versijas drīkst izmantot tikai drošās vidēs, piemēram, privātā tīklā, un tās nekad nedrīkst izmantot publiskā vai trešo pušu tīklā.

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

Lai iespējotu SNMPv1 vai SNMPv2 trigeru pieņemšanu, snmptrapd.conf jāpievieno šāda rinda. Aizstājiet secret ar SNMP community string, kas konfigurēts SNMP trigeru sūtītājiem:

authCommunity log,execute,net secret

Tālāk varam nosūtīt testa trigeri, izmantojot snmptrap. Šajā piemērā izmantosim bieži lietoto "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 un DES/vairākus AES kā šifru.

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

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

Lūdzu, ņemiet vērā atslēgvārdu "execute", kas ļauj šim lietotāja drošības modelim izpildīt skriptus.

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.

Pārbaude

Abos piemēros jūs redzēsiet līdzīgas rindas /var/lib/zabbix/snmptraps/snmptraps.log failā:

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

Vienums 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ī