
Relazione di Darya Vilkova per Zabbix Meetup Online
Voglio presentarvi uno strumento di monitoraggio per PostgreSQL e il sistema operativo, sviluppato dalla nostra azienda utilizzando Zabbix.
Abbiamo scelto Zabbix come strumento di monitoraggio da tempo, poiché è una piattaforma open source, supportata da una comunità attiva, molto popolare in Russia.
Abbiamo creato un agente attivo — Mamonsu, che offre un monitoraggio più flessibile rispetto ai metodi standard dell'epoca, consentendo la raccolta di metriche e la loro invio al server Zabbix. Nella nostra azienda, Mamonsu viene utilizzato per condurre audit.
Mamonsu
Mamonsu è un agente attivo (Zabbix Trapper) per il monitoraggio di PostgreSQL e del sistema operativo. Mamonsu (scritto in Python) consente di configurare i parametri di monitoraggio di PostgreSQL e del sistema operativo in cinque minuti.
Mamonsu offre strumenti aggiuntivi:
- mamonsu tune — comando che modifica i parametri di configurazione nel file di configurazione di PostgreSQL in base alla macchina su cui è installato l'agente Mamonsu.
- rapporto Mamonsu — un team che crea risposte sul sistema operativo e PostgreSQL.
Mamonsu si installa sul server del DBMS, raccoglie informazioni, le compone in JSON e le invia per la visualizzazione su Zabbix Server, dove deve esserci un template per le sue metriche.

Schema di funzionamento di Mamonsu
Funzionalità di Mamonsu
- Lavoro efficiente con PostgreSQL. La connessione costante con PostgreSQL è il principale vantaggio di Mamonsu. In questo caso, il numero massimo di connessioni è pari al numero massimo di database ai quali si connette.
- Scalabilità. Mamonsu è un agente completamente 'plugin', e grazie alla struttura fissa di ogni plugin e alla relativa semplicità di Python, è facile imparare a scrivere nuovi plugin o modificare quelli standard, cioè i parametri di raccolta delle metriche.
- Ampia copertura delle metriche per il monitoraggio per PostgreSQL inclusi metriche specifiche delle estensioni.
- Avvio rapido, disponibilità 'out of the box'.
- Esportazione di template e file di configurazione, così come il caricamento su Zabbix Server.
- Cross-platform, che è importante per i nostri clienti che utilizzano diverse distribuzioni di Linux, comprese quelle nazionali.
- licenza BSD-clause.
Attualmente offriamo numerosi plugin e in ogni nuova versione ci impegniamo ad aggiungere qualcosa di nuovo.
- 14 plugin per PostgreSQL,
- 8 plugin per OS Linux,
- 4 plugin per OS Windows.
Mamonsu raccoglie oltre 110 metriche per PostgreSQL e sistemi operativi:
- 70 metriche per PostgreSQL,
- 40 metriche per OS Linux,
- 8 metriche per OS Windows.
Le metriche principali includono la disponibilità del DBMS, il numero di connessioni, la dimensione del database, i checkpoint, la velocità di lettura/scrittura, i blocchi, il numero di processi di autovacuum e la velocità di generazione del WAL. L'elenco completo delle metriche disponibili e una descrizione dettagliata di tutti gli strumenti sono disponibili sul sito GitHub.

