O autor escolheu o Free and Open Source Fund para receber uma doação como parte do programa Write for DOnations.

Introdução

O monitoramento do banco de dados é essencial para entender como o banco de dados se comporta ao longo do tempo. Ele pode ajudá-lo a descobrir problemas de utilização ocultos e gargalos que ocorrem no seu banco de dados. A implementação de sistemas de monitoramento de banco de dados pode rapidamente se tornar uma vantagem a longo prazo, o que influenciará positivamente seu processo de gerenciamento de infraestrutura. Você poderá reagir rapidamente às alterações de status do seu banco de dados e será notificado rapidamente quando os serviços monitorados retornarem ao funcionamento normal.

O Nagios Core é um sistema de monitoramento popular que você pode usar para monitorar seu banco de dados gerenciado. Os benefícios de usar o Nagios para esta tarefa são sua versatilidade — é fácil de configurar e utiliza um grande repositório de plugins disponíveis, e o mais importante, alerta integrado.

Neste tutorial, você configurará o monitoramento do banco de dados PostgreSQL no Nagios Core utilizando o plugin check_postgres e configurar alertas baseados no Slack. No final, você terá um sistema de monitoramento funcionando em seu banco de dados PostgreSQL gerenciado e será notificado imediatamente sobre alterações de status de várias funcionalidades.

Pré-requisitos

Passo 1 — Instalando check_postgres

Nesta seção, você fará o download da versão mais recente do plug-in check_postgres no Github e disponibilizará para o Nagios Core. Você também instalará o cliente PostgreSQL (psql), para que check_postgres consiga se conectar ao seu banco de dados gerenciado.

Comece instalando o cliente PostgreSQL, executando o seguinte comando:

  • sudo apt install postgresql-client

Em seguida, você baixará o check_postgres para o seu diretório home. Primeiro, navegue até ele:

  • cd ~

Vá para a página Github releases e copie o link da versão mais recente do plug-in. No momento da redação deste artigo, a versão mais recente do check_postgres era a 2.24.0; lembre-se de que isso será atualizado e, sempre que possível, a boa prática é usar a versão mais recente.

Agora faça o download usando curl:

  • curl -LO https://github.com/bucardo/check_postgres/releases/download/2.24.0/check_postgres-2.24.0.tar.gz

Extraia-o usando o seguinte comando:

  • tar xvf check_postgres-*.tar.gz

Isso criará um diretório com o mesmo nome que o arquivo que você baixou. Essa pasta contém o executável check_postgres, que você precisará copiar para o diretório em que o Nagios armazena seus plugins (geralmente /usr/local/nagios/libexec/). Copie-o executando o seguinte comando:

  • sudo cp check_postgres-*/check_postgres.pl /usr/local/nagios/libexec/

Em seguida, você precisará atribuir ao usuário nagios a propriedade sobre ele, para que ele possa ser executado a partir do Nagios:

  • sudo chown nagios:nagios /usr/local/nagios/libexec/check_postgres.pl

O check_postgres está agora disponível para o Nagios e pode ser usado a partir dele. No entanto, ele fornece muitos comandos relativos a diferentes aspectos do PostgreSQL e, para uma melhor manutenção do serviço, é melhor dividi-los para que possam ser chamados separadamente. Você conseguirá isso criando um link simbólico para cada comando check_postgres no diretório do plugin.

Navegue para o diretório onde o Nagios armazena plugins executando o seguinte comando:

  • cd /usr/local/nagios/libexec

Em seguida, crie os links simbólicos com:

  • sudo perl check_postgres.pl --symlinks

A saída será semelhante a esta:

