8 Monitoraggio del database
Panoramica
Il tipo di item Database monitor nel frontend di Zabbix viene utilizzato per il monitoraggio ODBC (controlli ODBC).
ODBC è un'API middleware del linguaggio di programmazione C per l'accesso ai sistemi di gestione di database (DBMS). Il concetto ODBC è stato sviluppato da Microsoft e successivamente portato su altre piattaforme.
Zabbix può interrogare qualsiasi database supportato da ODBC. Per farlo, Zabbix non si connette direttamente ai database, ma utilizza l'interfaccia ODBC e i driver configurati in ODBC. Questo consente un monitoraggio più efficiente di diversi database per molteplici scopi (ad esempio, il controllo di code specifiche del database, statistiche di utilizzo, ecc.).
Zabbix supporta unixODBC, che è una delle implementazioni open source dell'API ODBC più comunemente utilizzate.
Vedi anche: problemi noti per i controlli ODBC.
Installazione di unixODBC
Il modo consigliato per installare unixODBC è utilizzare i repository di pacchetti predefiniti del sistema operativo Linux. Nelle distribuzioni Linux più diffuse, unixODBC è incluso nel repository dei pacchetti per impostazione predefinita. Se i pacchetti non sono disponibili, i file sorgente possono essere ottenuti dalla homepage di unixODBC: http://www.unixodbc.org/download.html.
Per installare unixODBC, utilizzare il gestore di pacchetti del sistema scelto:
# Per sistemi Ubuntu/Debian:
apt install unixodbc unixodbc-dev
# Per sistemi basati su RedHat/Fedora:
dnf install unixODBC unixODBC-devel
# Per sistemi basati su SUSE:
zypper in unixODBC-devel
Il pacchetto unixodbc-dev o unixODBC-devel è necessario per compilare Zabbix con il supporto unixODBC.
Per abilitare il supporto ODBC, Zabbix deve essere compilato con la seguente opzione di configurazione:
--with-unixodbc[=ARG] # Usa il driver ODBC con il pacchetto unixODBC.
Installazione dei driver unixODBC
Il driver di database unixODBC deve essere installato per il database che verrà monitorato. Per un elenco dei database e dei driver supportati, vedere la homepage di unixODBC: http://www.unixodbc.org/drivers.html.
In alcune distribuzioni Linux, i driver di database sono inclusi nei repository dei pacchetti.
MySQL
Per installare il driver di database MySQL unixODBC, utilizzare il gestore di pacchetti del sistema scelto:
# Per sistemi Ubuntu/Debian:
apt install odbc-mariadb
# Per sistemi basati su RedHat/Fedora:
dnf install mariadb-connector-odbc
# Per sistemi basati su SUSE:
zypper install mariadb-connector-odbc
Per installare il driver di database senza un gestore di pacchetti, fare riferimento alla documentazione MySQL per mysql-connector-odbc, oppure alla documentazione MariaDB per mariadb-connector-odbc.
PostgreSQL
Per installare il driver di database PostgreSQL unixODBC, utilizzare il gestore di pacchetti del sistema scelto:
# Per sistemi Ubuntu/Debian:
apt install odbc-postgresql
# Per sistemi basati su RedHat/Fedora:
dnf install postgresql-odbc
# Per sistemi basati su SUSE:
zypper install psqlODBC
Per installare il driver di database senza un gestore di pacchetti, fare riferimento alla documentazione di PostgreSQL.
Oracle
Per installare il driver di database unixODBC, fare riferimento alla documentazione Oracle.
MSSQL
Per installare il driver di database MSSQL unixODBC, utilizzare il gestore di pacchetti del sistema scelto:
# Per sistemi Ubuntu/Debian:
apt install tdsodbc
# Per sistemi basati su RedHat/Fedora (pacchetti EPEL: https://docs.fedoraproject.org/en-US/epel/):
dnf install epel-release
dnf install freetds
# Per sistemi basati su SUSE:
zypper install libtdsodbc0
Per installare il driver di database senza un gestore di pacchetti, fare riferimento alla guida utente di FreeTDS.
Configurazione di unixODBC
Per configurare unixODBC, è necessario modificare i file odbcinst.ini e odbc.ini.
È possibile verificare il percorso di questi file eseguendo il seguente comando:
odbcinst -j
Il risultato del comando dovrebbe contenere informazioni simili alle seguenti:
unixODBC 2.3.9
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
odbcinst.ini
Il file odbcinst.ini elenca i driver di database ODBC installati.
Se odbcinst.ini manca, è necessario crearlo manualmente.
[TEST_MYSQL]
Description=ODBC for MySQL
Driver=/usr/lib/libmyodbc5.so
FileUsage=1
| Parameter | Description |
|---|---|
| TEST_MYSQL | Nome del driver di database. |
| Description | Descrizione del driver di database. |
| Driver | Percorso della libreria del driver di database. |
| FileUsage | Determina se il driver di database supporta la connessione a un server di database senza il supporto per l'accesso ai file locali (0); supporta la lettura dei dati dai file (1); supporta la scrittura dei dati nei file (2). |
| Threading | Livello di serializzazione dei thread. Supportato per PostgreSQL. Dalla versione 1.6, se il gestore dei driver è compilato con il supporto ai thread, è possibile aggiungere un'altra voce del driver. |
odbc.ini
Il file odbc.ini viene utilizzato per configurare le origini dati.
Si noti che l'elenco dei parametri supportati dipende dal driver del database (ad esempio, i database Oracle possono utilizzare ServerName invece di Server, ecc.).
[TEST_MYSQL]
Description=MySQL Test Database
Driver=mysql
Server=127.0.0.1
User=root
Password=
Port=3306
Socket=
Database=zabbix
| Parameter | Description |
|---|---|
| TEST_MYSQL | Nome dell'origine dati (DSN). |
| Description | Descrizione dell'origine dati. |
| Driver | Nome del driver del database (come specificato in odbcinst.ini). |
| Server | IP/DNS del server del database. |
| User | Utente del database per la connessione. |
| Password | Password dell'utente del database. |
| Port | Porta di connessione al database. |
| Socket | Socket di connessione al database. |
| Database | Nome del database. |
Per altre possibili opzioni dei parametri di configurazione, vedere la documentazione MySQL.
Il file odbc.ini per PostgreSQL può contenere parametri aggiuntivi:
[TEST_PSQL]
Description=Database di test PostgreSQL
Driver=postgresql
Username=zbx_test
Password=zabbix
Servername=127.0.0.1
Database=zabbix
Port=5432
ReadOnly=No
Protocol=8.0+
ShowOidColumn=No
FakeOidIndex=No
RowVersioning=No
ShowSystemTables=No
Fetch=Yes
BoolsAsChar=Yes
SSLmode=Require
ConnSettings=
| Parametro | Descrizione |
|---|---|
| ReadOnly | Specifica se la connessione al database consente solo operazioni di lettura (query SELECT) e limita le modifiche (istruzioni INSERT, UPDATE e DELETE); utile negli scenari in cui i dati devono rimanere invariati. |
| Protocol | Versione del protocollo backend di PostgreSQL (ignorata quando si utilizzano connessioni SSL). |
| ShowOidColumn | Specifica se includere l'Object ID (OID) in SQLColumns. |
| FakeOidIndex | Specifica se creare un indice univoco fittizio su OID. |
| RowVersioning | Specifica se consentire alle applicazioni di rilevare se i dati sono stati modificati da altri utenti mentre si sta tentando di aggiornare una riga. Si noti che questo parametro può velocizzare il processo di aggiornamento, poiché, per aggiornare una riga, non è necessario specificare ogni singola colonna nella clausola WHERE. |
| ShowSystemTables | Specifica se il driver del database deve trattare le tabelle di sistema come tabelle normali in SQLTables; utile per l'accessibilità, in quanto consente la visibilità delle tabelle di sistema. |
| Fetch | Specifica se il driver deve utilizzare automaticamente declare cursor/fetch per gestire le istruzioni SELECT e mantenere una cache di 100 righe. |
| BoolsAsChar | Controlla la mappatura dei tipi Boolean. Se impostato su "Yes", i valori Boolean vengono mappati a SQL_CHAR; altrimenti, vengono mappati a SQL_BIT. |
| SSLmode | Specifica la modalità SSL per la connessione. |
| ConnSettings | Impostazioni aggiuntive inviate al backend al momento della connessione. |
Test della connessione ODBC
Per verificare se la connessione ODBC funziona correttamente, puoi utilizzare l'utilità isql (inclusa nel pacchetto unixODBC):
isql test
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
Configurazione degli item nel frontend di Zabbix
Configura un item di monitoraggio database.

