sql >> Databasteknik >  >> NoSQL >> MongoDB

Integrering av ClusterControl med SNMP - A Proof of Concept:Del ett

ClusterControl kommer med ett antal distinkta varningar (eller larm) som du inte hittar i andra övervakningssystem. ClusterControl förstår en databasklustertopologi som en helhet - alla databasnoder och relationen mellan dem, inklusive de beroende noderna eller klustren som slavkluster, omvänd proxy och arbitratornoder. Till exempel kan ClusterControl detektera och rapportera ett partitionerat kluster, tidsdrift mellan alla noder i klustret, klusteråterställningsfel, kluster-till-kluster replikeringsfel och många fler klusteromfattande specifika larm. Därför skulle det vara bra om vi kunde integrera ClusterControl-larm med alla befintliga SNMP-baserade övervaknings- eller personsökningssystem.

I den här bloggserien kommer vi att visa upp ett proof of concept om hur man integrerar ClusterControl med SNMP-protokoll. I slutet av bloggserien skulle vi i slutändan kunna skicka en SNMP-fälla till en SNMP-hanterare (Nagios, Zabbix, etc). I den här delen kommer vi att täcka följande delar:

  • MIB (SNMP-objektdefinition)
  • SNMP-agent (rapportering)

Arkitektur

I det här exemplet har vi en Nagios-server som SNMP-hanterare, med en ClusterControl-server (SNMP-agent) som övervakar ett 3-nods Galera Cluster som illustreras i följande diagram:

Alla instruktioner i det här inlägget är baserade på CentOS 7.

Installera SNMP på ClusterControl-servern

1) Installera SNMP-relaterade paket:

$ yum -y install net-snmp net-snmp-perl net-snmp-utils perl-Net-SNMP perl-CPAN

2) Se till att innehållet i /etc/snmp/snmpd.conf har följande:

$ grep -v '^\s*$\|^\s*\#' /etc/snmp/snmpd.conf
com2sec   notConfigUser  default              public
com2sec   mynet          192.168.10.0/16      private
com2sec   mynet          localhost            private
group   notConfigGroup v1            notConfigUser
group   notConfigGroup v2c           notConfigUser
group   myGroup        v2c           mynet
view    all           included   .1
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
access  notConfigGroup ""      any       noauth    exact  systemview none none
access  myGroup        ""      any       noauth    exact  all        all  none
master agentx
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <[email protected]> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes

En liten förklaring:

  • Severalnines MIB är en privat komponent, därför behöver vi endast tillåta vårt nätverk, 192.168.10.0/16 och localhost för att fråga efter SNMP-data. Vi definierar detta i avsnittet "com2sec".

  • Sedan skapar vi en säkerhetsgrupp som heter "myGroup", som endast tillåter anslutningar från "mynet"-nätverket, och accepterar protokoll SNMP version 2c.

  • Sedan definierar vi vyn (vad som kan ses från begäranden). "alla" betyder att SNMP-begäraren kan se allt (med början från OID .1). "systemview" är endast begränsad till säker-till-offentlig information som värdnamn, datum och tid, etc, vilket är standard för offentliga SNMP-användare.

  • Då tillåter vi "min grupp" att ha en "alla"-vy.

3) Starta om SNMP-tjänsten för att ladda ändringarna:

$ systemctl restart snmpd

4) Nu borde du kunna se några MIB:er om vi utför snmpwalk:

$ snmpwalk -v2c -cpublic localhost # should return limited entries
$ snmpwalk -v2c -cprivate localhost # should return thousands of entries because the private view starts with .1

Installera ClusterControl MIBs på ClusterControl-servern

MIB står för Management Information Base. Det är en formaterad textfil som listar de dataobjekt som används av en viss del av SNMP-utrustning. Utan MIB kan OID som används av SNMP inte översättas till en "sak". SNMP MIB-definitionerna är skrivna i kortfattat MIB-format i enlighet med RFC 1212. Severalnines har sitt eget Private Enterprise Number (PEN), 57397. Du kan kontrollera den registrerade företagsnummerdatabasen här.

1) Kopiera SEVERALNINES-CLUSTERCONTROL-MIB.txt och placera den under /usr/share/snmp/mibs. För att kontrollera vilken MIB-sökväg SNMP skulle leta efter, använd detta kommando:

$ net-snmp-config --default-mibdirs

2) För att ladda vår anpassade MIB måste vi skapa en ny konfigurationsfil på /etc/snmp/snmp.conf (meddelande utan "d") och lägga till följande rad:

mibs +SEVERALNINES-CLUSTERCONTROL-MIB

3) Lägg till följande rad i /etc/sysconfig/snmpd för att tillåta fjärråtkomst till SNMP-tjänsten:

OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"

4) Starta om SNMP-demonen för att ladda ändringen:

$ systemctl restart snmpd

5) För att se om MIB är korrekt laddad, använd kommandot snmptranslate:

$ snmptranslate -IR -On -Tp severalnines
+--severalnines(57397)
   |
   +--clustercontrolMIB(1)
      |
      +--alarms(1)
         |
         +--alarmSummary(1)
         |  |
         |  +-- -R-- Integer32 totalAlarms(1)
         |  |        Range: 0..2147483647
         |  +-- -R-- Integer32 totalCritical(2)
         |  |        Range: 0..2147483647
         |  +-- -R-- Integer32 totalWarning(3)
         |  |        Range: 0..2147483647
         |  +-- -R-- Integer32 clusterId(4)
         |           Range: 0..2147483647
         |
         +--alarmSummaryGroup(2)
         |
         +--alarmNotification(3)
            |
            +--criticalAlarmNotification(1)
            +--criticalAlarmNotificationEnded(2)