Output
Created "check_postgres_archive_ready" Created "check_postgres_autovac_freeze" Created "check_postgres_backends" Created "check_postgres_bloat" Created "check_postgres_checkpoint" Created "check_postgres_cluster_id" Created "check_postgres_commitratio" Created "check_postgres_connection" Created "check_postgres_custom_query" Created "check_postgres_database_size" Created "check_postgres_dbstats" Created "check_postgres_disabled_triggers" Created "check_postgres_disk_space" Created "check_postgres_fsm_pages" Created "check_postgres_fsm_relations" Created "check_postgres_hitratio" Created "check_postgres_hot_standby_delay" Created "check_postgres_index_size" Created "check_postgres_indexes_size" Created "check_postgres_last_analyze" Created "check_postgres_last_autoanalyze" Created "check_postgres_last_autovacuum" Created "check_postgres_last_vacuum" Created "check_postgres_listener" Created "check_postgres_locks" Created "check_postgres_logfile" Created "check_postgres_new_version_bc" Created "check_postgres_new_version_box" Created "check_postgres_new_version_cp" Created "check_postgres_new_version_pg" Created "check_postgres_new_version_tnm" Created "check_postgres_pgagent_jobs" Created "check_postgres_pgb_pool_cl_active" Created "check_postgres_pgb_pool_cl_waiting" Created "check_postgres_pgb_pool_maxwait" Created "check_postgres_pgb_pool_sv_active" Created "check_postgres_pgb_pool_sv_idle" Created "check_postgres_pgb_pool_sv_login" Created "check_postgres_pgb_pool_sv_tested" Created "check_postgres_pgb_pool_sv_used" Created "check_postgres_pgbouncer_backends" Created "check_postgres_pgbouncer_checksum" Created "check_postgres_prepared_txns" Created "check_postgres_query_runtime" Created "check_postgres_query_time" Created "check_postgres_relation_size" Created "check_postgres_replicate_row" Created "check_postgres_replication_slots" Created "check_postgres_same_schema" Created "check_postgres_sequence" Created "check_postgres_settings_checksum" Created "check_postgres_slony_status" Created "check_postgres_table_size" Created "check_postgres_timesync" Created "check_postgres_total_relation_size" Created "check_postgres_txn_idle" Created "check_postgres_txn_time" Created "check_postgres_txn_wraparound" Created "check_postgres_version" Created "check_postgres_wal_files"

O Perl listou todas as funções para as quais criou um link simbólico. Agora elas podem ser executadas na linha de comando, como de costume.

Você baixou e instalou o plug-in check_postgres. Você também criou links simbólicos para todos os comandos do plug-in, para que possam ser usados individualmente no Nagios. No próximo passo, você criará um arquivo de serviço de conexão, que o check_postgres utilizará para se conectar ao seu banco de dados gerenciado.

Passo 2 — Configurando Seu Banco de Dados

Nesta seção, você criará um arquivo de serviço de conexão do PostgreSQL contendo as informações de conexão do seu banco de dados. A seguir, você testará os dados de conexão invocando o check_postgres nele.

O arquivo do serviço de conexão é, por convenção, chamado pg_service.conf e deve estar localizado em /etc/postgresql-common/. Crie este arquivo usando seu editor de textos favorito (por exemplo, o nano):

  • sudo nano /etc/postgresql-common/pg_service.conf

Adicione as seguintes linhas, substituindo os espaços reservados destacados pelos valores reais mostrados no Painel de Controle do Banco de Dados gerenciado na seção Connection Details:

/etc/postgresql-common/pg_service.conf
[managed-db]
host=host
port=porta
user=nome_de_usuário
password=senha
dbname=defaultdb
sslmode=require

O arquivo do serviço de conexão pode abrigar vários grupos de informações de conexão com o banco de dados. O início de um grupo é sinalizado colocando seu nome entre colchetes. Depois disso vem os parâmetros de conexão (host, port, user, password e assim por diante), separados por novas linhas, que devem receber um valor.

Salve e feche o arquivo quando terminar.

Agora você testará a validade da configuração conectando-se ao banco de dados via check_postgres executando o seguinte comando:

  • ./check_postgres.pl --dbservice=managed-db --action=connection

