MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Integrando ClusterControl com SNMP - Uma Prova de Conceito:Parte Um

O ClusterControl vem com vários alertas distintos (ou alarmes) que você não encontrará em outros sistemas de monitoramento. ClusterControl entende uma topologia de cluster de banco de dados como um todo - todos os nós de banco de dados e a relação entre eles, incluindo os nós dependentes ou clusters como cluster escravo, proxy reverso e nós de arbitragem. Por exemplo, o ClusterControl é capaz de detectar e relatar um cluster particionado, desvio de tempo entre todos os nós do cluster, falha de recuperação de cluster, falha de replicação de cluster para cluster e muitos outros alarmes específicos para todo o cluster. Portanto, seria ótimo se pudéssemos integrar os alarmes do ClusterControl com qualquer sistema de monitoramento ou paginação baseado em SNMP existente.

Nesta série de blogs, mostraremos uma prova de conceito sobre como integrar o ClusterControl com o protocolo SNMP. No final da série de blogs, poderíamos enviar uma armadilha SNMP para um gerenciador SNMP (Nagios, Zabbix, etc). Nesta parte, vamos cobrir as seguintes partes:

  • MIB (definição de objeto SNMP)
  • Agente SNMP (relatórios)

Arquitetura

Neste exemplo, temos um servidor Nagios como gerenciador SNMP, com um servidor ClusterControl (agente SNMP) monitorando um Galera Cluster de 3 nós conforme ilustrado no diagrama a seguir:


Todas as instruções neste post são baseadas no CentOS 7.

Instalando o SNMP no servidor ClusterControl

1) Instale os pacotes relacionados ao SNMP:

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

2) Verifique se o conteúdo de /etc/snmp/snmpd.conf tem o seguinte:

$ 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

Um pouco de explicação:

  • O MIB de Severalnines é um componente privado, portanto, precisamos permitir apenas nossa rede, 192.168.10.0/16 e localhost para consultar os dados SNMP. Definimos isso na seção "com2sec".

  • Em seguida, criamos um grupo de segurança chamado "myGroup", que permite apenas conexões da rede "mynet" e aceita o protocolo SNMP versão 2c.

  • Depois definimos a visão (o que pode ser visto do solicitante). "all" significa que o solicitante do SNMP pode ver tudo (a partir de OID .1). "systemview" é limitado apenas a informações seguras para o público, como nome do host, data e hora, etc., que é o padrão para usuários SNMP públicos.

  • Então permitimos que "myGroup" tenha uma visualização "all".

3) Reinicie o serviço SNMP para carregar as alterações:

$ systemctl restart snmpd

4) Agora, você poderá ver alguns MIBs se executarmos 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


Instalando MIBs ClusterControl no servidor ClusterControl

MIB significa Management Information Base. É um arquivo de texto formatado que lista os objetos de dados usados ​​por um determinado equipamento SNMP. Sem MIB, o OID usado pelo SNMP não pode ser traduzido em uma "coisa". As definições SNMP MIB são escritas em formato MIB conciso de acordo com a RFC 1212. A Manynines tem seu próprio Private Enterprise Number (PEN), 57397. Você pode verificar o banco de dados de número de empresa registrado aqui.

1) Copie o arquivo SEVERALNINES-CLUSTERCONTROL-MIB.txt e coloque-o em /usr/share/snmp/mibs. Para verificar qual caminho MIB o SNMP procuraria, use este comando:

$ net-snmp-config --default-mibdirs

2) Para carregar nossa MIB customizada, precisamos criar um novo arquivo de configuração em /etc/snmp/snmp.conf (aviso sem o "d") e adicionar a seguinte linha:
mibs +SEVERALNINES-CLUSTERCONTROL-MIB

3) Adicione a seguinte linha dentro de /etc/sysconfig/snmpd para permitir acesso remoto ao serviço SNMP:
OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"

4) Reinicie o daemon SNMP para carregar a mudança:
$ systemctl restart snmpd

5) Para ver se o MIB está carregado corretamente, use o 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)

A saída acima mostra que carregamos o MIB do nosso ClusterControl. Para esta prova de conceito, temos apenas um componente principal chamado "alarmes" e, abaixo dele, temos 3 subcomponentes ao lado de seus tipos de dados:
  • alarmSummary - Resumo dos alarmes. Apenas mostrando crítico, aviso e o ID do cluster correspondente.

  • alarmSummaryGroup - Agrupamento de nossos objetos SNMP.

  • alarmNotification - Isto é para definição de interceptação SNMP. Sem isso, nossa armadilha SNMP não será compreendida pelo gerenciador SNMP.

A numeração ao lado indica o identificador de objeto (OID). Por exemplo, totalWarning OID é .1.3.6.1.4.1.57397.1.1.1.3 e criticalAlarmNotification OID é .1.3.6.1.4.1.57397.1.1.3.1. Para organizações privadas, o OID sempre começa com ".1.3.6.1.4.1", seguido pelo número da empresa (57397 é o PEN de Vários Nines) e, em seguida, os objetos MIB.

Instalando o agente SNMP no servidor ClusterControl

Para "servir" a saída do objeto SNMP (o número de alarmes críticos, id do cluster e assim por diante), precisamos estender o daemon SNMP com um agente SNMP. No SNMP, eles chamam esse protocolo de AgentX, que definimos no snmpd.conf nesta seção:

master agentx

Para esta prova de conceito, preparei um script escrito em Perl para recuperar e relatar o resumo do alarme na formatação SNMP/OID.

1) Instale o componente Perl SNMP:

$ yum install perl-Net-SNMP

2) Coloque clustercontrol-snmp-agent.pl em qualquer lugar acessível pelo processo SNMP. Recomenda-se colocá-lo no diretório /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 as seguintes linhas dentro do script (linha 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) Defina o script com permissão executável:

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

5) Execute o script:

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

Certifique-se de ver a linha "subagente conectado". Neste ponto, o alarme do ClusterControl deve ser relatado corretamente via protocolo SNMP. Para verificar, basta usar o comando snmpwalk e executá-lo de um servidor remoto, por exemplo, do servidor Nagios (o snmpwalk é fornecido pelo pacote net-snmp-utils):
$ 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, você também pode usar o nome do objeto MIB que produz o mesmo 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

Considerações finais

Esta é apenas uma simples prova de conceito (PoC) sobre como o ClusterControl pode ser integrado ao protocolo SNMP. No próximo episódio, veremos como enviar traps SNMP do servidor ClusterControl para o gerenciador SNMP como Nagios, Zabbix ou Sensu.