sql >> Databáze >  >> NoSQL >> MongoDB

Integrace ClusterControl s SNMP:Část druhá

Tento příspěvek na blogu je pokračováním předchozí části 1, kde jsme probrali základy integrace SNMP s ClusterControl.

V tomto příspěvku na blogu se zaměříme na SNMP pasti a upozornění. SNMP depeše jsou nejčastěji používané výstražné zprávy zasílané ze vzdáleného zařízení s podporou SNMP (agenta) do centrálního kolektoru, „správce SNMP“. V případě ClusterControl může být past výstrahou poté, co kritický alarm pro cluster není 0, což znamená, že se děje něco špatného.

Jak je uvedeno v předchozím příspěvku na blogu, pro účely tohoto důkazu konceptu máme dvě definice oznámení o depeších SNMP:

criticalAlarmNotification NOTIFICATION-TYPE
    OBJECTS { totalCritical, clusterId }
    STATUS current
    DESCRIPTION
        "Notification if critical alarm is not 0"
    ::= { alarmNotification 1 }

criticalAlarmNotificationEnded NOTIFICATION-TYPE
    OBJECTS { totalCritical, clusterId }
    STATUS  current
    DESCRIPTION
        "Notification ended - Critical alarm is 0"
    ::= { alarmNotification 2 }

Oznámení (nebo pasti) jsou kritické AlarmNotification a kritické AlarmNotificationEnded. Obě oznamovací události lze použít k signalizaci naší služby Nagios, ať už má cluster aktivně kritické alarmy nebo ne. V Nagios je pro to termín pasivní kontrola, kdy se Nagios nepokouší určit, zda je hostitel/služba NEDOSTUPNÁ nebo NEDOSTUPNÁ. Nakonfigurujeme také aktivní kontroly, kde jsou kontroly iniciovány kontrolní logikou v démonu Nagios pomocí definice služby, která také monitoruje kritické/varovné alarmy hlášené naším clusterem.

Uvědomte si, že tento blogový příspěvek vyžaduje, aby byl MIB a SNMP agent několikanines správně nakonfigurován, jak je uvedeno v první části této blogové série.

Instalace Nagios Core

Nagios Core je bezplatná verze monitorovací sady Nagios. V první řadě jej musíme nainstalovat a všechny potřebné balíčky, následovat pluginy Nagios, snmptrapd a snmptt. Všimněte si, že pokyny v tomto příspěvku na blogu předpokládají, že všechny uzly běží na CentOS 7.

Nainstalujte potřebné balíčky ke spuštění Nagios:

$ yum -y install httpd php gcc glibc glibc-common wget perl gd gd-devel unzip zip sendmail net-snmp-utils net-snmp-perl

Vytvořte uživatele nagios a skupinu nagcmd pro umožnění provádění externích příkazů prostřednictvím webového rozhraní, přidejte uživatele nagios a apache jako součást skupiny nagcmd:

$ useradd nagios
$ groupadd nagcmd
$ usermod -a -G nagcmd nagios
$ usermod -a -G nagcmd apache

Stáhněte si nejnovější verzi Nagios Core odtud, zkompilujte ji a nainstalujte:

$ cd ~
$ wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.6.tar.gz
$ tar -zxvf nagios-4.4.6.tar.gz
$ cd nagios-4.4.6
$ ./configure --with-nagios-group=nagios --with-command-group=nagcmd
$ make all
$ make install
$ make install-init
$ make install-config
$ make install-commandmode

Nainstalujte webovou konfiguraci Nagios:

$ make install-webconf

Volitelně nainstalujte exfoliační motiv Nagios (nebo můžete zůstat u výchozího motivu):

$ make install-exfoliation

Vytvořte si uživatelský účet (nagiosadmin) pro přihlášení do webového rozhraní Nagios. Zapamatujte si heslo, které jste tomuto uživateli přiřadili:

$ htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Restartujte webový server Apache, aby se nová nastavení projevila:

$ systemctl restart httpd
$ systemctl enable httpd

Stáhněte si pluginy Nagios odtud, zkompilujte je a nainstalujte:

$ cd ~ 
$ wget https://nagios-plugins.org/download/nagios-plugins-2.3.3.tar.gz
$ tar -zxvf nagios-plugins-2.3.3.tar.gz
$ cd nagios-plugins-2.3.3
$ ./configure --with-nagios-user=nagios --with-nagios-group=nagios
$ make
$ make install

