sql >> Database teknologi >  >> NoSQL >> MongoDB

Integration af ClusterControl med SNMP:Anden del

Dette blogindlæg er en fortsættelse af den forrige del 1, hvor vi har dækket det grundlæggende i SNMP-integration med ClusterControl.

I dette blogindlæg vil vi fokusere på SNMP-fælder og alarmering. SNMP-fælder er de hyppigst anvendte advarselsmeddelelser, der sendes fra en ekstern SNMP-aktiveret enhed (en agent) til en central opsamler, "SNMP-manageren". I tilfælde af ClusterControl kan en fælde være en alarm, efter at den kritiske alarm for en klynge ikke er 0, hvilket indikerer, at der sker noget slemt.

Som vist i det forrige blogindlæg har vi med henblik på dette proof-of-concept to definitioner af SNMP-fælde-meddelelser:

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 }

Meddelelserne (eller fælderne) er criticalAlarmNotification og criticalAlarmNotificationEnded. Begge notifikationshændelser kan bruges til at signalere vores Nagios-tjeneste, uanset om klyngen aktivt har kritiske alarmer eller ej. I Nagios er betegnelsen for dette passiv kontrol, hvorved Nagios ikke forsøger at afgøre, om værten/tjenesten er NED eller UÅNGELIG. Vi vil også konfigurere de aktive kontroller, hvor kontroller initieres af kontrollogikken i Nagios-dæmonen ved at bruge tjenestedefinitionen til også at overvåge de kritiske/advarselsalarmer, der rapporteres af vores klynge.

Bemærk, at dette blogindlæg kræver, at Severalnines MIB- og SNMP-agenten er konfigureret korrekt som vist i den første del af denne blogserie.

Installation af Nagios Core

Nagios Core er den gratis version af Nagios-overvågningspakken. Først og fremmest skal vi installere det og alle nødvendige pakker, efterfulgt af Nagios plugins, snmptrapd og snmptt. Bemærk, at instruktionerne i dette blogindlæg forudsætter, at alle noder kører på CentOS 7.

Installer de nødvendige pakker for at køre Nagios:

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

Opret en nagios-bruger og nagcmd-gruppe for at tillade, at de eksterne kommandoer kan udføres via webgrænsefladen, tilføj nagios- og apache-brugeren til at være en del af nagcmd-gruppen:

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

Download den seneste version af Nagios Core herfra, kompilér og installer den:

$ 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

Installer Nagios-webkonfigurationen:

$ make install-webconf

Installer eventuelt Nagios-eksfolieringstemaet (eller du kan holde dig til standardtemaet):

$ make install-exfoliation

Opret en brugerkonto (nagiosadmin) til at logge ind på Nagios-webgrænsefladen. Husk adgangskoden, som du tildeler denne bruger:

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

Genstart Apache-webserveren for at få de nye indstillinger til at træde i kraft:

$ systemctl restart httpd
$ systemctl enable httpd

Download Nagios-plugins herfra, kompilér og installer det:

$ 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

Bekræft standard Nagios-konfigurationsfilerne:

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

Åbn browseren og gå til http://{IPaddress}/nagios, og du skulle se en grundlæggende HTTP-godkendelse dukker op, hvor du skal angive brugernavnet som nagiosadmin med din valgte adgangskode oprettet tidligere.

Tilføjelse af ClusterControl-server til Nagios

Opret en Nagios-værtsdefinitionsfil til ClusterControl:

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

Og tilføj følgende linjer:

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
}

Nogle forklaringer:

  • I den første sektion definerer vi vores vært med værtsnavnet og adressen på ClusterControl-serveren.

  • Servicesektionerne, hvor vi sætter vores servicedefinitioner til at blive overvåget af Nagios. De første to fortæller grundlæggende, at tjenesten skal kontrollere SNMP-outputtet for et bestemt objekt-id. Den første service handler om den kritiske alarm, derfor tilføjer vi -c0 i check_snmp kommandoen for at indikere, at det skal være en kritisk alarm i Nagios, hvis værdien går ud over 0. Mens vi for advarselsalarmerne vil indikere det med en advarsel, hvis værdien er 1 og højere.

  • Den sidste servicedefinition handler om de SNMP-fælder, som vi ville forvente kommer fra ClusterControl-serveren, hvis den kritiske alarm hævet er højere end 0. Dette afsnit vil bruge snmp_trap_template-definitionen, som vist i næste trin.

