Zabbix
e' un potente stumento di monitoraggio dei sistemi
Open Source noto per la ricchezza di funzionalita'.
Questo documento descrive, in termini pratici,
come utilizzare Zabbix per monitorare i piu' diffusi database.
Il documento fa riferimento alla versione 2.2 LTS
di Zabbix su Linux ma e', mutatis mutandis, valido anche per le altre versioni
[NdA in realta' ora e' passato un po' troppo tempo: i concetti di base ed i link sono ancora validi
ma le integrazioni verso i database sono ora molto piu' complete e verso molti piu' prodotti;
temo che prima o poi dovro' riscrivere questa paginetta...].
Dopo una breve introduzione sui principali elementi dell'archittettura di Zabbix,
vengono analizzati le principali statistiche prestazionali e strumenti di monitoraggio disponibili
per ogni database.
Ecco i principali capitoli:
Zabbix (da saltare se conoscete gia' Zabbix),
Monitoraggio Database,
MySQL,
PostgreSQL,
Oracle,
MongoDB,
...
Varie ed eventuali
Zabbiz e' uno dei piu' diffusi e completi strumenti di network e system monitoring.
Zabbiz ha un'interfaccia completa, ha la possibilita' di personalizzare la console,
e mantiene i dati su un DB (tipicamente MySQL).
Zabbix puo' essere utilizzato come strumento di
Monitoraggio aziendale e, grazie alla memorizzazione dei dati e alla loro semplice
presentazione, anche come strumento di Performance e Capacity Management.
Zabbix e' un Open Source rilasciato con licenza GNU.
Sono disponibili ulteriori plugin (tipicamente anch'essi Open Source)
ed eventualmente il supporto.
Zabbix presenta con una serie di mappe e di grafici i dati raccolti dai sistemi controllati rendendo semplice ed efficace il monitoraggio di una realta' aziendale anche molto complessa.
I controlli piu' semplici (ping, SMTP, HTTP) possono essere eseguiti senza installare nulla
sui sistemi da controllare.
Per disporre delle funzionalita' piu' complete Zabbix richiede l'installazione di agenti
e l'apertura di porte specifiche.
Nel caso in cui non vengano installati Agent e' possibile utilizzare i controlli di tipo Simple oppure una serie di altri controlli
che sfruttano protocolli standard (eg. SNMP, SSH ecc.) oppure script esterni.
Nel caso in cui vengano utilizzati controlli di tipo simple sara' possibile controllare la presenza di un server (eg. ping)
o di un servizio (eg. telnet hostname 1521) ma non e' possibile raccogliere ulteriori informazioni.
Con l'installazione di un agent e' possibile utilizzare due tipi di controlli:
Active o Passive.
I controlli di tipo Passive sono guidati dal server Zabbix.
Il traffico dati avviene sulla porta TCP/10050 ed
e' zabbix-server ad interrogare gli Agent sui sistemi controllati.
Il controllo di tipo Active viene utilizzato quando, ad esempio per ragioni di sicurezza,
i sistemi da controllare non possono essere raggiunti dall'esterno
e sono quindi loro a farsi carico della trasmissione dei dati.
Il traffico avviene sulla porta TCP/10051.
Oltre ai Check tramite Zabbix Agent, il sistema e' in grado di effettuare il monitoraggio tramite molti altri protocolli, per esempio via SSH, SNMP o tramite ODBC verso i Database (appoggiandosi a Linux ODBC). E' anche in grado di acquisire metriche di monitoraggio tramite External Check.
Per ogni metrica raccolta e' possibile configurare uno o piu' triggers. Ad ogni trigger e' possibile associare un livello di gravita' (che regola il colore con cui verra' cerchiato l'host sulla mappa) e una soglia in base alla quale si possono definire le azioni (invio mail, invio sms, esecuzione di uno script ecc..). Sia i trigger che le azioni possono essere create in base a condizioni molto sofisticate.
Per garantire una gestione completamente automatizzata Zabbix fornisce una completa interfaccia API. Le API di Zabbix usano il protocollo JSON-RPC 2.0. Forniscono un ricco insieme di metodi separati tra di essi, tramite i quali si puo' interagire col server sotto ogni aspetto. Le richieste alle API e le risposte da esse sono in formato JSON. Si riporta per completezza un esempio di una semplice richiesta in formato JSON. Utilizzando il metodo apiinfo.version inviamo una richiesta di versione alle API e ne otteniamo la relativa risposta:
La configurazione degli agenti zabbix si esegue agendo sul file di configurazione del demone zabbix_agentd.conf (di default disponibile in /etc/zabbix).
Non e' raro utilizzare file di configurazione aggiuntivi in cui inserire particolari personalizzazioni o parametri specifici per Items e Template Custom. Tramite l'uso della direttiva "Include" in zabbix_agentd.conf abbiamo la possibilita' di includere path specifici dove andare ad aggiungere file di configurazione conteneti personalizzazioni e customizzazioni (eg Include= /etc/zabbix/zabbix_agentd.d/). In questi file possiamo aggiungere degli user parameter custom: delimitati da virgola (,) abbiamo il riferimento all'Items Zabbix a sinistra e il comando da eseguire a destra.
Un semplice esempio: in /etc/zabbix/zabbix_agentd.d/ abbiamo aggiunto il file userparameter_mysql.conf. All'interno troviamo la seguente direttiva:
UserParameter=mysql.version,mysql -V
Questo UserParameter, configurando opportunamente l'Item sul server Zabbix, ci restituira' la versione di MySql in uso.
Zabbix Server, di default, fornisce un piccolo insieme di template di controlli per monitorare i servizi/applicazioni/S.O. piu' diffusi (S.O. Linux, Windows, MySQL ecc). Se il servizio/applicazione/S.O. che dovete monitorare nella vostra realta' non e' compreso nell'elenco dei template di default di Zabbix, avete solo 2 possibilita': o scaricate e importate un Template scritto da qualcun'altro (per esempio dalla sezione zabbix-community-repos di github) oppure vi potete scrivere il vostro Template. Scrivere un Template di controlli Zabbix non e' difficile, occorre naturalmente conoscere bene Zabbix, il sistema remoto da monitorare e avere a disposizione un po' di tempo per testare e far funzionare il tutto.
Prima di entrare nel dettaglio delle configurazioni per ogni tipologia di Database descritta in questo documento, occorre definire le principali tipologie di Items (quelle utilizzate per il nostro scopo), ovvero il sistema con cui acquisire le metriche dai sistemi remoti monitorati.
Sul sito Zabbix sono disponibili l'elenco dei Template ufficiali e quello dei piu' utilizzati Template DB.
Nei prossimi capitoli si vedra' come personalizzare la configurazione standard per inserire il monitoraggio per i database piu' diffusi.
E' ovvio, ma non per questo va trascurato, che e' possibile effettuare il monitoraggio della sola raggiungibilita' di un database con un controllo di tipo Simple: basta verificare la porta TCP di accesso alla base dati. La tabella seguente riporta le porte di default utilizzate dai database descritti in questo documento (ed altri molto diffusi):
Database | Porta (default) |
MySQL | 3306 |
PostgreSQL | 5432 |
Oracle | 1521 |
MongoDB | 27017 |
SQL Server | 1433 |
DB2 | 6789 |
Hive | 10000 |
Firebird | 3050 |
Sybase | 5000 |
ClickHouse | 8123 |
Il controllo di raggiungibilita' della porta del database non
effettua un'autenticazione corretta verso la base dati e, in qualche caso,
puo' essere scambiata dall'RDBMS come un port scan o un DOS...
Generalmente non e' un problema, ma va tenuto in conto.
Nei prossimi capitoli vedremo le configurazioni degli agenti
necessarie per monitorare i piu' diffusi database.
Le configurazioni descritte nel seguito effettuano accessi corretti
alla base dati e consentono la raccolta di metriche significative e non solo il
controllo della raggiungibilita' della base dati.
Ogni database fornisce un'ampia serie di statistiche e di strumenti
per consentirne il monitoraggio ed il tuning.
Da questo punto di vista uno strumento come Zabbix non potra'
mai sostituirsi agli strumenti nativi che risulteranno sempre
piu' affidabili e completi.
Dove diventa effettivamente utile una console comune quando
e' necessario correlare elementi relativi al sistema operativo,
alla rete, all'architettura applicativa, ... ed ai database.
A questo punto la flessibilita' e completezza di Zabbix diventano
utilissimi per fornire un ambiente unico che consenta
il monitoraggio, il controllo delle performance e la valutazione
dei trend di crescita di tutti i componenti di una complessa realta' aziendale.
Per raccogliere metriche relative ai database ospitati sui sistemi in monitoraggio e' necessario installare un agente. Ogni agente raccogliera' le metriche previste per la base dati per cui e' stato sviluppato. Naturalmente le metriche dipendono dalla base dati, ma vi sono ovviamente analogie [NdE perche' spesso hanno un'anatomia comparabile]. Tra tipologie di metriche piu' importanti ricordiamo:
Un'avvertenza importante: la frequenza di campionamento deve essere ragionevole! Se una verifica della raggiungibilita' e del corretto funzionamento del database puo' e deve essere frequente al contrario altre statistiche risulterebbero inutilmente pesanti se eseguite con alta frequenza.
Il Template di controlli scelto e' quello a corredo con l'installazione di Zabbix ("Template App MySQL"). Questo template utilizza Items di tipo Zabbix Agent.
[mysql] user=zabbix_monitor password=my_strong_password [mysqladmin] user=zabbix_monitor password=my_strong_password
Verificare ora che il file di configurazione del demone (zabbix_agentd.conf)
contenga la direttiva
"Include=/etc/zabbix/zabbix_agentd.d/".
Se non presente, aggiungerla ed eventualmente creare opportunamente la dir zabbix_agentd.d.
Copiare ora il file di configurazione userparameter_mysql.conf in questo path
(lo userparameter per mysql viene fornito con l'installazione dell'agente,
lo su puo' trovare in /usr/share/doc/zabbix22-agent-2.2.X/userparameter_mysql.conf).
Editare ora il file userparameter_mysql.conf e modificare
la variabile HOME in modo coerente al PATH in cui abbiamo creato il nostro .my.cnf.
Eseguire il restart dell'agente.
L'agent utilizza fondamentalmente il comando SHOW VARIABLES per raccogliere lo stato del database. Su MySQL tale comando non richiede alcun privilegio. Nel caso si estenda lo userparameter_mysql.conf con altre selezioni dati e' sufficiente fornire i GRANT relativi. Per ragioni di sicurezza e controllo si consiglia la creazione di un utente specifico per il monitoraggio:
Il Template di controlli per PostgreSQL non e' fornito con i template di default di Zabbix. In rete si trovano diversi template, dal diverso funzionamento. Questo documento descrive l'installazione del template pgCayenne PostgreSQL disponibile su GitHub in zabbix-community-repos che e' un'ottima sorgente di template [NdE la versione piu' recente e' pubblicata su GitHub]. Abbiamo scelto questo template in quanto vengono monitorate di base le principali e piu' significative metriche di Postgres, perche' utilizza Items di tipo Zabbix Agent, e perche' utilizza SOLO il comando psql (standard PostgreSQL client utility). Questo aspetto rende semplice qualunque personalizzazione, modifica o aggiunta di nuove funzionalita' al template stesso.
Attenzione: questo template utilizza per alcuni check le extensions pg_buffercache e pg_stat_statements. Si consiglia l'installazione di queste extensions sui database da monitorare poiche' consentono l'estrazione di metriche molto significative.
Scaricare quindi il template (.xml) e il file di configurazione dell'agente (.conf).
Editare coerentemente tutte le MACRO del template: In modo particolare prestare attenzione alla MACRO {$PG_CONNINFO} che contiene i parametri che verranno passati a psql in fase di connessione al Database.
E' ora sufficiente andare in configurazione host, selezionare l'host che ospita il Database PostgreSQL da monitorare e collegare il Template appena importato all'host stesso.
Eseguire il restart dell'agente.
Editare ora il file contenente le regole di accesso di PostgreSQL (pg_hba.conf). Il template utilizza psql e questi non consente l'inserimento della password d'accesso da linea di comando (in modo non interattivo). Il template e' quindi pensato per funzionare con un'utenza settata in trust:
host db_production postgres 127.0.0.1/32 trust
Se per ragioni di sicurezza si vuole evitare un'utenza settata in trust e' possibile una configurazione alternativa. Se il vostro utente e' un utente di sistema e ha una home, create il .pgpass per l'utente, altrimenti create il vostro .pgpass sotto /etc/zabbix
localhost:*:*:zabbix_monitor:my_strong_password
Settare le opportune permission al .pgpass (nell'esempio di seguito settiamo come owner zabbix:zabbix in quanto il nostro utente non e' un utente di sistema):
chown zabbix:zabbix .pgpass chmod 600 .pgpass
Se non utilizziamo una utenza di sistema avremo anche necessita' di passare il path del .pgpass file in fase di collegamento al Database. Possiamo farlo settando una variabile d'ambiente:
export PGPASSFILE="/etc/zabbix/.pgpass"
Per rendere l'impostazione persistente al reboot aggiungere in /etc/environment
PGPASSFILE="/etc/zabbix/.pgpass"
Per ragioni di sicurezza e controllo si consiglia la creazione di un utente specifico per il monitoraggio nella base dati:
Il Template di controlli per Oracle non e' fornito con i template di default di Zabbix. In rete si trovano diversi template realizzati con tecniche differenti. Alcuni di essi sono template che usano controlli di tipo "Database Monitor" (via unixODBC). Se volete utilizzare un template di questo tipo occorre prima di tutto aver abilitato (in fase di compilazione di Zabbix) i check via ODBC, e poi occorre configurare opportunamente unixODBC in base ai Database che si vuole monitorare. Fatto questo, importate il Template, collegatelo all'host interessato e il gioco e' fatto.
Questo documento descrive invece l'installazione del template PYORA per Oracle. Questo Template utilizza Items di tipo External Check, puo' essere eseguito sia sul Server Zabbix che sull'host monitorato, semplificando l'installazione e la configurazione. Si basa su uno script in python, questo aspetto rende semplice la personalizzazione, modifica o aggiunta di nuove funzionalita' al template stesso.
I pre-requisiti dello script sono: python 2.6 o 2.7, cx-Oracle==5.1.2 e python-argparse.
Editare ora il template e creare le seguenti MACRO assegnado valori coerenti al vostro Database Oracle: {$ADDRESS}, {$DATABASE}, {$USERNAME}, {$PASSWORD}.
Attenzione, non potrete utilizzare direttamente lo script python da Zabbix. Per far funzionare tutto dovrete scrivervi un semplice wrapper in bash.
Visto che si tratta di un Template basato su External Check, sul nodo che ospita il Database target non e' necessaria alcuna configurazione e' sufficiente la creazione di un utente.
Si consiglia la creazione di un utente specifico per il monitoraggio:
Il Template di controlli per MongoDB non e' fornito con i template di default di Zabbix. Questo documento descrive l'installazione del template Mikoomi per MongoDB. Abbiamo scelto questo template in quanto vengono monitorate di base le principali e piu' significative metriche di MongoDB. Questo Template utilizza Items di tipo Zabbix Trapper, puo' essere eseguito sia sul Server Zabbix che sull'host monitorato. Si basa su uno script in php, questo aspetto rende semplice qualunque personalizzazione, modifica o aggiunta di nuove funzionalita' al template stesso.
I pre-requisiti sono: PHP5 e il driver PHP per MongoDB.
Editare il crontab dell'utente zabbix (crontab -u zabbix -e) e inserire una riga di questo tipo in base alle proprie esigenze:
In questo esempio lo script verra' eseguito ogni minuto. Visto che si tratta di Items di tipo Zabbix Trapper, il server e' sempre in ascolto. La cadenza dei controlli quindi viene decisa in base all'esecuzione dello script.
Sul Database target non dovrete fare altro che creare un'utenza con sufficienti privilegi per poter eseguire il monitoraggio.
Le integrazioni di Zabbix sono riportate su questa pagina del sito ufficiale.
Come descrizione generale sui database possono essere utili i seguenti documenti:
Introduzione a MySQL,
Introduzione a PostgreSQL,
Introduzione a Oracle,
Introduzione a MongoDB,
...
I documenti seguenti sono
rivolti al monitoraggio e alle performances, ma anche un poco piu' specialistici:
Statistiche prestazionali in Oracle,
Statistiche prestazionali in PostgreSQL,
Configurazione e tuning di MySQL,
Oracle DBA SQL scripts,
MySQL DBA SQL scripts,
PostgreSQL DBA SQL scripts,
...
Le diverse versioni di Zabbix [NdA ed anche dei principali database] sono riportate in questo utile documento.
Titolo: Monitorare i database con Zabbix
Livello: Avanzato
Data:
21 Settembre 2015
Versione: 1.0.1 - 1 Novembre 2015
Autore: mail [AT] meo.bogliolo.name, cristiano.merla [AT] xenialab.it