14 Surveillance ODBC
Présentation
La supervision ODBC correspond au type d’élément Database monitor dans l’interface Zabbix.
ODBC est une API middleware du langage de programmation C permettant d’accéder aux systèmes de gestion de bases de données (SGBD). Le concept ODBC a été développé par Microsoft puis porté sur d’autres plateformes.
Zabbix peut interroger toute base de données prise en charge par ODBC. Pour cela, Zabbix ne se connecte pas directement aux bases de données, mais utilise l’interface ODBC et les pilotes configurés dans ODBC. Cela permet une supervision plus efficace de différentes bases de données à des fins multiples (par exemple, vérifier des files d’attente spécifiques de base de données, des statistiques d’utilisation, etc.).
Zabbix prend en charge unixODBC, qui est l’une des implémentations open source de l’API ODBC les plus couramment utilisées.
Voir aussi : problèmes connus pour les vérifications ODBC.
Installation de unixODBC
La méthode recommandée pour installer unixODBC consiste à utiliser les dépôts de paquets par défaut du système d’exploitation Linux. Dans les distributions Linux les plus populaires, unixODBC est inclus par défaut dans le dépôt de paquets. Si les paquets ne sont pas disponibles, les fichiers source peuvent être obtenus sur la page d’accueil de unixODBC : http://www.unixodbc.org/download.html.
Pour installer unixODBC, utilisez le gestionnaire de paquets du système de votre choix :
# Pour les systèmes Ubuntu/Debian :
apt install unixodbc unixodbc-dev
# Pour les systèmes basés sur RedHat/Fedora :
dnf install unixODBC unixODBC-devel
# Pour les systèmes basés sur SUSE :
zypper in unixODBC-devel
Le paquet unixodbc-dev ou unixODBC-devel est nécessaire pour compiler Zabbix avec la prise en charge de unixODBC.
Pour activer la prise en charge d’ODBC, Zabbix doit être compilé avec l’option de configuration suivante :
--with-unixodbc[=ARG] # Utiliser le pilote ODBC avec le paquet unixODBC.
Installation des pilotes unixODBC
Le pilote de base de données unixODBC doit être installé pour la base de données qui sera surveillée. Pour obtenir la liste des bases de données et des pilotes pris en charge, consultez la page d’accueil de unixODBC : http://www.unixodbc.org/drivers.html.
Dans certaines distributions Linux, les pilotes de base de données sont inclus dans les dépôts de paquets.
MySQL
Pour installer le pilote de base de données MySQL unixODBC, utilisez le gestionnaire de paquets du système de votre choix :
# Pour les systèmes Ubuntu/Debian :
apt install odbc-mariadb
# Pour les systèmes basés sur RedHat/Fedora :
dnf install mariadb-connector-odbc
# Pour les systèmes basés sur SUSE :
zypper install mariadb-connector-odbc
Pour installer le pilote de base de données sans gestionnaire de paquets, veuillez consulter la documentation MySQL pour mysql-connector-odbc, ou la documentation MariaDB pour mariadb-connector-odbc.
PostgreSQL
Pour installer le pilote de base de données PostgreSQL unixODBC, utilisez le gestionnaire de paquets du système de votre choix :
# Pour les systèmes Ubuntu/Debian :
apt install odbc-postgresql
# Pour les systèmes basés sur RedHat/Fedora :
dnf install postgresql-odbc
# Pour les systèmes basés sur SUSE :
zypper install psqlODBC
Pour installer le pilote de base de données sans gestionnaire de paquets, veuillez consulter la documentation PostgreSQL.
Oracle
Pour installer le pilote de base de données unixODBC, veuillez consulter la documentation Oracle.
MSSQL
Pour installer le pilote de base de données MSSQL unixODBC, utilisez le gestionnaire de paquets du système de votre choix :
# Pour les systèmes Ubuntu/Debian :
apt install tdsodbc
# Pour les systèmes basés sur RedHat/Fedora (paquets EPEL : https://docs.fedoraproject.org/en-US/epel/) :
dnf install epel-release
dnf install freetds
# Pour les systèmes basés sur SUSE :
zypper install libtdsodbc0
Pour installer le pilote de base de données sans gestionnaire de paquets, veuillez consulter le guide de l’utilisateur FreeTDS.
Configuration de unixODBC
Pour configurer unixODBC, vous devez modifier les fichiers odbcinst.ini et odbc.ini.
Vous pouvez vérifier l’emplacement de ces fichiers en exécutant la commande suivante :
odbcinst -j
Le résultat de la commande doit contenir des informations similaires à ce qui suit :
unixODBC 2.3.9
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
odbcinst.ini
Le fichier odbcinst.ini répertorie les pilotes de base de données ODBC installés.
Si odbcinst.ini est absent, il est nécessaire de le créer manuellement.
[TEST_MYSQL]
Description=ODBC for MySQL
Driver=/usr/lib/libmyodbc5.so
FileUsage=1
| Parameter | Description |
|---|---|
| TEST_MYSQL | Nom du pilote de base de données. |
| Description | Description du pilote de base de données. |
| Driver | Emplacement de la bibliothèque du pilote de base de données. |
| FileUsage | Détermine si le pilote de base de données prend en charge la connexion à un serveur de base de données sans prise en charge de l'accès aux fichiers locaux (0) ; prend en charge la lecture des données à partir de fichiers (1) ; prend en charge l'écriture des données dans des fichiers (2). |
| Threading | Niveau de sérialisation des threads. Pris en charge pour PostgreSQL. Depuis la version 1.6, si le gestionnaire de pilotes est compilé avec la prise en charge des threads, vous pouvez ajouter une autre entrée de pilote. |
odbc.ini
Le fichier odbc.ini est utilisé pour configurer les sources de données.
Notez que la liste des paramètres pris en charge dépend du pilote de base de données (par exemple, les bases de données Oracle peuvent utiliser ServerName au lieu de Server, etc.).
[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 | Nom de la source de données (DSN). |
| Description | Description de la source de données. |
| Driver | Nom du pilote de base de données (tel que spécifié dans odbcinst.ini). |
| Server | IP/DNS du serveur de base de données. |
| User | Utilisateur de la base de données pour la connexion. |
| Password | Mot de passe de l’utilisateur de la base de données. |
| Port | Port de connexion à la base de données. |
| Socket | Socket de connexion à la base de données. |
| Database | Nom de la base de données. |
Pour d’autres options possibles de paramètres de configuration, consultez la documentation MySQL.
Le fichier odbc.ini pour PostgreSQL peut contenir des paramètres supplémentaires :
[TEST_PSQL]
Description=Base de données de 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=
| Paramètre | Description |
|---|---|
| ReadOnly | Indique si la connexion à la base de données autorise uniquement les opérations de lecture (requêtes SELECT) et limite les modifications (instructions INSERT, UPDATE et DELETE) ; utile dans les scénarios où les données doivent rester inchangées. |
| Protocol | Version du protocole backend PostgreSQL (ignorée lors de l’utilisation de connexions SSL). |
| ShowOidColumn | Indique s’il faut inclure l’Object ID (OID) dans SQLColumns. |
| FakeOidIndex | Indique s’il faut créer un faux index unique sur l’OID. |
| RowVersioning | Indique s’il faut permettre aux applications de détecter si des données ont été modifiées par d’autres utilisateurs pendant que vous tentez de mettre à jour une ligne. Notez que ce paramètre peut accélérer le processus de mise à jour, car, pour mettre à jour une ligne, il n’est pas nécessaire de spécifier chaque colonne individuellement dans la clause WHERE. |
| ShowSystemTables | Indique si le pilote de base de données doit traiter les tables système comme des tables ordinaires dans SQLTables ; utile pour l’accessibilité, en permettant la visibilité sur les tables système. |
| Fetch | Indique si le pilote doit utiliser automatiquement declare cursor/fetch pour gérer les instructions SELECT et maintenir un cache de 100 lignes. |
| BoolsAsChar | Contrôle le mappage des types booléens. S’il est défini sur "Yes", les booléens sont mappés sur SQL_CHAR ; sinon, ils sont mappés sur SQL_BIT. |
| SSLmode | Indique le mode SSL pour la connexion. |
| ConnSettings | Paramètres supplémentaires envoyés au backend lors de la connexion. |
Test de la connexion ODBC
Pour vérifier si la connexion ODBC fonctionne correctement, vous pouvez utiliser l’utilitaire isql (inclus dans le paquet unixODBC) :
isql test
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
Configuration d’un élément dans l’interface web Zabbix
Configurez un item de surveillance de base de données.

Tous les champs de saisie obligatoires sont marqués d’un astérisque rouge.
Pour les éléments de surveillance de base de données, vous devez spécifier :
| Type | Sélectionnez « Database monitor » ici. |
| Key | Saisissez l’une des clés d’élément prises en charge : db.odbc.select[] - cet élément renvoie une valeur (la première colonne de la première ligne du résultat de la requête SQL) ; db.odbc.get[] - cet élément renvoie plusieurs lignes/colonnes au format JSON ; db.odbc.discovery[] - cet élément renvoie des données de découverte de bas niveau. |
| User name | Saisissez le nom d’utilisateur de la base de données (jusqu’à 255 caractères). Ce paramètre est facultatif si le nom d’utilisateur de la base de données est spécifié dans le fichier odbc.ini.Si une chaîne de connexion est utilisée et que le champ User name n’est pas vide, il est alors ajouté à la chaîne de connexion sous la forme UID=<user>. |
| Password | Saisissez le mot de passe de l’utilisateur de la base de données (jusqu’à 255 caractères). Ce paramètre est facultatif si le mot de passe est spécifié dans le fichier odbc.ini.Si une chaîne de connexion est utilisée et que le champ Password n’est pas vide, il est alors ajouté à la chaîne de connexion sous la forme PWD=<password>.Les caractères spéciaux sont pris en charge dans ce champ. Le mot de passe sera ajouté à la chaîne de connexion après le nom d’utilisateur, par exemple UID=<username>;PWD=P?;)*word.Pour tester la chaîne résultante, vous pouvez exécuter la commande suivante : isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD=P?;)*word' |
| SQL query | Saisissez la requête SQL. Notez qu’avec db.odbc.select[], la requête ne doit renvoyer qu’une seule valeur. |
| Type of information | Sélectionnez ici le type d’information qui sera renvoyé par la requête. Si le type d’information est sélectionné de manière incorrecte, l’élément deviendra non pris en charge. |
Remarques importantes
- Les éléments de surveillance de base de données deviendront non pris en charge si aucun processus odbc poller n’est démarré dans la configuration du serveur ou du proxy.
Pour activer les pollers ODBC, définissez le paramètre
StartODBCPollersdans le fichier de configuration du server Zabbix ou, pour les vérifications effectuées par le proxy, dans le fichier de configuration du proxy Zabbix. - La valeur du paramètre Timeout dans le formulaire de configuration de l’élément est utilisée comme délai d’expiration de connexion ODBC et comme délai d’expiration d’exécution de la requête. Notez que ces paramètres de délai d’expiration peuvent être ignorés si le pilote ODBC installé ne les prend pas en charge.
- La commande SQL doit renvoyer un ensemble de résultats comme toute requête utilisant l’instruction
select. La syntaxe de la requête dépend du SGBDR qui la traitera. La syntaxe d’une requête vers une procédure stockée doit commencer par le mot-clécall.
Détails de la clé d’élément
Les paramètres sans chevrons sont obligatoires. Les paramètres marqués par des chevrons < > sont facultatifs.
db.odbc.select[<description courte unique>,<dsn>,<chaîne de connexion>]
Renvoie une valeur, c’est-à-dire la première colonne de la première ligne du résultat de la requête SQL.
Valeur de retour : selon la requête SQL.
Paramètres :
- description courte unique - une description courte unique permettant d’identifier l’élément (à utiliser dans les déclencheurs, etc.) ;
- dsn - le nom de la source de données (tel que spécifié dans
odbc.ini) ; - chaîne de connexion - la chaîne de connexion (peut contenir des arguments spécifiques au pilote).
Commentaires :
- Bien que
dsnetchaîne de connexionsoient des paramètres facultatifs, au moins l’un des deux est requis ; si les deux sont définis,dsnsera ignoré. - Si une requête renvoie plus d’une colonne, seule la première colonne est lue. Si une requête renvoie plus d’une ligne, seule la première ligne est lue.
db.odbc.get[<description courte unique>,<dsn>,<chaîne de connexion>]
Transforme le résultat de la requête SQL en un tableau JSON.
Valeur de retour : objet JSON.
Paramètres :
- description courte unique - une description courte unique permettant d’identifier l’élément (à utiliser dans les déclencheurs, etc.) ;
- dsn - le nom de la source de données (tel que spécifié dans
odbc.ini) ; - chaîne de connexion - la chaîne de connexion (peut contenir des arguments spécifiques au pilote).
Commentaires :
- Bien que
dsnetchaîne de connexionsoient des paramètres facultatifs, au moins l’un des deux est requis ; si les deux sont définis,dsnsera ignoré. - Plusieurs lignes/colonnes au format JSON peuvent être renvoyées. Cet élément peut être utilisé comme élément maître collectant toutes les données en un seul appel système, tandis que le prétraitement JSONPath peut être utilisé dans les éléments dépendants pour extraire des valeurs individuelles. Pour plus d’informations, consultez un exemple du format renvoyé, utilisé dans la découverte de bas niveau.
Exemple :
# Connexion pour le pilote ODBC MySQL 5 :
db.odbc.get[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]
db.odbc.discovery[<description courte unique>,<dsn>,<chaîne de connexion>]
Transforme le résultat de la requête SQL en un tableau JSON, utilisé pour la découverte de bas niveau.
Les noms de colonnes du résultat de la requête sont convertis en noms de macros de découverte de bas niveau, associés aux valeurs des champs découverts.
Ces macros peuvent être utilisées lors de la création de prototypes d'éléments, de déclencheurs, etc.
Valeur de retour : objet JSON.
Paramètres :
- description courte unique - une description courte unique permettant d'identifier l'élément (à utiliser dans les déclencheurs, etc.) ;
- dsn - le nom de la source de données (tel que spécifié dans
odbc.ini) ; - chaîne de connexion - la chaîne de connexion (peut contenir des arguments spécifiques au pilote).
Commentaires :
- Bien que
dsnetchaîne de connexionsoient des paramètres facultatifs, au moins l'un des deux est requis ; si les deux sont définis,dsnsera ignoré.
Messages d'erreur
Les messages d'erreur ODBC sont structurés en champs afin de fournir des informations détaillées. Par exemple, un message d'erreur peut ressembler à ceci :
Cannot execute ODBC query: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]
- "
Cannot execute ODBC query" - message Zabbix - "
[SQL_ERROR]" - code de retour ODBC - "
[42601]" - SQLState - "
[7]" - code d'erreur natif - "
[ERROR: syntax error at or near ";"; Error while executing the query]" - message d'erreur natif
Notez que la longueur du message d'erreur est limitée à 2048 octets ; le message peut donc être tronqué.
S'il y a plus d'un enregistrement de diagnostic ODBC, Zabbix essaie de les concaténer (séparés par |) dans la mesure permise par la limite de longueur.