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 StartODBCPollers nel 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 chiave call.

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 dsn e stringa di connessione siano parametri facoltativi, è richiesto almeno uno dei due; se entrambi sono definiti, dsn verrà 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 dsn e stringa di connessione siano parametri facoltativi, è richiesto almeno uno dei due; se entrambi sono definiti, dsn verrà 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 dsn e stringa di connessione siano parametri facoltativi, è necessario specificarne almeno uno; se entrambi sono definiti, dsn verrà 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.