3 SNMP замке

Преглед

Примање SNMP замки супротно је испитивању уређаја на којима је омогућен SNMP.

У овом случају, информације се шаљу са SNMP-омогућеног уређаја на snmptrapd и прикупљају се или "заробљују" Zabbix сервер или Zabbix прокси из датотеке.

Обично се замке шаљу након неке промене услова и агента повезује се са сервером на порту 162 (за разлику од порта 161 на страну агента која се користи за упите). Коришћење замки може открити неке кратке проблеме који се јављају у току интервала упита и могу бити изостављени упитом података.

Пријем SNMP замки у Zabbix-у је дизајниран да ради са snmptrapd и један од механизама за преношење замки у Zabbix - било Bash или Perl скрипта или SNMPTT.

Најједноставнији начин за подешавање праћења замки након конфигурисања Zabbix-а је коришћење решења Bash скрипте, јер Perl и SNMPTT често недостају у савременим дистрибуцијама и захтевају сложенију конфигурацију. Међутим, ово решење користи скрипту конфигурисану као traphandle. За боље перформансе на производним системима, користите уграђено Perl решење (било скрипта са опцијом do perl или SNMPTT).

Ток рада примања замке:

  1. snmptrapd прима замку
  2. snmptrapd прослеђује замку скрипти примаоца (Bash, Perl) или SNMPTT
  3. Пријемник анализира, форматира и уписује замку у датотеку
  4. Zabbix SNMP trapper чита и анализира trap датотеку
  5. За сваку замку Zabbix проналази све "SNMP trapper" ставке са интерфејсима домаћина који одговарају примљеној trap адреси. Имајте на уму да само изабрани "IP" или "DNS" у интерфејсу домаћина се користи током подударања.
  6. За сваку пронађену ставку, замка се пореди са редовним изразом у snmptrap[regexp]. Замка је постављена као вредност све подударне ставке. Ако није пронађена одговарајућа ставка а постоји snmptrap.fallback, замка се поставља као вредност тога.
  7. Ако замка није постављена као вредност било које ставке, Zabbix подразумевано бележи замку без премца. (Ово је конфигурисано помоћу "Логујте неупарене SNMP замке" у Администрација → Опште → Остало.)
Напомене о HA преласку на грешку

Током пребацивања чвора високе доступности (HA), Zabbix ће наставити обраду након последњег записа у оквиру последње ISO 8601 временске ознаке; ако исти запис није пронађен онда ће се само временска ознака користити за идентификацију последње позиције.

Конфигурисање SNMP замки

Овај тип ставке захтева следећу конфигурацију корисничког интерфејса.

1. Направите SNMP интерфејс за вашег домаћина

  • У Прикупљање података > Домаћини, креирајте/измените домаћина и у поље Интерфејси додајте тип интерфејса "SNMP", наводећи IP или DNS адресу.
    <br >Адреса из сваке примљене замке биће упоређена са IP и DNS адресама свих SNMP интерфејса да би се пронашли одговарајући домаћини.

2. Конфигуришите ставку

  • У Колекција података > Домаћини, креирајте/измените потребну ставку.
  • У пољу Кључ користите један од SNMP кључева за замку:
Key
Description Return value Comments
snmptrap[regexp]
Хвата све SNMP замке које се подударају са регуларним изразом наведеним у regexp. Ако regexp није специфициран, хвата сваку замку. SNMP trap Ова ставка се може подесити само за SNMP интерфејсе.
Кориснички макрои и глобални регуларни изрази су подржани у параметру кључа ове ставке.
snmptrap.fallback
Хвата све SNMP замке које није ухватила ниједна snmptrap[] ставка за тај интерфејс. SNMP trap Ова ставка се може подесити само за SNMP интерфејсе.

Вишелинијско подударање регуларног израза није подржано у овом случају.

  • Подесите Тип информације на "Евиденција" за временске ознаке које треба рашчланити. Други формати као што је "Нумерички" су такође прихватљиви, али могу захтевати прилагођени руковалац замкама.

Подешавање надгледања SNMP замки

Конфигурисање Zabbix сервера/проксија

Да бисте прочитали замке, Zabbix сервер или прокси морају бити конфигурисани за покретање SNMP trapper процеса и усмере на trap датотеку која се налази написана од SNMPTT или Bash/Perl trap пријемника. Да бисте то урадили, уредите конфигурациону датотеку (zabbix_server.conf или zabbix_proxy.conf):