Aqui, você diz ao check_postgres qual grupo de informações de conexão com o banco de dados usar com o parâmetro --dbservice, e também especifica que ele deve apenas tentar se conectar a ele especificando connection como a ação.

Sua saída será semelhante a esta:

Output
POSTGRES_CONNECTION OK: service=managed-db version 11.4 | time=0.10s

Isto significa que o check_postgres conseguiu conectar-se ao banco de dados, de acordo com os parâmetros do pg_service.conf. Se você receber um erro, verifique novamente o que você acabou de inserir nesse arquivo de configuração.

Você criou e preencheu um arquivo de serviço de conexão do PostgreSQL, que funciona como uma string de conexão. Você também testou os dados de conexão executando check_postgres e observando a saída. Na próxima etapa, você configurará o Nagios para monitorar várias partes do seu banco de dados.

Passo 3 — Criando Serviços de Monitoramento no Nagios

Agora você configurará o Nagios para monitorar várias métricas do seu banco de dados, definindo um host e vários serviços, que chamarão o plug-in check_postgres e seus links simbólicos.

O Nagios armazena seus arquivos de configuração personalizados em /usr/local/nagios/etc/objects. Os novos arquivos adicionados lá devem ser ativados manualmente no arquivo de configuração central do Nagios, localizado em /usr/local/nagios/etc/nagios.cfg. Agora você deverá definir comandos, um host e vários serviços, que serão usados para monitorar seu banco de dados gerenciado no Nagios.

Primeiro, crie uma pasta dentro de /usr/local/nagios/etc/objects para armazenar sua configuração relacionada ao PostgreSQL executando o seguinte comando:

  • sudo mkdir /usr/local/nagios/etc/objects/postgresql

Você armazenará os comandos do Nagios para check_nagios em um arquivo chamado commands.cfg. Crie-o para edição:

  • sudo nano /usr/local/nagios/etc/objects/postgresql/commands.cfg

Adicione as seguintes linhas:

/usr/local/nagios/etc/objects/postgresql/commands.cfg
define command {
    command_name           check_postgres_connection
    command_line           /usr/local/nagios/libexec/check_postgres_connection --dbservice=$ARG1$
}

define command {
    command_name           check_postgres_database_size
    command_line           /usr/local/nagios/libexec/check_postgres_database_size --dbservice=$ARG1$ --critical='$ARG2$'
}

define command {
    command_name           check_postgres_locks
    command_line           /usr/local/nagios/libexec/check_postgres_locks --dbservice=$ARG1$
}

define command {
    command_name           check_postgres_backends
    command_line           /usr/local/nagios/libexec/check_postgres_backends --dbservice=$ARG1$
}

Salve e feche o arquivo.

Neste arquivo, você define quatro comandos do Nagios que chamam partes diferentes do plugin check_postgres (checando a conectividade, obtendo o número de locks e conexões e o tamanho de todo o banco de dados). Todos eles aceitam um argumento que é passado para o parâmetro --dbservice e especificam a qual dos bancos de dados definidos em pg_service.conf se conectar.

O comando check_postgres_database_size aceita um segundo argumento que é passado para o parâmetro --critical, que especifica o ponto em que o armazenamento do banco de dados está ficando cheio. Os valores aceitos incluem 1 KB para um kilobyte, 1 MB para um megabyte e assim por diante, até exabytes (EB). Um número sem uma unidade de capacidade é tratado como sendo expresso em bytes.

Agora que os comandos necessários estão definidos, você definirá o host (essencialmente o banco de dados) e seus serviços de monitoramento em um arquivo chamado services.cfg. Crie-o usando seu editor favorito:

  • sudo nano /usr/local/nagios/etc/objects/postgresql/services.cfg

Inclua as seguintes linhas, substituindo db_max_storage_size por um valor referente ao armazenamento disponível do seu banco de dados. É recomendável configurá-lo para 90% do tamanho de armazenamento que você alocou para ele:

