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 трапер чита и анализира датотеку замке
  5. За сваку замку, Zabbix проналази све ставке "SNMP трапера" са интерфејсима домаћина који одговарају примљеној адреси замке. Имајте на уму да се само изабрана "IP" или "DNS" у интерфејсу домаћина користи током упаривања.
  6. За сваку пронађену ставку, замка се упоређује са регуларним изразом у snmptrap[regexp]. Замка се поставља као вредност свих упарених ставки. Ако се не пронађе одговарајућа ставка и постоји ставка snmptrap.fallback, замка се поставља као њена вредност.
  7. Ако замка није постављена као вредност ниједне ставке, Zabbix подразумевано евидентира неусклађену замку. (Ово се конфигурише помоћу "Евидентирај неусклађене SNMP замке" у Администрација > Опште > Остало.)
Напомене о HA преласку на грешку

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

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

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

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

    Адреса из сваке примљене замке биће упоређена са IP и DNS адресама свих SNMP интерфејса да би се пронашли одговарајући домаћини.

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

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

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

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

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

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

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

StartSNMPTrapper=1
       SNMPTrapperFile=[ДАТОТЕКА ЗАМПКИ]

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

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

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

Bash trap пријемник скрипта може се користити за прослеђивање 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 треба конфигурисати као демона користећи snmpthandler-embedded за прослеђивање замки. Погледајте упутства за конфигурисање SNMPTT-а.

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

  1. омогућите употребу Perl модула из NET-SNMP пакета:
net_snmp_perl_enable = 1
  1. евидентирајте клопке у датотеку клопки коју ће Zabbix читати:
log_enable = 1
       log_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 [адреса]", где ће [адреса] бити упоређена са IP и DNS адресама SNMP интерфејса на Zabbix-у. Нпр.:
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Статусни догађаји" Normal
       FORMAT ZBXTRAP $aA Уређај поново иницијализован (coldStart)
  1. Више о формату SNMP замки погледајте испод.

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

EVENT general .* "Општи догађај" Нормално
Формат SNMP замке

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

[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 Нормални "Статусни догађаји" localhost - ZBXTRAP 192.168.1.1 Линк прекинут на интерфејсу 2. Административно стање: 1. Оперативно стање: 2

Ово ће резултирати следећом клопком за SNMP интерфејс са IP=192.168.1.1:

2024-01-11T15:28:47+0200 .1.3.6.1.6.3.1.1.5.3 Нормални "Статусни догађаји"
       localhost - Линк прекинут на интерфејсу 2. Административно стање: 1. Оперативно стање: 2

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

Препоручује се да инсталирате MIB датотеке како бисте осигурали да се вредности ставки приказују у исправном формату. Без MIB датотека, може доћи до проблема са форматирањем, као што је приказивање вредности у HEX уместо UTF-8 формату или обрнуто.

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

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/trunk/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 ставку ТЕСТ (имајте на уму почетне захтеве за конфигурацију):

Тип: SNMP trap
Тип информација: Дневник Интерфејс хоста: SNMP 127.0.0.1
Кључ: snmptrap["linkUp"]
Формат времена дневника: ggggMMdd.hhmmss

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

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

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

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

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

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

authCommunity log,execute,net secret

Затим можемо послати тест замку користећи snmptrap. У овом примеру ћемо користити уобичајени OID за „линк-уп“:

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

Имајте на уму кључну реч „execute“ која омогућава извршавање скрипти за овај модел безбедности корисника.

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. Можда ћете морати да га поново компајлирате са опцијом configure: --enable-blumenthal-aes.

Старије верзије net-snmp не подржавају AES192/AES256. Погледајте такође: Јака аутентификација или шифровање.

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

У оба примера видећете сличне редове у вашем /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:
            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.0type=6value=OID: IF-MIB::linkUp.0

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