sql >> Database >  >> NoSQL >> MongoDB

ClusterControl integreren met SNMP:deel twee

Deze blogpost is een voortzetting van het vorige deel 1, waar we de basisprincipes van SNMP-integratie met ClusterControl hebben behandeld.

In deze blogpost gaan we ons concentreren op SNMP-traps en waarschuwingen. SNMP-traps zijn de meest gebruikte waarschuwingsberichten die worden verzonden vanaf een extern SNMP-apparaat (een agent) naar een centrale collector, de "SNMP-manager". In het geval van ClusterControl kan een trap een waarschuwing zijn nadat het kritieke alarm voor een cluster niet 0 is, wat aangeeft dat er iets ergs aan de hand is.

Zoals getoond in de vorige blogpost, hebben we voor deze proof-of-concept twee definities van SNMP trap-meldingen:

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 }

De meldingen (of traps) zijn criticalAlarmNotification en criticalAlarmNotificationEnded. Beide meldingsgebeurtenissen kunnen worden gebruikt om onze Nagios-service te signaleren, ongeacht of het cluster actief kritieke alarmen heeft of niet. In Nagios is de term hiervoor passieve controle, waarbij Nagios niet probeert te bepalen of host/service DOWN of ONREACHBAAR is. We zullen ook de actieve controles configureren, waarbij controles worden gestart door de controlelogica in de Nagios-daemon door de servicedefinitie te gebruiken om ook de kritieke/waarschuwingsalarmen te bewaken die door ons cluster worden gerapporteerd.

Houd er rekening mee dat voor deze blogpost de MIB- en SNMP-agent van Meerderenines correct moeten zijn geconfigureerd, zoals weergegeven in het eerste deel van deze blogserie.

Nagios Core installeren

Nagios Core is de gratis versie van de Nagios-bewakingssuite. Eerst en vooral moeten we het en alle benodigde pakketten installeren, gevolgd door de Nagios-plug-ins, snmptrapd en snmptt. Houd er rekening mee dat de instructies in deze blogpost ervan uitgaan dat alle knooppunten op CentOS 7 draaien.

Installeer de benodigde pakketten om Nagios uit te voeren:

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

Maak een nagios-gebruiker en nagcmd-groep om de externe opdrachten via de webinterface te laten uitvoeren, voeg de nagios- en apache-gebruiker toe om deel uit te maken van de nagcmd-groep:

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

Download hier de nieuwste versie van Nagios Core, compileer en installeer deze:

$ 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

Installeer de Nagios-webconfiguratie:

$ make install-webconf

Installeer optioneel het Nagios-exfoliatiethema (of je kunt je aan het standaardthema houden):

$ make install-exfoliation

Maak een gebruikersaccount (nagiosadmin) om in te loggen op de Nagios-webinterface. Onthoud het wachtwoord dat u aan deze gebruiker toewijst:

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

Herstart de Apache-webserver om de nieuwe instellingen van kracht te laten worden:

$ systemctl restart httpd
$ systemctl enable httpd

Download de Nagios-plug-ins van hier, compileer en installeer deze:

$ 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

Controleer de standaard Nagios-configuratiebestanden:

$ /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

Open de browser en ga naar http://{IPaddress}/nagios en u zou een HTTP-basisverificatie moeten zien verschijnen waarin u de gebruikersnaam als nagiosadmin moet specificeren met het eerder gemaakte wachtwoord van uw keuze.

ClusterControl-server toevoegen aan Nagios

Maak een Nagios-hostdefinitiebestand voor ClusterControl:

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

En voeg de volgende regels toe:

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
}

Enkele uitleg:

  • In de eerste sectie definiëren we onze host, met de hostnaam en het adres van de ClusterControl-server.

  • De servicesecties waar we onze servicedefinities plaatsen, worden gecontroleerd door de Nagios. De eerste twee vertellen de service in feite om de SNMP-uitvoer te controleren op een bepaald object-ID. De eerste service gaat over het kritieke alarm, daarom voegen we -c0 toe aan de opdracht check_snmp om aan te geven dat het een kritieke waarschuwing zou moeten zijn in Nagios als de waarde hoger is dan 0. Terwijl we voor de waarschuwingsalarmen dit aangeven met een waarschuwing als de waarde is 1 en hoger.

  • De laatste servicedefinitie gaat over de SNMP-traps die we zouden verwachten van de ClusterControl-server als het kritieke alarm verhoogd is hoger dan 0. Deze sectie gebruikt de snmp_trap_template-definitie, zoals weergegeven in de volgende stap.

