sql >> Base de Datos >  >> NoSQL >> MongoDB

Integración de ClusterControl con SNMP:una prueba de concepto:primera parte

ClusterControl viene con una serie de alertas (o alarmas) distintivas que no encontrará en otros sistemas de monitoreo. ClusterControl entiende la topología de un clúster de base de datos como un todo:todos los nodos de la base de datos y la relación entre ellos, incluidos los nodos o clústeres dependientes como el clúster esclavo, el proxy inverso y los nodos árbitros. Por ejemplo, ClusterControl puede detectar e informar un clúster particionado, la desviación de tiempo entre todos los nodos del clúster, fallas en la recuperación del clúster, fallas en la replicación de un clúster a otro y muchas más alarmas específicas para todo el clúster. Por lo tanto, sería genial si pudiéramos integrar las alarmas de ClusterControl con cualquier sistema de localización o monitoreo basado en SNMP existente.

En esta serie de blogs, mostraremos una prueba de concepto sobre cómo integrar ClusterControl con el protocolo SNMP. Al final de la serie de blogs, finalmente podremos enviar una trampa SNMP a un administrador SNMP (Nagios, Zabbix, etc.). En esta parte, vamos a cubrir las siguientes partes:

  • MIB (definición de objeto SNMP)
  • Agente SNMP (informes)

Arquitectura

En este ejemplo, tenemos un servidor Nagios como administrador SNMP, con un servidor ClusterControl (agente SNMP) monitoreando un clúster Galera de 3 nodos como se ilustra en el siguiente diagrama:

Todas las instrucciones de esta publicación se basan en CentOS 7.

Instalación de SNMP en el servidor de ClusterControl

1) Instalar paquetes relacionados con SNMP:

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

2) Asegúrese de que el contenido de /etc/snmp/snmpd.conf tenga lo siguiente:

$ 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

Un poco de explicación:

  • La MIB de Variosnines es un componente privado, por lo tanto, solo debemos permitir nuestra red, 192.168.10.0/16 y localhost para consultar los datos de SNMP. Esto lo definimos en la sección "com2sec".

  • Luego creamos un grupo de seguridad llamado "myGroup", que solo permite conexiones desde la red "mynet", y acepta el protocolo SNMP versión 2c.

  • Luego definimos la vista (lo que se puede ver desde el solicitante). "todo" significa que el solicitante SNMP puede ver todo (a partir de OID .1). "systemview" solo se limita a información segura para el público, como nombre de host, fecha y hora, etc., que es la predeterminada para los usuarios públicos de SNMP.

  • Luego permitimos que "miGrupo" tenga una vista de "todos".

3) Reinicie el servicio SNMP para cargar los cambios:

$ systemctl restart snmpd

4) Ahora, debería poder ver algunas MIB si realizamos 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

Instalación de MIB de ClusterControl en el servidor de ClusterControl

MIB significa Base de información de gestión. Es un archivo de texto formateado que enumera los objetos de datos utilizados por una pieza particular del equipo SNMP. Sin MIB, el OID utilizado por SNMP no se puede traducir a una "cosa". Las definiciones de MIB de SNMP están escritas en formato MIB conciso de acuerdo con RFC 1212. Variousnines tiene su propio Número de Empresa Privada (PEN), 57397. Puede consultar la base de datos de números de empresas registradas aquí.

1) Copie SEVERALNINES-CLUSTERCONTROL-MIB.txt y colóquelo en /usr/share/snmp/mibs. Para verificar qué ruta MIB buscaría SNMP, use este comando:

$ net-snmp-config --default-mibdirs

2) Para cargar nuestra MIB personalizada, debemos crear un nuevo archivo de configuración en /etc/snmp/snmp.conf (aviso sin la "d") y agregar la siguiente línea:

mibs +SEVERALNINES-CLUSTERCONTROL-MIB

3) Agregue la siguiente línea dentro de /etc/sysconfig/snmpd para permitir el acceso remoto al servicio SNMP:

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

4) Reinicie el demonio SNMP para cargar el cambio:

$ systemctl restart snmpd

5) Para ver si la MIB se carga correctamente, use el comando 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)

El resultado anterior muestra que hemos cargado el MIB de nuestro ClusterControl. Para esta prueba de concepto, solo tenemos un componente principal llamado "alarmas" y, debajo, tenemos 3 subcomponentes junto con su tipo de datos:

  • alarmSummary - Resumen de alarmas. Solo muestra crítica, advertencia y el ID de clúster correspondiente.

  • alarmSummaryGroup - Agrupación de nuestros objetos SNMP.

  • alarmNotification:esto es para la definición de trampas SNMP. Sin esto, nuestra trampa SNMP no será comprensible para el administrador de SNMP.

La numeración al lado indica el identificador de objeto (OID). Por ejemplo, el OID de advertencia total es .1.3.6.1.4.1.57397.1.1.1.3 y el OID de notificación de alarma crítica es .1.3.6.1.4.1.57397.1.1.3.1. Para organizaciones privadas, el OID siempre comienza con ".1.3.6.1.4.1", seguido del número de la empresa (57397 es el PEN de Variousnines) y luego los objetos MIB.

Instalación del agente SNMP en el servidor ClusterControl

Para "servir" la salida del objeto SNMP (la cantidad de alarmas críticas, la identificación del clúster, etc.), necesitamos extender el demonio SNMP con un agente SNMP. En SNMP, llaman a este protocolo como AgentX, que hemos definido en snmpd.conf en esta sección:

master agentx

Para esta prueba de concepto, he preparado un script escrito en Perl para recuperar y reportar el resumen de la alarma en formato SNMP/OID.

1) Instale el componente SNMP de Perl:

$ yum install perl-Net-SNMP

2) Coloque clustercontrol-snmp-agent.pl en cualquier lugar accesible por el proceso SNMP. Se recomienda colocarlo en el directorio /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) Configure las siguientes líneas dentro del script (líneas 14 a 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) Configure el script con permiso ejecutable:

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

5) Ejecute el script:

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

Asegúrese de ver la línea "subagente conectado". En este punto, la alarma de ClusterControl debe informarse correctamente a través del protocolo SNMP. Para verificar, simplemente use el comando snmpwalk y ejecútelo desde un servidor remoto, por ejemplo, desde el servidor de Nagios (el paquete net-snmp-utils proporciona snmpwalk):

$ 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

Alternativamente, también puede usar el nombre del objeto MIB que produce el mismo resultado:

$ 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

Reflexiones finales

Esta es solo una prueba de concepto (PoC) muy simple sobre cómo se puede integrar ClusterControl con el protocolo SNMP. En el próximo episodio, analizaremos el envío de trampas SNMP desde el servidor ClusterControl al administrador SNMP como Nagios, Zabbix o Sensu.