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

Integration af ClusterControl med SNMP - A Proof of Concept:Del 1

ClusterControl kommer med en række karakteristiske advarsler (eller alarmer), som du ikke finder i andre overvågningssystemer. ClusterControl forstår en databaseklyngetopologi som en helhed - alle databasenoder og relationen mellem dem, inklusive de afhængige knudepunkter eller klynger som slaveklynge, omvendt proxy og arbitratornoder. For eksempel er ClusterControl i stand til at detektere og rapportere en opdelt klynge, tidsdrift mellem alle noder i klyngen, klyngendannelsesfejl, klynge-til-klynge replikeringsfejl og mange flere klyngespecifikke alarmer. Derfor ville det være fantastisk, hvis vi kunne integrere ClusterControl-alarmer med et hvilket som helst eksisterende SNMP-baseret overvågnings- eller personsøgningssystem.

I denne blogserie vil vi vise et proof of concept om, hvordan man integrerer ClusterControl med SNMP-protokollen. I slutningen af ​​blogserien ville vi i sidste ende være i stand til at sende en SNMP-fælde til en SNMP-manager (Nagios, Zabbix osv.). I denne del skal vi dække følgende dele:

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

Arkitektur

I dette eksempel har vi en Nagios-server som SNMP-manager, med en ClusterControl-server (SNMP-agent), der overvåger en 3-node Galera Cluster som illustreret i følgende diagram:

Alle instruktioner i dette indlæg er baseret på CentOS 7.

Installation af SNMP på ClusterControl-serveren

1) Installer SNMP-relaterede pakker:

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

2) Sørg for, at indholdet af /etc/snmp/snmpd.conf har følgende:

$ 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

Lidt forklaring:

  • Severalnines' MIB er en privat komponent, derfor skal vi kun tillade vores netværk, 192.168.10.0/16 og localhost for at forespørge SNMP-dataene. Vi definerer dette i afsnittet "com2sec".

  • Så opretter vi en sikkerhedsgruppe kaldet "myGroup", som kun tillader forbindelser fra "mynet" netværk, og accepterer protokol SNMP version 2c.

  • Så definerer vi visningen (hvad der kan ses fra rekvirenten). "alle" betyder, at SNMP-anmoderen kan se alt (startende fra OID .1). "systemview" er kun begrænset til sikker-til-offentlig information som værtsnavn, datetime osv., som er standard for offentlige SNMP-brugere.

  • Så tillader vi "myGroup" at have en "alle"-visning.

3) Genstart SNMP-tjenesten for at indlæse ændringerne:

$ systemctl restart snmpd

4) Nu burde du være i stand til at se nogle MIB'er, hvis vi udfører 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

Installation af ClusterControl MIB'er på ClusterControl-serveren

MIB står for Management Information Base. Det er en formateret tekstfil, der viser de dataobjekter, der bruges af et bestemt stykke SNMP-udstyr. Uden MIB kan den OID, der bruges af SNMP, ikke oversættes til en "ting". SNMP MIB-definitionerne er skrevet i kortfattet MIB-format i overensstemmelse med RFC 1212. Severalnines har sit eget Private Enterprise Number (PEN), 57397. Du kan tjekke den registrerede virksomhedsnummerdatabase her.

1) Kopier SEVERALNINES-CLUSTERCONTROL-MIB.txt og læg den under /usr/share/snmp/mibs. For at kontrollere, hvilken MIB-sti SNMP vil lede efter, brug denne kommando:

$ net-snmp-config --default-mibdirs

2) For at indlæse vores brugerdefinerede MIB skal vi oprette en ny konfigurationsfil på /etc/snmp/snmp.conf (bemærk uden "d") og tilføje følgende linje:

mibs +SEVERALNINES-CLUSTERCONTROL-MIB

3) Tilføj følgende linje inde i /etc/sysconfig/snmpd for at tillade fjernadgang til SNMP-tjenesten:

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

4) Genstart SNMP-dæmonen for at indlæse ændringen:

$ systemctl restart snmpd

5) For at se, om MIB'en er indlæst korrekt, skal du bruge kommandoen 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)

Ovenstående output viser, at vi har indlæst vores ClusterControls MIB. Til dette proof-of-concept har vi kun én hovedkomponent kaldet "alarmer", og under den har vi 3 underkomponenter ved siden af ​​deres datatype:

  • alarmSummary - Oversigt over alarmer. Viser bare kritisk, advarsel og det tilsvarende klynge-id.

  • alarmSummaryGroup - Gruppering af vores SNMP-objekter.

  • alarmmeddelelse - Dette er til SNMP-fældedefinition. Uden dette vil vores SNMP-fælde ikke være forståelig af SNMP-manageren.

Nummereringen ved siden af ​​angiver objektidentifikatoren (OID). For eksempel er totalWarning OID .1.3.6.1.4.1.57397.1.1.1.3 og kritisk AlarmNotification OID er .1.3.6.1.4.1.57397.1.1.3.1. For private organisationer starter OID altid med ".1.3.6.1.4.1", efterfulgt af virksomhedsnummeret (57397 er Severalnines' PEN) og derefter MIB-objekterne.

Installation af SNMP-agenten på ClusterControl-serveren

For at "servere" SNMP-objektoutputtet (antallet af kritiske alarmer, klynge-id og så videre), skal vi udvide SNMP-dæmonen med en SNMP-agent. I SNMP kalder de denne protokol som AgentX, som vi har defineret i snmpd.conf under dette afsnit:

master agentx

Til dette proof-of-concept har jeg forberedt et script skrevet i Perl for at hente og rapportere alarmens oversigt til SNMP/OID-formatering.

1) Installer Perl SNMP-komponent:

$ yum install perl-Net-SNMP

2) Anbring clustercontrol-snmp-agent.pl hvor som helst, der er tilgængelig via SNMP-processen. Det anbefales at placere det under mappen /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) Konfigurer følgende linjer inde i scriptet (linje 14 til 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) Indstil scriptet med eksekverbar tilladelse:

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

5) Kør scriptet:

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

Sørg for, at du ser linjen "subagent tilsluttet". På dette tidspunkt skal ClusterControl-alarmen rapporteres korrekt via SNMP-protokol. For at kontrollere skal du blot bruge kommandoen snmpwalk og udføre den fra en fjernserver, for eksempel fra Nagios-serveren (snmpwalk leveres af net-snmp-utils-pakken):

$ 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 også bruge MIB-objektnavnet i stedet, hvilket giver det samme 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

Sidste tanker

Dette er blot et meget simpelt proof-of-concept (PoC) om, hvordan ClusterControl kan integreres med SNMP-protokollen. I den næste episode skal vi se på at sende SNMP-fælder fra ClusterControl-serveren til SNMP-manageren som Nagios, Zabbix eller Sensu.


  1. hvordan man konfigurerer timeout for JedisConnectionFactory-basen på fjederstøvleramme

  2. dræbe zombie døde regionsservere

  3. Sikker MongoDB-implementering på Amazon AWS

  4. Lagring af filer i MongoDB med GridFS