Tutti i campi di input obbligatori sono contrassegnati da un asterisco rosso.
Per gli item di monitoraggio database, è necessario specificare:
| Type | Selezionare qui "Database monitor". |
| Key | Inserire una delle chiavi item supportate: db.odbc.select[] - questo item restituisce un valore (la prima colonna della prima riga del risultato della query SQL); db.odbc.get[] - questo item restituisce più righe/colonne in formato JSON; db.odbc.discovery[] - questo item restituisce dati di low-level discovery. |
| User name | Inserire il nome utente del database (fino a 255 caratteri). Questo parametro è facoltativo se il nome utente del database è specificato nel file odbc.ini.Se viene utilizzata una stringa di connessione e il campo User name non è vuoto, allora viene aggiunto alla stringa di connessione come UID=<user>. |
| Password | Inserire la password dell'utente del database (fino a 255 caratteri). Questo parametro è facoltativo se la password è specificata nel file odbc.ini.Se viene utilizzata una stringa di connessione e il campo Password non è vuoto, allora viene aggiunto alla stringa di connessione come PWD=<password>.I caratteri speciali sono supportati in questo campo. La password verrà aggiunta alla stringa di connessione dopo il nome utente, ad esempio come UID=<username>;PWD=P?;)*word.Per testare la stringa risultante, è possibile eseguire il seguente comando: isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD=P?;)*word' |
| SQL query | Inserire la query SQL. Si noti che con db.odbc.select[] la query deve restituire un solo valore. |
| Type of information | Selezionare qui il tipo di informazioni che verrà restituito dalla query. Se il tipo di informazioni viene selezionato in modo errato, l'item diventerà non supportato. |
Note importanti
- Gli item di monitoraggio del database diventeranno non supportati se non viene avviato alcun processo odbc poller nella configurazione del server o del proxy.
Per attivare gli ODBC poller, impostare il parametro
StartODBCPollersnel file di configurazione di Zabbix server oppure, per i controlli eseguiti dal proxy, nel file di configurazione di Zabbix proxy. - Il valore del parametro Timeout nel modulo di configurazione dell'item viene utilizzato come timeout di accesso ODBC e come timeout di esecuzione della query. Si noti che queste impostazioni di timeout potrebbero essere ignorate se il driver ODBC installato non le supporta.
- Il comando SQL deve restituire un set di risultati come qualsiasi query che utilizza l'istruzione
select. La sintassi della query dipenderà dall'RDBMS che la elaborerà. La sintassi della richiesta a una procedura memorizzata deve iniziare con la parola chiavecall.
Dettagli della chiave item
I parametri senza parentesi angolari sono obbligatori. I parametri contrassegnati dalle parentesi angolari < > sono facoltativi.
db.odbc.select[<breve descrizione univoca>,<dsn>,<stringa di connessione>]
Restituisce un valore, cioè la prima colonna della prima riga del risultato della query SQL.
Valore restituito: dipende dalla query SQL.
Parametri:
- breve descrizione univoca - una breve descrizione univoca per identificare l'item (da utilizzare nei trigger, ecc.);
- dsn - il nome dell'origine dati (come specificato in
odbc.ini); - stringa di connessione - la stringa di connessione (può contenere argomenti specifici del driver).
Commenti:
- Sebbene
dsnestringa di connessionesiano parametri facoltativi, è richiesto almeno uno dei due; se entrambi sono definiti,dsnverrà ignorato. - Se una query restituisce più di una colonna, viene letta solo la prima colonna. Se una query restituisce più di una riga, viene letta solo la prima riga.
db.odbc.get[<breve descrizione univoca>,<dsn>,<stringa di connessione>]
Trasforma il risultato della query SQL in un array JSON.
Valore restituito: oggetto JSON.
Parametri:
- breve descrizione univoca - una breve descrizione univoca per identificare l'item (da usare nei trigger, ecc.);
- dsn - il nome dell'origine dati (come specificato in
odbc.ini); - stringa di connessione - la stringa di connessione (può contenere argomenti specifici del driver).
Commenti:
- Sebbene
dsnestringa di connessionesiano parametri facoltativi, è richiesto almeno uno dei due; se entrambi sono definiti,dsnverrà ignorato. - Possono essere restituite più righe/colonne in formato JSON. Questo item può essere usato come item master che raccoglie tutti i dati in una singola chiamata di sistema, mentre il preprocessing JSONPath può essere usato negli item dipendenti per estrarre i singoli valori. Per ulteriori informazioni, vedere un esempio del formato restituito, usato nel low-level discovery.
Esempio:
# Connessione per il driver MySQL ODBC 5:
db.odbc.get[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]
db.odbc.discovery[<breve descrizione univoca>,<dsn>,<stringa di connessione>]
Trasforma il risultato della query SQL in un array JSON, utilizzato per il low-level discovery.
I nomi delle colonne del risultato della query vengono convertiti in nomi di macro di low-level discovery associati ai valori dei campi rilevati.
Queste macro possono essere utilizzate per creare prototipi di item, trigger, ecc.
Valore restituito: oggetto JSON.
Parametri:
- breve descrizione univoca - una breve descrizione univoca per identificare l'item (da utilizzare nei trigger, ecc.);
- dsn - il nome dell'origine dati (come specificato in
odbc.ini); - stringa di connessione - la stringa di connessione (può contenere argomenti specifici del driver).
Commenti:
- Sebbene
dsnestringa di connessionesiano parametri facoltativi, è necessario specificarne almeno uno; se entrambi sono definiti,dsnverrà ignorato.
Messaggi di errore
I messaggi di errore ODBC sono strutturati in campi per fornire informazioni dettagliate. Ad esempio, un messaggio di errore potrebbe avere questo aspetto:
Cannot execute ODBC query: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]
- "
Cannot execute ODBC query" - messaggio di Zabbix - "
[SQL_ERROR]" - codice di ritorno ODBC - "
[42601]" - SQLState - "
[7]" - codice di errore nativo - "
[ERROR: syntax error at or near ";"; Error while executing the query]" - messaggio di errore nativo
Si noti che la lunghezza del messaggio di errore è limitata a 2048 byte, quindi il messaggio può essere troncato.
Se è presente più di un record diagnostico ODBC, Zabbix tenta di concatenarli (separati da |) per quanto consentito dal limite di lunghezza.