O autor escolheu o Free and Open Source Fund para receber uma doação como parte do programa Write for DOnations.
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.
Um servidor Ubuntu 18.04 com privilégios de root e uma conta secundária não-root. Você pode configurar isso seguindo este guia de Configuração Inicial de servidor com Ubuntu 18.04. Para este tutorial o usuário não-root é o sammy
.
Nagios Core instalado em seu servidor. Para conseguir isso, conclua os cinco primeiros passos do tutorial How To Install Nagios 4 and Monitor Your Servers on Ubuntu 18.04.
Uma conta na DigitalOcean e um banco de dados gerenciado PostgreSQL provisionado pela DigitalOcean com informações de conexão disponíveis. Para saber mais sobre os bancos de dados gerenciados da DigitalOcean, visite a documentação de produto.
Uma conta Slack com acesso completo, adicionado a um workspace no qual você deseja receber atualizações de status.
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:
OutputCreated "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.
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:
[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:
OutputPOSTGRES_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.
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:
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:
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:
...
# 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:
...
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:
OutputTotal 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:
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.
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.
Click em Add Nagios Integration. Quando a página carregar, role para baixo e tome nota do token, porque você precisará dele mais adiante.
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:
...
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.
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:
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:
define contactgroup {
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin
}
Adicione slack
à lista de membros, assim:
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:
enable_environment_macros=0
Altere o valor para 1
, assim:
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:
OutputTotal 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.
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.
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.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!