
Apresentação de Daria Vilkova para o Zabbix Meetup Online
Quero apresentá-lo a uma ferramenta de monitoramento do PostgreSQL e do sistema operacional, que está sendo desenvolvida pela nossa empresa utilizando Zabbix.
Escolhemos o Zabbix como nossa ferramenta de monitoramento há muito tempo, pois é uma plataforma de código aberto, suportada por uma comunidade ativa, muito popular na Rússia.
Criamos um agente ativo — Mamonsu, que oferecia um monitoramento mais flexível do que as ferramentas padrão podiam proporcionar na época, e realizava a coleta de métricas e o envio para o Zabbix Server. Em nossa empresa, o Mamonsu é utilizado durante a auditoria.
Mamonsu
Mamonsu é um agente ativo (Zabbix Trapper) para monitoramento do PostgreSQL e do sistema operacional. Mamonsu (escrito em Python) permite a configuração de parâmetros de monitoramento do PostgreSQL e do sistema operacional em cinco minutos.
Mamonsu possui ferramentas adicionais:
- mamonsu tune — comando que edita os parâmetros de configuração no arquivo de configuração do PostgreSQL para a máquina onde o agente Mamonsu está instalado.
- mamonsu report — comando que cria respostas sobre o sistema operacional e o PostgreSQL.
Mamonsu é instalado no servidor de SGBD, coleta informações, compõe-as em JSON e as envia para visualização no Zabbix Server, onde deve haver um template para suas métricas.

Esquema de funcionamento do Mamonsu
Recursos do Mamonsu
- Trabalho eficiente com o PostgreSQL. A conexão contínua com o PostgreSQL é a principal vantagem do Mamonsu. Neste caso, o número máximo de conexões é igual ao número máximo de bancos de dados aos quais ele se conecta.
- Escalabilidade. O Mamonsu é um agente completamente "plugável", e, devido à estrutura fixa de cada plugin e à relativa simplicidade do Python, é fácil aprender a escrever novos ou editar plugins padrão, ou seja, parâmetros de coleta de métricas.
- Ampla cobertura de métricas para monitoramento para PostgreSQL, inclusive métricas de extensões específicas.
- Inicialização rápida, disponibilidade "pronta para uso".
- Exportação de templates e arquivos de configuração, assim como upload para o Zabbix Server.
- Multiplataforma, o que é importante para nossos clientes que utilizam diferentes distribuições Linux, inclusive nacionais.
- Licença BSD-clause.
Atualmente, oferecemos uma variedade de plugins e em cada versão subsequente nos esforçamos para adicionar algo novo.
- 14 plugins para PostgreSQL,
- 8 plugins para o OS Linux,
- 4 plugins para o OS Windows.
Mamonsu coleta mais de 110 métricas do PostgreSQL e sistemas operacionais:
- 70 métricas do PostgreSQL,
- 40 métricas do OS Linux,
- 8 métricas do OS Windows.
As principais métricas incluem a disponibilidade do SGBD, número de conexões, tamanho do banco de dados, checkpoints, velocidade de leitura/escrita, bloqueios, número de processos de autovacuum e velocidade de geração do WAL. A lista completa de métricas disponíveis, bem como uma descrição detalhada de todas as ferramentas, está disponível em no site do GitHub.