Ověřte výchozí konfigurační soubory Nagios:

$ /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Nagios Core 4.4.6
Copyright (c) 2009-present Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 2020-04-28
License: GPL
Website: https://www.nagios.org
Reading configuration data...
   Read main config file okay...
   Read object config files okay...
Running pre-flight check on configuration data...
Checking objects...
Checked 8 services.
Checked 1 hosts.
Checked 1 host groups.
Checked 0 service groups.
Checked 1 contacts.
Checked 1 contact groups.
Checked 24 commands.
Checked 5 time periods.
Checked 0 host escalations.
Checked 0 service escalations.
Checking for circular paths...
Checked 1 hosts
Checked 0 service dependencies
Checked 0 host dependencies
Checked 5 timeperiods
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...
Total Warnings: 0
Total Errors:   0
Things look okay - No serious problems were detected during the pre-flight check
If everything looks okay, start Nagios and configure it to start on boot:
$ systemctl start nagios
$ systemctl enable nagios

Otevřete prohlížeč a přejděte na http://{IPaddress}/nagios a měli byste vidět vyskakovací okno základního ověření HTTP, kde musíte zadat uživatelské jméno jako nagiosadmin s dříve vytvořeným heslem.

Přidání serveru ClusterControl do Nagios

Vytvořte soubor definice hostitele Nagios pro ClusterControl:

$ vim /usr/local/nagios/etc/objects/clustercontrol.cfg

A přidejte následující řádky:

define host {
        use                     linux-server
        host_name               clustercontrol.local
        alias                   clustercontrol.mydomain.org
        address                 192.168.10.50
}

define service {
        use                     generic-service
        host_name               clustercontrol.local
        service_description     Critical alarms - ClusterID 23
        check_command           check_snmp! -H 192.168.10.50 -P 2c -C private -o .1.3.6.1.4.1.57397.1.1.1.2 -c0
}

define service {
        use                     generic-service
        host_name               clustercontrol.local
        service_description     Warning alarms - ClusterID 23
        check_command           check_snmp! -H 192.168.10.50 -P 2c -C private -o .1.3.6.1.4.1.57397.1.1.1.3 -w0
}


define service {
        use                     snmp_trap_template
        host_name               clustercontrol.local
        service_description     Critical alarm traps
        check_interval          60 ; Don't clear for 1 hour
}

Některá vysvětlení:

  • V první části definujeme našeho hostitele s názvem hostitele a adresou serveru ClusterControl.

  • Sekce služeb, do kterých vkládáme definice služeb, které mají být sledovány Nagios. První dva v podstatě říkají službě, aby zkontrolovala výstup SNMP pro konkrétní ID objektu. První služba se týká kritického poplachu, proto do příkazu check_snmp přidáme -c0, abychom indikovali, že by se mělo jednat o kritický poplach v Nagios, pokud hodnota překročí 0. Zatímco u varovných poplachů jej označíme upozorněním, pokud hodnota je 1 a vyšší.

  • Poslední definice služby se týká depeší SNMP, které bychom očekávali přicházející ze serveru ClusterControl v případě kritického alarmu raise je vyšší než 0. Tato sekce bude používat definici snmp_trap_template, jak je ukázáno v dalším kroku.

Nakonfigurujte šablonu snmp_trap_template přidáním následujících řádků do /usr/local/nagios/etc/objects/templates.cfg:

define service {
        name                            snmp_trap_template
        service_description             SNMP Trap Template
        active_checks_enabled           1       ; Active service checks are enabled
        passive_checks_enabled          1       ; Passive service checks are enabled/accepted
        parallelize_check               1       ; Active service checks should be parallelized
        process_perf_data               0
        obsess_over_service             0       ; We should obsess over this service (if necessary)
        check_freshness                 0       ; Default is to NOT check service 'freshness'
        notifications_enabled           1       ; Service notifications are enabled
        event_handler_enabled           1       ; Service event handler is enabled
        flap_detection_enabled          1       ; Flap detection is enabled
        process_perf_data               1       ; Process performance data
        retain_status_information       1       ; Retain status information across program restarts
        retain_nonstatus_information    1       ; Retain non-status information across program restarts
        check_command                   check-host-alive      ; This will be used to reset the service to "OK"
        is_volatile                     1
        check_period                    24x7
        max_check_attempts              1
        normal_check_interval           1
        retry_check_interval            1
        notification_interval           60
        notification_period             24x7
        notification_options            w,u,c,r
        contact_groups                  admins       ; Modify this to match your Nagios contactgroup definitions
        register                        0
}