StartSNMPTrapper=1
       SNMPTrapperFile=[TRAP FILE]

Ако се користи systemd параметар, PrivateTmp мало је вероватно да ће ова датотека радити у /tmp.

Конфигурисање Bash trap пријемника

Захтеви: само snmptrapd.

Bash trap пријемник скрипта може се користити за прослеђивање замки на Zabbix сервер са snmptrapd-а користећи trapper датотеку. Да га конфигуришите, додајте опцију traphandle у snmptrapd конфигурациону датотеку (snmptrapd.conf), погледајте пример.

snmptrapd ће можда морати да се поново покрене да би се покупиле промене у својој конфигурацији.

Конфигурисање Perl trap пријемника

Захтеви: Perl, Net-SNMP компајлирани са --enable-embedded-perl (подразумевано готово од Net-SNMP 5.4)

Perl trap пријемник (потражите misc/snmptrap/zabbix_trap_receiver.pl) може се користити за прослеђивање замки на Zabbix серверу директно из snmptrapd-а. Да га конфигуришите:

  • додајте Perl скрипту у конфигурациону датотеку snmptrapd (snmptrapd.conf), нпр.:
perl do "[FULL PATH TO PERL RECEIVER SCRIPT]";
  • конфигуришите пријемник, нпр.
$SNMPTrapperFile = '[TRAP FILE]';
       $DateTimeFormat = '[DATE TIME FORMAT]';

snmptrapd ће можда морати поново да се покрене да би се покупиле промене у својој конфигурацији.

Ако име скрипте није наведено, snmptrapd ће то одбити почните са порукама, сличним овим:

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

Прво, snmptrapd треба да буде конфигурисан да користи SNMPTT.

За најбоље перформансе, SNMPTT треба да буде конфигурисан као демон који користи snmptthandler-embedded да му пренесе замке. Видите упутства за конфигурисање SNMPTT.

Када је SNMPTT конфигурисан да прима замке, конфигуришите snmptt.ini:

  1. омогућите коришћење Perl модула из NET-SNMP пакета:
net_snmp_perl_enable = 1
  1. евидентирати замке у trap датотеку коју ће Zabbix читати:
log_enable = 1
       log_file = [TRAP FILE]
  1. подесите формат датума и времена:
date_time_format = %Y-%m-%dT%H:%M:%S%z

Пакет "net-snmp-perl" је уклоњен у RHEL 8.0-8.2; поново додат у RHEL 8.3. За више информација погледајте познате ставке.

Сада форматирајте замке за Zabbix да их препозна (уредите snmptt.conf):

  1. Свака FORMAT изјава треба да почиње са "ZBXTRAP [address]", где ће се [address] упоредити са IP и DNS адресама SNMP интерфејса на Zabbix-у. нпр.:
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
       FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
  1. Видите више о SNMP trap формату испод.

Не користите непознате замке - Zabbix неће моћи да их препозна. Непознате замке се могу руковати дефинисањем општег догађаја у snmptt.conf:

EVENT general .* "General event" Normal
SNMP trap формат

Сви прилагођени Perl trap пријемници и конфигурација SNMPTT trap морају формирати замку на следећи начин:

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

где је

  • [timestamp] - временска ознака у формату "%Y-%m-%dT%H:%M:%S%z"
  • ZBXTRAP - заглавље које указује да нова замка почиње у овом реду
  • [address] - IP адреса која се користи за проналажење домаћина за ову замку

Имајте на уму да ће "ZBXTRAP" и "[address]" бити избачени из поруке током обраде. Ако је замка другачије форматирана, Zabbix би могао рашчланити замке неочекивано.

Пример замке:

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

Ово ће резултирати следећом замком за SNMP интерфејс са 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

Системски захтеви

Подршка за велике датотеке

Zabbix има подршку за велике датотеке за SNMP trapper датотеке. Максимална датотека величине коју Zabbix може да прочита је 2^63 (8 EiB). Имајте на уму да системска датотека може наметнути доњу границу величине датотеке.

Ротација логова

Zabbix не пружа никакав систем ротације логова - то би требало да се реши од стране корисника. Ротација логова прво треба да преименује стару датотеку и тек касније да га избрише да се не би изгубиле замке:

  1. Zabbix отвара trap датотеку на последњој познатој локацији и прелази на корак 3
  2. Zabbix проверава да ли је тренутно отворена датотека ротирана за упоређивање inode броја са inode бројем дефинисане trap датотеке. Ако нема отворене датотеке, Zabbix ресетује последњу локацију и прелази на корак 1.
  3. Zabbix чита податке из тренутно отворене датотеке и поставља нову локацију.
  4. Нови подаци се рашчлањују. Ако је ово била ротирана датотека, датотека се затвара и враћа се на корак 2.
  5. Ако није било нових података, Zabbix је у стању спавања 1 секунду и враћа се назад на корак 2.