Ovanstående utdata visar att vi har laddat vår ClusterControls MIB. För detta proof-of-concept har vi bara en huvudkomponent som kallas "larm", och under den har vi 3 underkomponenter vid sidan av deras datatyp:

  • larmSummary - Sammanfattning av larm. Visar bara kritisk, varning och motsvarande kluster-ID.

  • alarmSummaryGroup - Gruppering av våra SNMP-objekt.

  • larmmeddelande - Detta är för definition av SNMP-fällan. Utan detta kommer vår SNMP-fälla inte att förstås av SNMP-hanteraren.

Numreringen bredvid anger objektidentifieraren (OID). Till exempel är totalWarning OID .1.3.6.1.4.1.57397.1.1.1.3 och kritisk AlarmNotification OID är .1.3.6.1.4.1.57397.1.1.3.1. För privata organisationer börjar OID alltid med ".1.3.6.1.4.1", följt av företagsnumret (57397 är Severalnines PEN) och sedan MIB-objekten.

Installera SNMP-agenten på ClusterControl-servern

För att "servera" SNMP-objektets utdata (antalet kritiska larm, kluster-id och så vidare), måste vi utöka SNMP-demonen med en SNMP-agent. I SNMP kallar de detta protokoll som AgentX, vilket vi har definierat i snmpd.conf under detta avsnitt:

master agentx

För detta proof-of-concept har jag förberett ett skript skrivet i Perl för att hämta och rapportera larmets sammanfattning till SNMP/OID-formatering.

1) Installera Perl SNMP-komponent:

$ yum install perl-Net-SNMP

2) Placera clustercontrol-snmp-agent.pl var som helst tillgänglig med SNMP-processen. Det rekommenderas att placera det under katalogen /usr/share/snmp.

$ ls -al /usr/share/snmp/clustercontrol-snmp-agent.pl
-rwxr-xr-x 1 root root 2974 May 10 14:16 /usr/share/snmp/clustercontrol-snmp-agent.pl

3) Konfigurera följande rader i skriptet (rad 14 till 17):

my $clusterId = 23; # cluster ID that you want to monitor
my $totalAlarm = `/bin/s9s alarms --list --cluster-id=$clusterId --batch | wc -l`;
my $criticalAlarm = `/bin/s9s alarms --list --cluster-id=$clusterId --batch | grep CRITICAL | wc -l`;
my $warningAlarm = `/bin/s9s alarms --list --cluster-id=$clusterId --batch | grep WARNING | wc -l`;

4) Ställ in skriptet med körbar behörighet:

$ chmod 755 /usr/share/snmp/clustercontrol-snmp-agent.pl

5) Kör skriptet:

$ perl /usr/share/snmp/clustercontrol-snmp-agent.pl
NET-SNMP version 5.7.2 AgentX subagent connected

Se till att du ser raden "underagent ansluten". Vid denna tidpunkt bör ClusterControl-larmet rapporteras korrekt via SNMP-protokoll. För att kontrollera, använd helt enkelt kommandot snmpwalk och kör det från en fjärrserver, till exempel från Nagios-servern (snmpwalk tillhandahålls av net-snmp-utils-paketet):

$ snmpwalk -v2c -c private 192.168.10.50 .1.3.6.1.4.1.57397.1.1.1
SEVERALNINES-CLUSTERCONTROL-MIB::totalAlarms = INTEGER: 3
SEVERALNINES-CLUSTERCONTROL-MIB::totalCritical = INTEGER: 2
SEVERALNINES-CLUSTERCONTROL-MIB::totalWarning = INTEGER: 1
SEVERALNINES-CLUSTERCONTROL-MIB::clusterId = INTEGER: 23

Alternativt kan du också använda MIB-objektets namn istället, vilket ger samma resultat:

$ snmpwalk -v2c -c private 192.168.10.50 SEVERALNINES-CLUSTERCONTROL-MIB::alarmSummary
SEVERALNINES-CLUSTERCONTROL-MIB::totalAlarms = INTEGER: 3
SEVERALNINES-CLUSTERCONTROL-MIB::totalCritical = INTEGER: 2
SEVERALNINES-CLUSTERCONTROL-MIB::totalWarning = INTEGER: 1
SEVERALNINES-CLUSTERCONTROL-MIB::clusterId = INTEGER: 23

Sluta tankar

Detta är bara ett mycket enkelt proof-of-concept (PoC) om hur ClusterControl kan integreras med SNMP-protokollet. I nästa avsnitt kommer vi att undersöka att skicka SNMP-fällor från ClusterControl-servern till SNMP-hanteraren som Nagios, Zabbix eller Sensu.


  1. Guide till hur du använder Apache HBase-portar

  2. MongoDB GridFs med C#, hur lagrar man filer som bilder?

  3. Hur man berättar för en klient var den nya Redis-mastern använder Sentinel

  4. StackExchange Redis ChannelPrefix Inte omfattningsnycklar