/usr/local/nagios/etc/objects/postgresql/services.cfg
define host {
      use                    linux-server
      host_name              postgres
      check_command          check_postgres_connection!managed-db
}

define service {
      use                    generic-service
      host_name              postgres
      service_description    PostgreSQL Connection
      check_command          check_postgres_connection!managed-db
      notification_options   w,u,c,r,f,s
}

define service {
      use                    generic-service
      host_name              postgres
      service_description    PostgreSQL Database Size
      check_command          check_postgres_database_size!managed-db!db_max_storage_size
      notification_options   w,u,c,r,f,s
}

define service {
      use                    generic-service
      host_name              postgres
      service_description    PostgreSQL Locks
      check_command          check_postgres_locks!managed-db
      notification_options   w,u,c,r,f,s
}

define service {
      use                    generic-service
      host_name              postgres
      service_description    PostgreSQL Backends
      check_command          check_postgres_backends!managed-db
      notification_options   w,u,c,r,f,s
}

Você primeiro define um host, para que o Nagios saiba a que entidade os serviços se relacionam. Em seguida, você cria quatro serviços, que chamam os comandos que você acabou de definir. Cada um deles passa managed-db como argumento, detalhando que o managed-db que você definiu no Passo 2 deve ser monitorado.

Em relação às opções de notificação, cada serviço especifica que as notificações devem ser enviadas quando o estado do serviço se tornar WARNING,UNKNOWN, CRITICAL,OK (quando se recuperar de uma parada), quando o serviço iniciar oscilando, ou quando a parada programada iniciar ou terminar. Sem atribuir explicitamente um valor a essa opção, nenhuma notificação seria enviada (para os contatos disponíveis), exceto se acionada manualmente.

Salve e feche o arquivo.

Em seguida, você precisará dizer explicitamente ao Nagios para ler os arquivos de configuração deste novo diretório, editando o arquivo de configuração geral do Nagios. Abra-o para edição executando o seguinte comando:

  • sudo nano /usr/local/nagios/etc/nagios.cfg

Encontre esta linha destacada no arquivo:

/usr/local/nagios/etc/nagios.cfg
...
# directive as shown below:

cfg_dir=/usr/local/nagios/etc/servers
#cfg_dir=/usr/local/nagios/etc/printers
...

Acima dela, adicione a seguinte linha destacada:

/usr/local/nagios/etc/nagios.cfg
...
cfg_dir=/usr/local/nagios/etc/objects/postgresql
cfg_dir=/usr/local/nagios/etc/servers
...

Salve e feche o arquivo. Esta linha diz ao Nagios para carregar todos os arquivos de configuração a partir do diretório /usr/local/nagios/etc/objects/postgresql, onde seus arquivos de configuração estão localizados.

Antes de reiniciar o Nagios, verifique a validade da configuração executando o seguinte comando:

  • sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

O final da saída será semelhante a este:

Output
Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check

Isso significa que o Nagios não encontrou erros na configuração. Se ele lhe mostrar um erro, você também verá uma dica sobre o que deu errado, para poder corrigir o erro mais facilmente.

Para fazer com que o Nagios recarregue sua configuração, reinicie seu serviço executando o seguinte comando:

  • sudo systemctl restart nagios

Agora você pode navegar até o Nagios no seu navegador. Depois de carregado, clique na opção Services no menu à esquerda. Você verá o host do postgres e uma lista de serviços, junto com seus status atuais:

PostgreSQL Monitoring Services - Pending

Em breve, todos eles ficarão verdes e mostrarão o status OK. Você verá a saída do comando na coluna Status Information. Você pode clicar no nome do serviço e ver informações detalhadas sobre seu status e disponibilidade.

Você adicionou comandos check_postgres, um host e vários serviços à sua instalação do Nagios para monitorar seu banco de dados. Você também verificou que os serviços estão funcionando corretamente, examinando-os por meio da interface web do Nagios. Na próxima etapa, você configurará os alertas baseados no Slack.