Lista de métricas disponíveis no site do GitHub
Executando o Mamonsu em 5 minutos
A configuração do monitoramento do PostgreSQL e do sistema operacional com o Mamonsu pode ser realizada em 5 minutos, seguindo 5 passos simples.
- Instalação do Mamonsu. O Mamonsu pode ser compilado a partir do código-fonte ou usando os pacotes disponíveis.
$ git clone ... && cd mamonsu && python setup.py
build && python setup.py install
- Configuração das conexões. É necessário especificar os parâmetros de conexão com o PostgreSQL e o Zabbix Server no arquivo agent.conf.
/etc/mamonsu/agent.conf
- Exportar o template para o Zabbix Server.
$ mamonsu zabbix template export
/usr/share/mamonsu/example.xml
- Adicionar um nó à rede no Zabbix Server. O template exportado será automaticamente vinculado ao novo nó na rede do Zabbix Server.
$ mamonsu zabbix host create mamonsu-demo
- Iniciar.
$ service mamonsu start
Direções de desenvolvimento do Mamonsu
Como parte do desenvolvimento do Mamonsu, planejamos aprimorar métricas e criar novos plugins, como um plugin para monitorar o tamanho de tabelas específicas. Também planejamos melhorar e criar ferramentas adicionais, bem como expandir as capacidades de auto-configuração através do comando mamonsu tune.
Módulo de monitoramento do PostgreSQL dentro do Zabbix Agent 2
Para conectar ao PostgreSQL, usamos um driver rápido e popular (driver PG e toolkit para Go).
Atualmente usamos duas interfaces: Exporter, que chama o manipulador pela chave, e Configurator do Zabbix Agent 2, que lê e verifica os parâmetros de conexão com o servidor, definidos no arquivo de configuração.
Nos esforçamos para otimizar o desempenho do SGBD, agrupando métricas e utilizando um manipulador (handler) para métricas e grupos de métricas, além de usar grupos de métricas em JSON como variáveis dependentes (dependency items) e descoberta de baixo nível (discovery rules).
Principais funcionalidades
- manutenção de uma conexão constante com o PostgreSQL entre as verificações;
- suporte a intervalos de sondagem flexíveis;
- compatibilidade com versões do PostgreSQL a partir da 10 e do Zabbix Server a partir da versão 4.4;
- a capacidade de conectar e monitorar várias instâncias do PostgreSQL simultaneamente, uma vez que o Zabbix Agent 2 permite a criação de várias sessões.
Níveis de parâmetros de conexão ao PostgreSQL
Estão disponíveis três níveis de parâmetros de conexão ao PostgreSQL, ou seja, tarefas e configurações:
- Global,
- Sessions,
- Macros.
Os parâmetros Global são definidos no nível do agente, enquanto os parâmetros Session e Macros determinam as configurações de conexão ao banco de dados.
Os parâmetros de conexão ao PostgreSQL — Sessions são definidos no arquivo zabbix_agent2.conf.

Os parâmetros de conexão ao PostgreSQL — Sessions
- Após a palavra-chave Sessions é indicado um nome de sessão exclusivo, que deve ser especificado na chave (modelo).
- Parâmetros URI e UserName é obrigatório para cada sessão.
- Se o nome do banco não for especificado, utiliza-se o nome padrão geral do banco para todas as sessões do PostgreSQL, que também é definido no arquivo de configuração.
- Os parâmetros de conexão ao PostgreSQL — Macros são especificados na chave da métrica no modelo (de forma semelhante ao método utilizado no Zabbix Agent 1), ou seja, são criados no modelo e posteriormente especificados como parâmetros na chave. Nesse caso, a sequência dos macros é fixa, ou seja, por exemplo, URI é sempre indicado em primeiro lugar.

Os parâmetros de conexão ao PostgreSQL — Macros
O módulo de monitoramento do PostgreSQL já inclui mais de 95 métricas, permitindo abranger uma ampla gama de parâmetros do PostgreSQL, incluindo:
- o número de conexões,
- o volume de bancos de dados,
- a arquivamento de arquivos wal,
- os pontos de verificação,
- o número de tabelas 'inchadas',
- o status da replicação,
- o atraso da réplica.
As métricas do PostgreSQL não são informativas sem os parâmetros do sistema operacional. Mas o Zabbix Agent 2 já consegue coletar parâmetros do sistema operacional, portanto, para obter uma visão completa, basta conectar ao nó de rede os modelos necessários.
Handler
Handler — a unidade principal do módulo, na qual a consulta é executada e que permite obter métricas.
Para obter uma métrica simples:
- Criamos um arquivo para obter uma nova métrica:
zabbix/src/go/plugins/postgres/handler_uptime.go
- Conectamos o pacote e especificamos a chave única (chaves) das métricas:

- Criamos um handler com a consulta, ou seja, inicializamos uma variável que conterá o resultado:

- Executamos a consulta:

É necessário verificar a consulta em busca de erros, após o que o resultado será captado pelo processo Zabbix Agent 2.
- Registramos a chave da nova métrica:

Após registrar a métrica, é possível reconfigurar o agente com a nova métrica.
O módulo está disponível a partir do Zabbix 5.0 no site . Nesta versão do Zabbix, os parâmetros são especificados separadamente através de host e port. Na versão Zabbix 5.0.2, que será lançada em breve, os parâmetros de conexão serão agrupados em uma única URI.
Obrigado pela atenção!
Links Úteis
Fonte: habr.com