Elenco delle metriche disponibili sul sito GitHub
Avviare Mamonsu in 5 minuti
Per configurare il monitoraggio di PostgreSQL e del sistema operativo con Mamonsu, sono necessari solo 5 minuti, eseguendo 5 semplici passaggi.
- Installazione di Mamonsu. Mamonsu può essere costruito dai sorgenti o utilizzando i pacchetti disponibili.
$ git clone ... && cd mamonsu && python setup.py
build && python setup.py install
- Configurazione delle connessioni. È necessario specificare i parametri di connessione a PostgreSQL e al server Zabbix nel file agent.conf.
/etc/mamonsu/agent.conf
- Esportazione del template nel server Zabbix.
$ mamonsu zabbix template export
/usr/share/mamonsu/example.xml
- Aggiunta di un nodo di rete nel server Zabbix. Il template esportato sarà automaticamente collegato al nuovo nodo della rete su Zabbix Server.
$ mamonsu zabbix host create mamonsu-demo
- Avvio.
$ service mamonsu start
Direzioni di sviluppo di Mamonsu
Nell'ambito dello sviluppo di Mamonsu, programiamo di migliorare le metriche e creare nuovi plugin, come un plugin per il monitoraggio delle dimensioni delle singole tabelle. Prevediamo anche di migliorare e creare strumenti aggiuntivi, oltre a estendere le funzionalità di auto-configurazione tramite il comando mamonsu tune.
Modulo di monitoraggio PostgreSQL all'interno di Zabbix Agent 2
Per la connessione a PostgreSQL utilizziamo un driver veloce e popolare (driver e toolkit PG per Go).
Attualmente utilizziamo due interfacce: l'Exporter, che chiama il handler per chiave, e il Configurator di Zabbix Agent 2, che legge e verifica i parametri di connessione al server definiti nel file di configurazione.
Abbiamo cercato di ottimizzare il funzionamento del DBMS raggruppando le metriche e utilizzando un handler per metriche e gruppi di metriche, oltre a utilizzare gruppi di metriche in JSON come variabili dipendenti (dependency items) e regole di scoperta a basso livello (discovery rules).
Funzionalità principali
- mantenimento di una connessione costante a PostgreSQL tra i controlli;
- supporto per intervalli di polling flessibili;
- compatibilità con le versioni di PostgreSQL a partire dalla 10 e Zabbix Server a partire dalla versione 4.4;
- possibilità di collegare e monitorare più istanze di PostgreSQL simultaneamente grazie al fatto che Zabbix Agent 2 consente di creare più sessioni.
Livelli di parametri di connessione a PostgreSQL
Sono disponibili tre livelli di parametri di connessione a PostgreSQL, ovvero compiti e impostazioni:
- Global,
- Sessions,
- Macros.
I parametri Global sono impostati a livello di agente, i parametri Session e Macros definiscono i parametri di connessione al database.
I parametri di connessione a PostgreSQL — Sessions sono impostati nel file zabbix_agent2.conf.

I parametri di connessione a PostgreSQL — Sessions
- Dopo la parola chiave Sessions viene indicato un nome univoco di sessione, che deve essere specificato nella chiave (nel modello).
- Parametri URI e UserName sono obbligatori per ogni sessione.
- Se il nome del database non è specificato, viene utilizzato il nome del database predefinito comune per tutte le sessioni di PostgreSQL, che è anch'esso definito nel file di configurazione.
- I parametri di connessione a PostgreSQL - i macro sono definiti nella chiave delle metriche nel modello (in modo simile al metodo utilizzato in Zabbix Agent 1), cioè vengono creati nel modello e indicati come parametri nella chiave. In questo caso, la sequenza dei macro è fissa, cioè, ad esempio, URI è sempre indicata al primo posto.

Parametri di connessione a PostgreSQL - i macro
Il modulo di monitoraggio PostgreSQL include già oltre 95 metriche, che consentono di coprire un'ampia gamma di parametri PostgreSQL, tra cui:
- numero di connessioni,
- dimensione dei database,
- archiviazione dei file wal,
- checkpoint,
- numero di tabelle "gonfiate",
- stato della replica,
- ritardo della replica.
Le metriche di PostgreSQL non sono informative senza i parametri del sistema operativo. Ma Zabbix Agent 2 è già in grado di raccogliere i parametri del sistema operativo, quindi per ottenere un quadro completo basta collegare ai nodi di rete i modelli necessari.
Gestore (handler)
Il gestore (handler) è l'unità principale del modulo in cui viene eseguita la richiesta stessa e che consente di ottenere le metriche.
Per ottenere una semplice metrica:
- Creiamo un file per ottenere una nuova metrica:
zabbix/src/go/plugins/postgres/handler_uptime.go
- Colleghiamo il pacchetto e indichiamo la chiave unica (chiavi) delle metriche:

- Creiamo un gestore (handler) con la richiesta, ovvero inizializziamo una variabile che conterrà il risultato:

- Eseguiamo la richiesta:

È necessario controllare la richiesta per eventuali errori, dopodiché il risultato sarà acquisito dal processo Zabbix Agent 2.
- Registriamo la chiave della nuova metrica:

Dopo la registrazione della metrica, è possibile ricostruire l'agente con la nuova metrica.
Il modulo è disponibile a partire da Zabbix 5.0 sul sito . In questa versione di Zabbix i parametri sono impostati separatamente tramite host e port. Nella versione Zabbix 5.0.2, che uscirà a breve, i parametri di connessione saranno combinati in un unico URI.
Grazie per l'attenzione!
Link utili
Fonte: habr.com