Zahrňte konfigurační soubor ClusterControl do Nagios přidáním následujícího řádku dovnitř  

/usr/local/nagios/etc/nagios.cfg:
cfg_file=/usr/local/nagios/etc/objects/clustercontrol.cfg

Spusťte předletovou kontrolu konfigurace:

$ /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Ujistěte se, že máte na konci výstupu následující řádek:

"Things look okay - No serious problems were detected during the pre-flight check"

Restartujte Nagios, aby se změna načetla:

$ systemctl restart nagios

Nyní, když se podíváme na stránku Nagios v sekci Služba (levé menu), uvidíme něco takového:

Všimněte si, že řádek "Kritické alarmy - ClusterID 1" zčervená, pokud je kritická hodnota alarmu hlášená ClusterControl větší než 0, zatímco "Výstražné alarmy - ClusterID 1" je žlutý, což znamená, že byl spuštěn varovný alarm. V případě, že se nic zajímavého nestane, uvidíte, že u clustercontrol.local je vše zelené.

Konfigurace Nagios pro příjem pasti

Pasti jsou odesílány vzdálenými zařízeními na server Nagios, nazývá se to pasivní kontrola. V ideálním případě nevíme, kdy bude past odeslána, protože to závisí na tom, zda se vysílající zařízení rozhodne, že past pošle. Například u UPS (záložní baterie), jakmile zařízení ztratí napájení, vyšle past s oznámením "hej, ztratil jsem napájení". Tímto způsobem je Nagios okamžitě informován.

Abychom mohli přijímat depeše SNMP, musíme server Nagios nakonfigurovat pomocí následujících věcí:

  • snmptrapd (démon přijímače depeší SNMP)

  • snmptt (SNMP Trap Translator, démon manipulátoru pastí)

Poté, co snmptrapd přijme past, předá ji snmptt, kde ji nakonfigurujeme tak, aby aktualizovala systém Nagios a poté Nagios odešle výstrahu podle konfigurace skupiny kontaktů.

Nainstalujte úložiště EPEL a poté potřebné balíčky:

$ yum -y install epel-release
$ yum -y install net-snmp snmptt net-snmp-perl perl-Sys-Syslog

Nakonfigurujte démona SNMP trap v /etc/snmp/snmptrapd.conf a nastavte následující řádky:

disableAuthorization yes
traphandle default /usr/sbin/snmptthandler

Výše uvedené jednoduše znamená, že pasti přijaté démonem snmptrapd budou předány do /usr/sbin/snmptthandler.

Přidejte soubor SEVERALNINES-CLUSTERCONTROL-MIB.txt do /usr/share/snmp/mibs vytvořením /usr/share/snmp/mibs/SEVERALNINES-CLUSTERCONTROL-MIB.txt:

$ ll /usr/share/snmp/mibs/SEVERALNINES-CLUSTERCONTROL-MIB.txt
-rw-r--r-- 1 root root 4029 May 30 20:08 /usr/share/snmp/mibs/SEVERALNINES-CLUSTERCONTROL-MIB.txt

Vytvořte /etc/snmp/snmp.conf (všimněte si bez „d“) a přidejte tam náš vlastní MIB:

mibs +SEVERALNINES-CLUSTERCONTROL-MIB

Spusťte službu snmptrapd:

$ systemctl start snmptrapd
$ systemctl enable snmptrapd

Dále musíme nakonfigurovat následující konfigurační řádky uvnitř /etc/snmp/snmptt.ini:

net_snmp_perl_enable = 1
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf
/etc/snmp/snmptt-cc.conf
END

Všimněte si, že jsme povolili modul net_snmp_perl a přidali další konfigurační cestu, /etc/snmp/snmptt-cc.conf do snmptt.ini. Zde musíme definovat události ClusterControl snmptt, aby mohly být předány do Nagios. Vytvořte nový soubor v /etc/snmp/snmptt-cc.conf a přidejte následující řádky:

MIB: SEVERALNINES-CLUSTERCONTROL-MIB (file:/usr/share/snmp/mibs/SEVERALNINES-CLUSTERCONTROL-MIB.txt) converted on Sun May 30 19:17:33 2021 using snmpttconvertmib v1.4.2