Configureer de snmp_trap_template door de volgende regels toe te voegen aan /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
}

Voeg het ClusterControl-configuratiebestand toe aan Nagios door de volgende regel toe te voegen aan  

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

Voer een pre-flight configuratiecontrole uit:

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

Zorg ervoor dat u de volgende regel aan het einde van de uitvoer krijgt:

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

Start Nagios opnieuw om de wijziging te laden:

$ systemctl restart nagios

Als we nu naar de Nagios-pagina onder het gedeelte Service (menu aan de linkerkant) kijken, zien we zoiets als dit:

Merk op dat de rij "Kritieke alarmen - ClusterID 1" rood wordt als de door ClusterControl gerapporteerde kritieke alarmwaarde groter is dan 0, terwijl de rij "Waarschuwingsalarmen - ClusterID 1" geel is, wat aangeeft dat er een waarschuwingsalarm is gegenereerd. Als er niets interessants gebeurt, ziet u dat alles groen is voor clustercontrol.local.

Nagios configureren om een ​​valstrik te ontvangen

Traps worden door externe apparaten naar de Nagios-server gestuurd, dit wordt een passieve controle genoemd. In het ideale geval weten we niet wanneer een trap wordt verzonden, omdat het afhangt van het verzendende apparaat dat beslist dat het een trap zal sturen. Bijvoorbeeld met een UPS (back-up batterij), zodra het apparaat stroom verliest, zal het een val sturen om te zeggen "hey, ik verloor stroom". Zo is Nagios direct op de hoogte.

Om SNMP-traps te kunnen ontvangen, moeten we de Nagios-server configureren met de volgende dingen:

  • snmptrapd (SNMP trap-ontvanger-daemon)

  • snmptt (SNMP Trap Translator, de trap-handler-daemon)

Nadat de snmptrapd een trap heeft ontvangen, zal deze deze doorgeven aan snmptt waar we hem zullen configureren om het Nagios-systeem bij te werken en vervolgens zal Nagios de waarschuwing verzenden volgens de configuratie van de contactgroep.

Installeer EPEL-repository, gevolgd door de benodigde pakketten:

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

Configureer de SNMP trap-daemon op /etc/snmp/snmptrapd.conf en stel de volgende regels in:

disableAuthorization yes
traphandle default /usr/sbin/snmptthandler

Het bovenstaande betekent eenvoudigweg dat vallen die door de snmptrapd-daemon worden ontvangen, worden doorgegeven aan /usr/sbin/snmptthandler.

Voeg de SEVERALNINES-CLUSTERCONTROL-MIB.txt toe aan /usr/share/snmp/mibs door /usr/share/snmp/mibs/SEVERALNINES-CLUSTERCONTROL-MIB.txt te maken:

$ 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

Maak /etc/snmp/snmp.conf (let op zonder de "d") en voeg daar onze aangepaste MIB toe:

mibs +SEVERALNINES-CLUSTERCONTROL-MIB

Start de snmptrapd-service:

$ systemctl start snmptrapd
$ systemctl enable snmptrapd

Vervolgens moeten we de volgende configuratieregels configureren in /etc/snmp/snmptt.ini:

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

Merk op dat we de module net_snmp_perl hebben ingeschakeld en een ander configuratiepad hebben toegevoegd, /etc/snmp/snmptt-cc.conf binnen snmptt.ini. We moeten ClusterControl snmptt-gebeurtenissen hier definiëren, zodat ze kunnen worden doorgegeven aan Nagios. Maak een nieuw bestand in /etc/snmp/snmptt-cc.conf en voeg de volgende regels toe:

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