Passo 4 — Configurando Alertas para o Slack

Nesta seção, você configurará o Nagios para alertá-lo sobre eventos via Slack, publicando-os nos canais desejados em seu workspace.

Antes de começar, efetue login no workspace desejado no Slack e crie dois canais nos quais você deseja receber mensagens de status do Nagios: um para host e outro para notificações de serviço. Se desejar, você pode criar apenas um canal em que receberá os dois tipos de alertas.

Em seguida, vá para o app Nagios no Diretório de apps do Slack e click em Add Configuration. Você verá uma página para adicionar a Integração Nagios.

Slack - Add Nagios Integration

Click em Add Nagios Integration. Quando a página carregar, role para baixo e tome nota do token, porque você precisará dele mais adiante.

Slack - Integration Token

Agora você instalará e configurará o plugin Slack (escrito em Perl) para o Nagios no seu servidor. Primeiro, instale os pré-requisitos necessários do Perl executando o seguinte comando:

  • sudo apt install libwww-perl libcrypt-ssleay-perl -y

Em seguida, faça o download do plug-in para o diretório de plugins do Nagios:

  • sudo curl https://raw.githubusercontent.com/tinyspeck/services-examples/master/nagios.pl -o slack.pl

Torne-o executável executando o seguinte comando:

  • sudo chmod +x slack.pl

Agora, você precisará editá-lo para conectar-se ao seu workspace usando o token que você obteve do Slack. Abra-o para edição:

  • sudo nano slack.pl

Localize as seguintes linhas no arquivo:

/usr/local/nagios/libexec/slack.pl
...
my $opt_domain = "foo.slack.com"; # Your team's domain
my $opt_token = "your_token"; # The token from your Nagios services page
...

Substitua foo.slack.com pelo domínio do seu workspace e your_token pelo seu token de integração do app Nagios, salve e feche o arquivo. O script agora poderá enviar solicitações apropriadas ao Slack, que você testará executando o seguinte comando:

  • ./slack.pl -field slack_channel=#nome_do_seu_canal -field HOSTALIAS="Test Host" -field HOSTSTATE="UP" -field HOSTOUTPUT="Host is UP" -field NOTIFICATIONTYPE="RECOVERY"

Substitua nome_do_seu_canal pelo nome do canal em que você deseja receber alertas de status. O script exibirá informações sobre a solicitação HTTP feita ao Slack e, se tudo for executado corretamente, a última linha da saída será ok. Se você receber um erro, verifique novamente se o canal do Slack especificado existe no workspace.

Agora você pode ir para o workspace do Slack e selecionar o canal que você especificou. Você verá uma mensagem de teste vinda do Nagios.

Slack - Nagios Test Message

Isso confirma que você configurou corretamente o script para o Slack. Agora você passará a configurar o Nagios para alertá-lo via Slack usando este script.

Você precisará criar um contato para o Slack e dois comandos que enviarão mensagens para ele. Você armazenará essa configuração em um arquivo chamado slack.cfg, na mesma pasta que os arquivos de configuração anteriores. Crie-o para edição executando o seguinte comando:

  • sudo nano /usr/local/nagios/etc/objects/postgresql/slack.cfg

Adicione as seguintes linhas:

/usr/local/nagios/etc/objects/postgresql/slack.cfg
define contact {
      contact_name                             slack
      alias                                    Slack
      service_notification_period              24x7
      host_notification_period                 24x7
      service_notification_options             w,u,c,f,s,r
      host_notification_options                d,u,r,f,s
      service_notification_commands            notify-service-by-slack
      host_notification_commands               notify-host-by-slack
}

define command {
      command_name     notify-service-by-slack
      command_line     /usr/local/nagios/libexec/slack.pl -field slack_channel=#service_alerts_channel
}