EVENT criticalAlarmNotification .1.3.6.1.4.1.57397.1.1.3.1 "Status Events" Critical
FORMAT Notification if the critical alarm is not 0
EXEC /usr/local/nagios/share/eventhandlers/submit_check_result $aA "Critical alarm traps" 2 "Critical - Critical alarm is $1 for cluster ID $2"
SDESC
Notification if critical alarm is not 0
Variables:
  1: totalCritical
  2: clusterId
EDESC

EVENT criticalAlarmNotificationEnded .1.3.6.1.4.1.57397.1.1.3.2 "Status Events" Normal
FORMAT Notification if the critical alarm is not 0
EXEC /usr/local/nagios/share/eventhandlers/submit_check_result $aA "Critical alarm traps" 0 "Normal - Critical alarm is $1 for cluster ID $2"
SDESC
Notification ended - critical alarm is 0
Variables:
  1: totalCritical
  2: clusterId
EDESC

Některá vysvětlení:

  • Máme definovány dvě pasti – kritické AlarmNotification a kritické AlarmNotificationEnded.

  • Kritické upozornění na alarm jednoduše vyvolá kritické upozornění a předá ho službě „Critical alarm traps“ definované v Nagios. $aA znamená vrátit IP adresu agenta trapu. Hodnota 2 je hodnota výsledku kontroly, která je v tomto případě kritická (0=OK, 1=VAROVÁNÍ, 2=KRITICKÉ, 3=NEZNÁMÉ).

  • Kritický AlarmNotificationEnded jednoduše vyvolá výstrahu OK a předá ji službě „Critical alarm traps“, aby zrušil předchozí past poté, co se vše vrátí do normálu. $aA znamená vrátit IP adresu agenta trapu. Hodnota 0 je výsledná hodnota kontroly, což je v tomto případě v pořádku. Další podrobnosti o substitucích řetězců rozpoznávaných snmptt naleznete v tomto článku v části "FORMÁT".

  • Můžete použít snmpttconvertmib ke generování souboru obsluhy události snmptt pro konkrétní MIB.

Všimněte si, že ve výchozím nastavení není cesta k obslužným rutinám událostí poskytována jádrem Nagios. Proto musíme zkopírovat tento adresář eventhandlers ze zdroje Nagios do adresáře contrib, jak je znázorněno níže:

$ cp -Rf nagios-4.4.6/contrib/eventhandlers /usr/local/nagios/share/
$ chown -Rf nagios:nagios /usr/local/nagios/share/eventhandlers

Musíme také přiřadit skupinu snmptt jako součást skupiny nagcmd, aby mohla spustit nagios.cmd uvnitř skriptu submit_check_result:

$ usermod -a -G nagcmd snmptt

Spusťte službu snmptt:

$ systemctl start snmptt
$ systemctl enable snmptt

Správce SNMP (server Nagios) je nyní připraven přijímat a zpracovávat naše příchozí depeše SNMP.

Odeslání depeše ze serveru ClusterControl

Předpokládejme, že chcete odeslat SNMP trap správci SNMP, 192.168.10.11 (server Nagios), protože celkový počet kritických alarmů dosáhl 2 pro cluster ID 1, spustíte následující příkaz na server ClusterControl (na straně klienta), 192.168.10.50:

$ snmptrap -v2c -c private 192.168.10.11 '' SEVERALNINES-CLUSTERCONTROL-MIB::criticalAlarmNotification \
SEVERALNINES-CLUSTERCONTROL-MIB::totalCritical i 2 \
SEVERALNINES-CLUSTERCONTROL-MIB::clusterId i 1

Nebo ve formátu OID (doporučeno):

$ snmptrap -v2c -c private 192.168.10.11 '' .1.3.6.1.4.1.57397.1.1.3.1 \
.1.3.6.1.4.1.57397.1.1.1.2 i 2 \
.1.3.6.1.4.1.57397.1.1.1.4 i 1

Kde, .1.3.6.1.4.1.57397.1.1.3.1 se rovná události trapu kritického AlarmNotification a následující OID představují celkový počet aktuálních kritických alarmů a ID clusteru, v tomto pořadí .

Na serveru Nagios byste si měli všimnout, že služba trap zčervenala:

Můžete to také vidět v /var/log/messages na následujícím řádku:

May 30 23:52:39 ip-10-15-2-148 snmptrapd[27080]: 2021-05-30 23:52:39 UDP: [192.168.10.50]:33151->[192.168.10.11]:162 [UDP: [192.168.10.50]:33151->[192.168.10.11]:162]:#012DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2423020) 6:43:50.20#011SNMPv2-MIB::snmpTrapOID.0 = OID: SEVERALNINES-CLUSTERCONTROL-MIB::criticalAlarmNotification#011SEVERALNINES-CLUSTERCONTROL-MIB::totalCritical = INTEGER: 2#011SEVERALNINES-CLUSTERCONTROL-MIB::clusterId = INTEGER: 1
May 30 23:52:42 nagios.local snmptt[29557]: .1.3.6.1.4.1.57397.1.1.3.1 Critical "Status Events" UDP192.168.10.5033151-192.168.10.11162 - Notification if critical alarm is not 0
May 30 23:52:42 nagios.local nagios: EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;192.168.10.50;Critical alarm traps;2;Critical - Critical alarm is 2 for cluster ID 1
May 30 23:52:42 nagios.local nagios: PASSIVE SERVICE CHECK: clustercontrol.local;Critical alarm traps;0;PING OK - Packet loss = 0%, RTA = 22.16 ms
May 30 23:52:42 nagios.local nagios: SERVICE NOTIFICATION: nagiosadmin;clustercontrol.local;Critical alarm traps;CRITICAL;notify-service-by-email;Critical - Critical alarm is 2 for cluster ID 1
May 30 23:52:42 nagios.local nagios: SERVICE ALERT: clustercontrol.local;Critical alarm traps;CRITICAL;HARD;1;Critical - Critical alarm is 2 for cluster ID 1

Po vyřešení alarmu můžeme pro odeslání normální pasti provést následující příkaz:

$ snmptrap -c private -v2c 192.168.10.11 '' .1.3.6.1.4.1.57397.1.1.3.2 \ 
.1.3.6.1.4.1.57397.1.1.1.2 i 0 \
.1.3.6.1.4.1.57397.1.1.1.4 i 1

Kde, .1.3.6.1.4.1.57397.1.1.3.2 se rovná události kritický AlarmNotificationEnded a následující OID představují celkový počet aktuálních kritických alarmů (v tomto případě by měla být 0 ) a ID clusteru.

Na serveru Nagios byste si měli všimnout, že služba trap je opět zelená:

Výše uvedené lze automatizovat pomocí jednoduchého bash skriptu:

#!/bin/bash
# alarmtrapper.bash - SNMP trapper for ClusterControl alarms

CLUSTER_ID=1
SNMP_MANAGER=192.168.10.11
INTERVAL=10

send_critical_snmp_trap() {
        # send critical trap
        local val=$1
        snmptrap -v2c -c private ${SNMP_MANAGER} '' .1.3.6.1.4.1.57397.1.1.3.1 .1.3.6.1.4.1.57397.1.1.1.1 i ${val} .1.3.6.1.4.1.57397.1.1.1.4 i ${CLUSTER_ID}
}

send_zero_critical_snmp_trap() {
        # send OK trap
        snmptrap -v2c -c private ${SNMP_MANAGER} '' .1.3.6.1.4.1.57397.1.1.3.2 .1.3.6.1.4.1.57397.1.1.1.1 i 0 .1.3.6.1.4.1.57397.1.1.1.4 i ${CLUSTER_ID}
}

while true; do
        count=$(s9s alarm --list --long --cluster-id=${CLUSTER_ID} --batch | grep CRITICAL | wc -l)
        [ $count -ne 0 ] && send_critical_snmp_trap $count || send_zero_critical_snmp_trap
        sleep $INTERVAL
done

Chcete-li spustit skript na pozadí, jednoduše proveďte:

$ bash alarmtrapper.bash &

V tuto chvíli bychom měli být schopni vidět službu Nagios „Kritické poplachové pasti“ v akci, pokud automaticky dojde k selhání v našem clusteru.

Poslední myšlenky

V této sérii blogů jsme ukázali, jak lze ClusterControl nakonfigurovat pro monitorování, generování/zpracování pastí a upozorňování pomocí protokolu SNMP. To také znamená začátek naší cesty k začlenění SNMP do našich budoucích verzí. Zůstaňte naladěni, protože přineseme další aktualizace této skvělé funkce.


  1. Redis:Je ZADD lepší než O(logN), když je vložený prvek na začátku nebo na konci?

  2. Hledáte řešení mezi nastavením mnoha časovačů nebo použitím naplánované fronty úloh

  3. Jak uložit a načíst slovník pomocí redis

  4. Limit velikosti jednoho dokumentu MongoDB je 16 MB