Konfigurer snmp_trap_template ved at tilføje følgende linjer i /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
}

Inkluder ClusterControl-konfigurationsfilen i Nagios ved at tilføje følgende linje i  

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

Kør en konfigurationskontrol før flyvning:

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

Sørg for, at du får følgende linje i slutningen af ​​outputtet:

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

Genstart Nagios for at indlæse ændringen:

$ systemctl restart nagios

Hvis vi nu ser på Nagios-siden under Service-sektionen (menuen til venstre), vil vi se noget som dette:

Bemærk, at rækken "Kritiske alarmer - ClusterID 1" bliver rød, hvis den kritiske alarmværdi, der rapporteres af ClusterControl, er større end 0, mens "Advarselsalarmer - ClusterID 1" er gul, hvilket indikerer, at der er udløst en advarselsalarm. Hvis der ikke sker noget interessant, vil du se, at alt er grønt for clustercontrol.local.

Konfiguration af Nagios til at modtage en fælde

Fælder sendes af eksterne enheder til Nagios-serveren, dette kaldes en passiv kontrol. Ideelt set ved vi ikke, hvornår en fælde vil blive sendt, da det afhænger af, at den afsendende enhed beslutter, at den vil sende en fælde. For eksempel med en UPS (batteri backup), så snart enheden mister strømmen, vil den sende en fælde for at sige "hej, jeg mistede strømmen". På denne måde informeres Nagios med det samme.

For at modtage SNMP-fælder skal vi konfigurere Nagios-serveren med følgende ting:

  • snmptrapd (SNMP trap-modtagerdæmon)

  • snmptt (SNMP Trap Translator, fældehåndteringsdæmonen)

Når snmptrapd'en har modtaget en fælde, sender den den til snmptt, hvor vi konfigurerer den til at opdatere Nagios-systemet, og derefter sender Nagios advarslen i henhold til kontaktgruppekonfigurationen.

Installer EPEL-lageret efterfulgt af de nødvendige pakker:

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

Konfigurer SNMP trap-dæmonen på /etc/snmp/snmptrapd.conf og indstil følgende linjer:

disableAuthorization yes
traphandle default /usr/sbin/snmptthandler

Ovenstående betyder ganske enkelt, at fælder modtaget af snmptrapd-dæmonen vil blive videregivet til /usr/sbin/snmptthandler.

Tilføj SEVERALNINES-CLUSTERCONTROL-MIB.txt til /usr/share/snmp/mibs ved at oprette /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

Opret /etc/snmp/snmp.conf (bemærk uden "d") og tilføj vores tilpassede MIB der:

mibs +SEVERALNINES-CLUSTERCONTROL-MIB

Start snmptrapd-tjenesten:

$ systemctl start snmptrapd
$ systemctl enable snmptrapd

Dernæst skal vi konfigurere følgende konfigurationslinjer inde i /etc/snmp/snmptt.ini:

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

Bemærk, at vi aktiverede net_snmp_perl-modulet og har tilføjet en anden konfigurationssti, /etc/snmp/snmptt-cc.conf inde i snmptt.ini. Vi skal definere ClusterControl snmptt-begivenheder her, så de kan videregives til Nagios. Opret en ny fil på /etc/snmp/snmptt-cc.conf og tilføj følgende linjer:

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

