
Presentación de Darya Vilkova para Zabbix Meetup Online
Quiero presentarles una herramienta de monitoreo de PostgreSQL y del sistema operativo que está siendo desarrollada por nuestra empresa utilizando Zabbix.
Elegimos Zabbix como nuestra herramienta de monitoreo hace tiempo, porque se trata de una plataforma de código abierto, soportada por una comunidad activa, que es muy popular en Rusia.
Creamos un agente activo: Mamonsu, que proporciona un monitoreo más flexible que el que ofrecían las herramientas estándar en ese momento, además de recoger métricas y enviarlas al servidor Zabbix. En nuestra empresa, Mamonsu se utiliza para auditorías.
Mamonsu
Mamonsu es un agente activo (Zabbix Trapper) para el monitoreo de PostgreSQL y del sistema operativo. Mamonsu (escrito en Python) permite configurar los parámetros de monitoreo de PostgreSQL y del sistema operativo en cinco minutos.
Mamonsu cuenta con herramientas adicionales:
- mamonsu tune — comando que edita los parámetros de configuración en el archivo de configuración de PostgreSQL para la máquina donde está instalado el agente Mamonsu.
- mamonsu report — comando que genera respuestas sobre el sistema operativo y PostgreSQL.
Mamonsu se instala en el servidor de la base de datos, recoge información, la compone en JSON y la envía para visualización al servidor Zabbix, donde debe haber una plantilla para sus métricas.

Esquema de funcionamiento de Mamonsu
Capacidades de Mamonsu
- Trabajo eficiente con PostgreSQL. La conexión constante con PostgreSQL es la principal ventaja de Mamonsu. Además, la cantidad máxima de conexiones es igual al número máximo de bases de datos a las que se conecta.
- Escalabilidad. Mamonsu es un agente completamente 'plugin', y gracias a la estructura fija de cada plugin y la relativa simplicidad de Python, es fácil aprender a escribir nuevos o editar los plugins estándar, es decir, los parámetros de recolección de métricas.
- Amplia cobertura de métricas para el monitoreo para PostgreSQL, incluyendo métricas específicas de extensiones.
- Inicio rápido, disponibilidad 'lista para usar'.
- Exportación de plantillas y archivos de configuración, así como la carga en el servidor Zabbix.
- Compatibilidad multiplataforma, lo que es importante para nuestros clientes que utilizan diversas distribuciones de Linux, incluidas las nacionales.
- Licencia BSD-clause.
Actualmente ofrecemos una variedad de complementos y en cada nueva versión nos esforzamos por añadir algo nuevo.
- 14 complementos para PostgreSQL,
- 8 complementos para OS Linux,
- 4 complementos para OS Windows.
Mamonsu recopila más de 110 métricas de PostgreSQL y sistemas operativos:
- 70 métricas de PostgreSQL,
- 40 métricas de OS Linux,
- 8 métricas de OS Windows.
Las métricas principales incluyen la disponibilidad de la base de datos, la cantidad de conexiones, el tamaño de la base de datos, los checkpoints, la velocidad de lectura/escritura, los bloqueos, la cantidad de procesos de autovacuum y la velocidad de generación de WAL. La lista completa de métricas disponibles y una descripción detallada de todas las herramientas están disponibles en el sitio web de GitHub.