Систем датотека

Због имплементације trap датотеке, Zabbix-у је потребан систем датотеке да подржава inode-е за разликовање датотека (информације се добијају помоћу stat() позива).

Примери подешавања користећи различите верзије SNMP протокола

Овај пример користи snmptrapd и Bash скрипту пријемника за прослеђивање замки на Zabbix сервер.

Подешавање:

  1. Конфигуришите Zabbix да покрене SNMP трапер и поставите датотеку замке. Додајте у zabbix_server.conf:
StartSNMPTrapper=1
       SNMPTrapperFile=/var/lib/zabbix/snmptraps/snmptraps.log
  1. Преузмите Bash скрипту на /usr/sbin/zabbix_trap_handler.sh:
curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/7.0/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh

Ако је потребно, прилагодите променљиву ZABBIX_TRAPS_FILE у скрипти. Да бисте користили подразумевану вредност, прво креирајте родитељски директоријум:

mkdir -p /var/lib/zabbix/snmptraps
  1. Додајте следеће у snmtrapd.conf (погледајте радни пример)
traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh

snmptrapd ће можда морати да се поново покрене да би се покупиле промене у својој конфигурацији.

  1. Креирајте ТЕСТ SNMP ставке (имајте на уму почетне захтеве за конфигурацију):

Type: SNMP trap
Type of information: Log Host interface: SNMP 127.0.0.1
Key: snmptrap["linkUp"]
Log time format: yyyyMMdd.hhmmss

Имајте на уму да се користи ISO 8601 формат датума и времена.

  1. Затим ћемо конфигурисати snmptrapd за нашу изабрану верзију SNMP протокола и шаљите тестне замке користећи услужни програм snmptrap.
SNMPv1, SNMPv2

SNMPv1 и SNMPv2 протоколи се ослањају на аутентификацију "стринг заједнице". У примеру испод користићемо "тајну" као стринг заједнице. Мора бити подешен на исту вредност на SNMP трап пошиљаоцима.

Имајте на уму да иако се још увек широко користи у производним окружењима, SNMPv2 не нуди никакво шифровање и стварну аутентификацију пошиљаоца. Подаци се шаљу као обичан текст и стога ове верзије протокола треба да се користе само у безбедним окружењима као што је приватна мрежа и никада не би требало да се користе преко било које јавне мреже или мреже треће стране.

SNMP верзија 1 се заправо не користи ових дана јер се Не подржава 64-битне бројаче и сматра се застарелим протоколом.

Да бисте омогућили прихватање SNMPv1 или SNMPv2 замки, требало би да додате следећи ред у snmptrapd.conf. Замените "secret" стрингом SNMP заједнице конфигурисаним на пошиљаоцима SNMP трап-а:

authCommunity log,execute,net secret

Следеће можемо да пошаљемо тест замку користећи snmptrap. Користићемо уобичајени OID "link up" у овом примеру:

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

SNMPv3 решава безбедносне проблеме SNMPv1/v2 и обезбеђује аутентификацију и шифровање .Можете користити MD5 или вишеструке SHA методе аутентификације и DES/више AES као шифру.

Да бисте омогућили прихватање SNMPv3 додајте следеће редове у snmptrapd.conf:

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

Молимо запазите ову кључну реч која дозвољава кориснику да изврши безбедносни скрипт модел.

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

Ако желе да користе јаке методе шифровања као што је AES192 или AES256, молимо користите net-snmp почевши од верзије 5.8. Можда ћете морати да га поново компајлирате помоћу опције configureoption: --enable-blumenthal-aes. Старије верзије нет-снмп не подржавају AES192/AES256. Такође погледајте: Strong Authentication or Encryption.

Верификација

У оба примера видећете сличне редове у /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

Вредност ставке у Zabbix-у ће бити:

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

Пример за Perl:

2024-01-30T11:42:54+0200 ZBXTRAP 127.0.0.1
       PDU INFO:
          receivedfromUDP: [127.0.0.1]:58649->[127.0.0.1]:162
          notificationtypeTRAP
          version1
          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.0type=6value=OID: IF-MIB::linkUp.0

Погледајте такође