Nogle forklaringer:

  • Vi har to fælder defineret - criticalAlarmNotification og criticalAlarmNotificationEnded.

  • CriticalAlarmNotification rejser simpelthen en kritisk alarm og sender den til "Kritiske alarmfælder"-tjenesten defineret i Nagios. $aA betyder at returnere trap-agentens IP-adresse. Værdien 2 er kontrolresultatværdien, som i dette tilfælde er kritisk (0=OK, 1=ADVARSEL, 2=KRITISK, 3=UKENDT).

  • The criticalAlarmNotificationEnded rejser simpelthen en OK-advarsel og sender den til "Kritiske alarmfælder"-tjenesten for at annullere forrige fælde, efter at alt er tilbage til det normale. $aA betyder at returnere trap-agentens IP-adresse. Værdien 0  er kontrolresultatværdien, som i dette tilfælde er OK. For flere detaljer om strengerstatninger, der genkendes af snmptt, se denne artikel under afsnittet "FORMAT".

  • Du kan bruge snmpttconvertmib til at generere snmptt-hændelseshåndteringsfil for en bestemt MIB.

Bemærk, at hændelseshandlerstien som standard ikke leveres af Nagios Core. Derfor er vi nødt til at kopiere denne eventhandler-mappe fra Nagios-kilden under bidragsmappen, som vist nedenfor:

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

Vi skal også tildele snmptt-gruppen som en del af nagcmd-gruppen, så den kan udføre nagios.cmd inde i submit_check_result-scriptet:

$ usermod -a -G nagcmd snmptt

Start snmptt-tjenesten:

$ systemctl start snmptt
$ systemctl enable snmptt

SNMP Manager (Nagios-serveren) er nu klar til at acceptere og behandle vores indgående SNMP-fælder.

Sender en fælde fra ClusterControl-serveren

Antag at man ønsker at sende en SNMP-fælde til SNMP-manageren, 192.168.10.11 (Nagios-server), fordi det samlede antal kritiske alarmer har nået 2 for klynge-ID 1, ville man køre følgende kommando på ClusterControl-serveren (klientsiden), 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

Eller i OID-format (anbefalet):

$ 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

Hvor, .1.3.6.1.4.1.57397.1.1.3.1 er lig med criticalAlarmNotification trap-hændelse, og de efterfølgende OID'er er repræsentationer af henholdsvis det samlede antal aktuelle kritiske alarmer og klynge-id'et .

På Nagios-serveren bør du bemærke, at trap-tjenesten er blevet rød:

Du kan også se det i /var/log/messages på følgende linje:

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

Når alarmen er løst, for at sende en normal fælde, kan vi udføre følgende kommando:

$ 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

Hvor, .1.3.6.1.4.1.57397.1.1.3.2 er lig med criticalAlarmNotificationEnded hændelse, og de efterfølgende OID'er er repræsentationer af det samlede antal aktuelle kritiske alarmer (skal være 0 i dette tilfælde ) og henholdsvis klynge-id'et.

På Nagios-serveren bør du bemærke, at trap-tjenesten er tilbage til grøn:

Ovenstående kan automatiseres med et simpelt 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

For at køre scriptet i baggrunden skal du blot gøre:

$ bash alarmtrapper.bash &

På dette tidspunkt burde vi være i stand til at se Nagios' "Kritiske alarmfælder"-tjeneste i aktion, hvis der er en fejl i vores klynge automatisk.

Sidste tanker

I denne blogserie har vi vist et proof-of-concept om, hvordan ClusterControl kan konfigureres til overvågning, generering/bearbejdning af fælder og alarmering ved hjælp af SNMP-protokol. Dette markerer også begyndelsen på vores rejse for at inkorporere SNMP i vores fremtidige udgivelser. Hold dig opdateret, da vi vil bringe flere opdateringer om denne spændende funktion.


  1. nginx uwsgi websockets 502 Bad Gateway upstream lukkede for tidligt forbindelse under læsning af svarheader fra upstream

  2. MongoDB Aggregation med summen af ​​matrixværdier

  3. Sådan henter du detaljerne fra mongo db og sender eller gemmer i objekt i nodejs Fork-metoden

  4. Sådan rydder du konsol i MongoDB