Lista de métricas disponibles en el sitio web de GitHub
Iniciar Mamonsu en 5 minutos
La configuración de la monitorización de PostgreSQL y del sistema operativo con Mamonsu se puede realizar en 5 minutos mediante 5 sencillos pasos.
- Instalación de Mamonsu. Mamonsu se puede compilar a partir del código fuente o utilizar paquetes disponibles.
$ git clone ... && cd mamonsu && python setup.py
build && python setup.py install
- Configuración de conexiones. Es necesario especificar los parámetros de conexión a PostgreSQL y al Zabbix Server en el archivo agent.conf.
/etc/mamonsu/agent.conf
- Exportar plantilla a Zabbix Server.
$ mamonsu zabbix template export
/usr/share/mamonsu/example.xml
- Agregar un nodo de red al Zabbix Server. La plantilla exportada se conectará automáticamente al nuevo nodo de red en el Zabbix Server.
$ mamonsu zabbix host create mamonsu-demo
- Lanzamiento.
$ service mamonsu start
Direcciones futuras para el desarrollo de Mamonsu
Dentro del desarrollo de Mamonsu planeamos mejorar las métricas y crear nuevos complementos, por ejemplo, un complemento para la monitorización del tamaño de tablas específicas. También planeamos mejorar y crear herramientas adicionales, así como ampliar las capacidades de autoajuste a través del comando mamonsu tune.
Módulo de monitorización de PostgreSQL como parte de Zabbix Agent 2
Para conectarse a PostgreSQL se utiliza un controlador rápido y popular (Controlador y kit de herramientas PG para Go).
Por ahora, utilizamos dos interfaces: Exporter, que llama al manejador por clave, y Configurator Zabbix Agent 2, que lee y verifica los parámetros de conexión al servidor especificados en el archivo de configuración.
Hemos tratado de optimizar el funcionamiento de la base de datos agrupando métricas y usando un manejador para métricas y grupos de métricas, así como utilizando grupos de métricas en JSON como variables dependientes y reglas de descubrimiento de bajo nivel.
Principales características
- manteniendo una conexión persistente con PostgreSQL entre verificaciones;
- soporte para intervalos de sondeo flexibles;
- compatibilidad con versiones de PostgreSQL desde la 10 y Zabbix Server desde la versión 4.4;
- posibilidad de conexión y monitoreo de múltiples instancias de PostgreSQL al mismo tiempo gracias a que Zabbix Agent 2 permite crear múltiples sesiones.
Niveles de parámetros de conexión a PostgreSQL
Hay tres niveles de parámetros de conexión a PostgreSQL, es decir, tareas y configuraciones:
- Global,
- Sesiones,
- Macros.
Los parámetros Global se configuran a nivel de agente, mientras que los parámetros de Sesión y Macros definen los parámetros de conexión a la base.
Los parámetros de conexión a PostgreSQL - Sesiones se definen en el archivo zabbix_agent2.conf.

Los parámetros de conexión a PostgreSQL - Sesiones
- Después de la palabra clave Sesiones se indica un nombre único de sesión que debe ser especificado en la clave (plantilla).
- Parámetros URI y UserName es obligatorio para cada sesión.
- Si no se especifica el nombre de la base de datos, se utiliza el nombre predeterminado de la base para todas las sesiones de PostgreSQL, que también se establece en el archivo de configuración.
- Los parámetros de conexión a PostgreSQL - Macros se definen en la clave de métrica en la plantilla (de manera similar al método utilizado en Zabbix Agent 1), es decir, se crean en la plantilla y luego se indican como parámetros en la clave. En este caso, la secuencia de macros es fija, por ejemplo, URI siempre se indica en primer lugar.

Los parámetros de conexión a PostgreSQL - Macros
El módulo de monitoreo de PostgreSQL incluye más de 95 métricas, las cuales permiten abarcar un amplio rango de parámetros de PostgreSQL, incluyendo:
- número de conexiones,
- tamaño de las bases de datos,
- archivamiento de archivos wal,
- puntos de control,
- número de tablas 'infladas',
- estado de replicación,
- retraso en la réplica.
Las métricas de PostgreSQL no son informativas sin los parámetros del sistema operativo. Sin embargo, Zabbix Agent 2 ya puede recopilar parámetros del sistema operativo, por lo que para obtener un panorama completo, simplemente conectamos las plantillas necesarias al nodo de red.
Manejador (handler)
Manejador (handler) — la unidad principal del módulo, donde se ejecuta la solicitud y que permite obtener métricas.
Para obtener una métrica simple:
- Creamos un archivo para obtener una nueva métrica:
zabbix/src/go/plugins/postgres/handler_uptime.go
- Conectamos el paquete y especificamos una clave única (claves) de métricas:

- Creamos un manejador (handler) con la solicitud, es decir, inicializamos una variable que contendrá el resultado:

- Ejecutamos la solicitud:

Es necesario verificar la solicitud en busca de errores, tras lo cual el resultado será recogido por el proceso Zabbix Agent 2.
- Registramos la clave de una nueva métrica:

Después de registrar la métrica, se puede reconstruir el agente con la nueva métrica.
El módulo está disponible a partir de Zabbix 5.0 en el sitio . En esta versión de Zabbix, los parámetros se establecen por separado a través de host y port. En la versión Zabbix 5.0.2, que saldrá pronto, los parámetros de conexión se agruparán en una única URI.
¡Gracias por su atención!
Enlaces útiles
Fuente: habr.com