Enkele uitleg:

  • We hebben twee vallen gedefinieerd:criticalAlarmNotification en criticalAlarmNotificationEnded.

  • De criticalAlarmNotification genereert eenvoudig een kritieke waarschuwing en geeft deze door aan de "Critical alarm traps"-service die is gedefinieerd in Nagios. De $aA betekent om het IP-adres van de trap-agent te retourneren. De waarde 2 is de waarde van het controleresultaat die in dit geval kritiek is (0=OK, 1=WAARSCHUWING, 2=KRITIEK, 3=ONBEKEND).

  • CriticalAlarmNotificationEnded geeft eenvoudig een OK-waarschuwing en geeft deze door aan de service "Critical alarm traps" om de vorige val nadat alles weer normaal is geworden. De $aA betekent om het IP-adres van de trap-agent te retourneren. De waarde 0 is de waarde van het controleresultaat die in dit geval OK is. Raadpleeg dit artikel onder de sectie "FORMAT" voor meer informatie over tekenreeksvervangingen die worden herkend door snmptt.

  • U kunt snmpttconvertmib gebruiken om een ​​snmptt-gebeurtenishandlerbestand voor een bepaalde MIB te genereren.

Merk op dat het pad van de eventhandlers standaard niet wordt geleverd door de Nagios Core. Daarom moeten we die eventhandlers-map kopiëren van de Nagios-bron onder de contrib-map, zoals hieronder weergegeven:

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

We moeten ook de snmptt-groep toewijzen als onderdeel van de nagcmd-groep, zodat het de nagios.cmd kan uitvoeren in het submit_check_result-script:

$ usermod -a -G nagcmd snmptt

Start de snmptt-service:

$ systemctl start snmptt
$ systemctl enable snmptt

De SNMP Manager (Nagios-server) is nu klaar om onze inkomende SNMP-traps te accepteren en te verwerken.

Een trap verzenden vanaf de ClusterControl-server

Stel dat men een SNMP-trap naar de SNMP-manager, 192.168.10.11 (Nagios-server) wil sturen omdat het totale aantal kritieke alarmen 2 heeft bereikt voor cluster-ID 1, dan zou men de volgende opdracht uitvoeren op de ClusterControl-server (client-side), 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

Of, in OID-formaat (aanbevolen):

$ 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

Waarbij .1.3.6.1.4.1.57397.1.1.3.1 gelijk is aan criticalAlarmNotification trap-gebeurtenis, en de daaropvolgende OID's representaties zijn van respectievelijk het totale aantal huidige kritieke alarmen en de cluster-ID .

Op de Nagios-server zou je moeten opmerken dat de trap-service rood is geworden:

Je kunt het ook zien in de /var/log/messages van de volgende regel:

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

Zodra het alarm is opgelost, kunnen we, om een ​​normale trap te sturen, het volgende commando uitvoeren:

$ 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

Waarbij .1.3.6.1.4.1.57397.1.1.3.2 gelijk is aan de gebeurtenis criticalAlarmNotificationEnded, en de daaropvolgende OID's representaties zijn van het totale aantal huidige kritieke alarmen (moet in dit geval 0 zijn ) en de cluster-ID, respectievelijk.

Op de Nagios-server zou je moeten zien dat de trap-service weer groen is:

Het bovenstaande kan worden geautomatiseerd met een eenvoudig bash-script:

#!/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

Als u het script op de achtergrond wilt uitvoeren, doet u het volgende:

$ bash alarmtrapper.bash &

Op dit moment zouden we Nagios' service "Critical alarm traps" in actie moeten kunnen zien als er automatisch een storing in ons cluster optreedt.

Laatste gedachten

In deze blogserie hebben we een proof-of-concept laten zien van hoe ClusterControl kan worden geconfigureerd voor monitoring, het genereren/verwerken van traps en waarschuwingen met behulp van het SNMP-protocol. Dit markeert ook het begin van onze reis om SNMP op te nemen in onze toekomstige releases. Houd ons in de gaten, want we zullen meer updates brengen over deze geweldige functie.


  1. Hoe kan ik een veld hernoemen voor alle documenten in MongoDB?

  2. Een handleiding voor ontwikkelaars voor MongoDB-replicasets

  3. Verwijder meerdere documenten van mongo in een enkele zoekopdracht

  4. Hoe aggregeren in mongodb te gebruiken voor $match _id