define command {
      command_name     notify-host-by-slack
      command_line     /usr/local/nagios/libexec/slack.pl -field slack_channel=#host_alerts_channel
}

Aqui você define um contato chamado slack, declara que ele pode ser contatado a qualquer momento e especifica quais comandos usar para notificar eventos relacionados ao serviço e ao host. Esses dois comandos são definidos depois e chamam o script que você acabou de configurar. Você precisará substituir service_alerts_channel e host_alerts_channel pelos nomes dos canais em que deseja receber mensagens de serviço e host, respectivamente. Se preferir, você pode usar os mesmos nomes de canais.

De maneira semelhante à criação do serviço no último passo, é crucial definir as opções de notificação de serviço e host no contato, pois ele determina que tipo de alerta o contato receberá. A omissão dessas opções resultaria no envio de notificações somente quando acionadas manualmente a partir da interface web.

Quando você terminar de editar, salve e feche o arquivo.

Para habilitar o alerta através do contato slack que você acabou de definir, você precisará adicioná-lo ao grupo de contatos admin, definido no arquivo de configuração contacts.cfg, localizado em /usr/local/nagios/etc/objects/. Abra-o para edição executando o seguinte comando:

  • sudo nano /usr/local/nagios/etc/objects/contacts.cfg

Localize o bloco de configuração parecido com este:

/usr/local/nagios/etc/objects/contacts.cfg
define contactgroup {

    contactgroup_name       admins
    alias                   Nagios Administrators
    members                 nagiosadmin
}

Adicione slack à lista de membros, assim:

/usr/local/nagios/etc/objects/contacts.cfg
define contactgroup {

    contactgroup_name       admins
    alias                   Nagios Administrators
    members                 nagiosadmin,slack
}

Salve e feche o arquivo.

Por padrão, ao executar scripts, o Nagios não disponibiliza informações de host e serviço por meio de variáveis de ambiente, que é o que o script Slack requer para enviar mensagens significativas. Para remediar isso, você precisará definir a configuração enable_environment_macros em nagios.cfg como 1. Abra-o para edição executando o seguinte comando:

  • sudo nano /usr/local/nagios/etc/nagios.cfg

Encontre a linha semelhante a essa:

/usr/local/nagios/etc/nagios.cfg
enable_environment_macros=0

Altere o valor para 1, assim:

/usr/local/nagios/etc/nagios.cfg
enable_environment_macros=1

Salve e feche o arquivo.

Teste a validade da configuração do Nagios executando o seguinte comando:

  • sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

O final da saída será semelhante a:

Output
Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check

Prossiga e reinicie o Nagios executando o seguinte comando:

  • sudo systemctl restart nagios

Para testar a integração do Slack, você vai enviar uma notificação personalizada pela interface web. Recarregue a página de status Services do Nagios no seu navegador. Clique no serviço PostgreSQL Backends e clique em Send custom service notification à direita quando a página carregar.

Nagios - Custom Service Notification

Digite um comentário de sua escolha e clique em Commit e, em seguida, clique em Done. Você receberá imediatamente uma nova mensagem no Slack.

Slack - Status Alert From Nagios

Agora você integrou o Slack ao Nagios, para receber mensagens sobre eventos críticos e alterações de status imediatamente. Você também testou a integração acionando manualmente um evento no Nagios.

Conclusão

Agora você tem o Nagios Core configurado para monitorar seu banco de dados PostgreSQL gerenciado e relatar quaisquer mudanças de status e eventos para o Slack, para estar sempre de olho no que está acontecendo com seu banco de dados. Isso permitirá que você reaja rapidamente em caso de emergência, porque você receberá o feed de status em tempo real.

Se você quiser saber mais sobre os recursos do check_postgres, consulte a documentação, onde você encontrará muito mais comandos que você pode eventualmente usar.

Para obter mais informações sobre o que você pode fazer com seu banco de dados PostgreSQL gerenciado, visite a doumentação de produto.

0 Comments

Creative Commons License