14 Monitorización ODBC
Descripción general
La monitorización ODBC corresponde al tipo de métrica Database monitor en el frontend de Zabbix.
ODBC es una API de middleware en lenguaje de programación C para acceder a sistemas de gestión de bases de datos (DBMS). El concepto ODBC fue desarrollado por Microsoft y posteriormente portado a otras plataformas.
Zabbix puede consultar cualquier base de datos que sea compatible con ODBC. Para ello, Zabbix no se conecta directamente a las bases de datos, sino que utiliza la interfaz ODBC y los controladores configurados en ODBC. Esto permite una monitorización más eficiente de diferentes bases de datos para múltiples propósitos (por ejemplo, comprobar colas específicas de bases de datos, estadísticas de uso, etc.).
Zabbix es compatible con unixODBC, que es una de las implementaciones de API ODBC de código abierto más utilizadas.
Consulte también: problemas conocidos para comprobaciones ODBC.
Instalación de unixODBC
La forma recomendada de instalar unixODBC es utilizar los repositorios de paquetes por defecto del sistema operativo Linux. En las distribuciones Linux más populares, unixODBC está incluido en el repositorio de paquetes por defecto. Si los paquetes no están disponibles, los archivos fuente pueden obtenerse en la página principal de unixODBC: http://www.unixodbc.org/download.html.
Para instalar unixODBC, utilice el gestor de paquetes para el sistema de su elección:
# Para sistemas Ubuntu/Debian:
apt install unixodbc unixodbc-dev
# Para sistemas basados en RedHat/Fedora:
dnf install unixODBC unixODBC-devel
# Para sistemas basados en SUSE:
zypper in unixODBC-devel
El paquete unixodbc-dev o unixODBC-devel es necesario para compilar Zabbix con soporte para unixODBC.
Para habilitar el soporte ODBC, Zabbix debe ser compilado con la siguiente opción de configuración:
--with-unixodbc[=ARG] # Utilizar el driver ODBC con el paquete unixODBC.
Instalación de los controladores unixODBC
El controlador de base de datos unixODBC debe instalarse para la base de datos que se va a monitorizar. Para obtener una lista de las bases de datos y controladores compatibles, consulte la página principal de unixODBC: http://www.unixodbc.org/drivers.html.
En algunas distribuciones de Linux, los controladores de base de datos están incluidos en los repositorios de paquetes.
MySQL
Para instalar el controlador de base de datos MySQL unixODBC, utilice el gestor de paquetes para el sistema de su elección:
# Para sistemas Ubuntu/Debian:
apt install odbc-mariadb
# Para sistemas basados en RedHat/Fedora:
dnf install mariadb-connector-odbc
# Para sistemas basados en SUSE:
zypper install mariadb-connector-odbc
Para instalar el controlador de base de datos sin un gestor de paquetes, consulte la documentación de MySQL para mysql-connector-odbc, o la documentación de MariaDB para mariadb-connector-odbc.
PostgreSQL
Para instalar el controlador de base de datos unixODBC de PostgreSQL, utilice el gestor de paquetes para el sistema de su elección:
# Para sistemas Ubuntu/Debian:
apt install odbc-postgresql
# Para sistemas basados en RedHat/Fedora:
dnf install postgresql-odbc
# Para sistemas basados en SUSE:
zypper install psqlODBC
Para instalar el controlador de base de datos sin un gestor de paquetes, consulte la documentación de PostgreSQL.
Oracle
Para instalar el controlador de base de datos unixODBC, consulte la documentación de Oracle.
MSSQL
Para instalar el controlador de base de datos MSSQL unixODBC, utilice el gestor de paquetes para el sistema de su elección:
# Para sistemas Ubuntu/Debian:
apt install tdsodbc
# Para sistemas basados en RedHat/Fedora (paquetes EPEL: https://docs.fedoraproject.org/en-US/epel/):
dnf install epel-release
dnf install freetds
# Para sistemas basados en SUSE:
zypper install libtdsodbc0
Para instalar el controlador de base de datos sin un gestor de paquetes, consulte la guía de usuario de FreeTDS.
Configuración de unixODBC
Para configurar unixODBC, debe editar los archivos odbcinst.ini y odbc.ini.
Puede verificar la ubicación de estos archivos ejecutando el siguiente comando:
odbcinst -j
El resultado del comando debería contener información similar a la siguiente:
unixODBC 2.3.9
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
odbcinst.ini
El archivo odbcinst.ini enumera los controladores de base de datos ODBC instalados.
Si falta odbcinst.ini, es necesario crearlo manualmente.
[TEST_MYSQL]
Description=ODBC para MySQL
Driver=/usr/lib/libmyodbc5.so
FileUsage=1
| Parámetro | Descripción |
|---|---|
| TEST_MYSQL | Nombre del controlador de base de datos. |
| Description | Descripción del controlador de base de datos. |
| Driver | Ubicación de la biblioteca del controlador de base de datos. |
| FileUsage | Determina si el controlador de base de datos admite la conexión a un servidor de base de datos sin soporte para acceder a archivos locales (0); admite la lectura de datos desde archivos (1); admite la escritura de datos en archivos (2). |
| Threading | Nivel de serialización de hilos. Compatible con PostgreSQL. Desde la 1.6, si el gestor de controladores se compila con soporte para hilos, puede agregar otra entrada de controlador. |
odbc.ini
El archivo odbc.ini se utiliza para configurar fuentes de datos.
Tenga en cuenta que la lista de parámetros admitidos depende del controlador de base de datos (por ejemplo, las bases de datos Oracle pueden usar ServerName en lugar de Server, etc.).
[TEST_MYSQL]
Description=Base de datos de prueba MySQL
Driver=mysql
Server=127.0.0.1
User=root
Password=
Port=3306
Socket=
Database=zabbix
| Parámetro | Descripción |
|---|---|
| TEST_MYSQL | Nombre de la fuente de datos (DSN). |
| Description | Descripción de la fuente de datos. |
| Driver | Nombre del controlador de base de datos (como se especifica en odbcinst.ini). |
| Server | IP/DNS del servidor de base de datos. |
| User | Usuario de la base de datos para la conexión. |
| Password | Contraseña del usuario de la base de datos. |
| Port | Puerto de conexión a la base de datos. |
| Socket | Socket de conexión a la base de datos. |
| Database | Nombre de la base de datos. |
Para otras posibles opciones de parámetros de configuración, consulte la documentación de MySQL.
El archivo odbc.ini para PostgreSQL puede contener parámetros adicionales:
[TEST_PSQL]
Description=Base de datos de prueba de 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=
| Parámetro | Descripción |
|---|---|
| ReadOnly | Especifica si la conexión a la base de datos permite solo operaciones de lectura (consultas SELECT) y restringe las modificaciones (sentencias INSERT, UPDATE y DELETE); útil para escenarios donde los datos deben permanecer sin cambios. |
| Protocol | Versión del protocolo backend de PostgreSQL (se ignora al usar conexiones SSL). |
| ShowOidColumn | Especifica si se debe incluir el Object ID (OID) en SQLColumns. |
| FakeOidIndex | Especifica si se debe crear un índice único falso en OID. |
| RowVersioning | Especifica si se debe permitir que las aplicaciones detecten si los datos han sido modificados por otros usuarios mientras intenta actualizar una fila. Tenga en cuenta que este parámetro puede acelerar el proceso de actualización, ya que, para actualizar una fila, no es necesario especificar cada columna individual en la cláusula WHERE. |
| ShowSystemTables | Especifica si el controlador de base de datos debe tratar las tablas del sistema como tablas normales en SQLTables; útil para la accesibilidad, permitiendo la visibilidad en las tablas del sistema. |
| Fetch | Especifica si el controlador debe usar automáticamente declare cursor/fetch para manejar sentencias SELECT y mantener una caché de 100 filas. |
| BoolsAsChar | Controla el mapeo de tipos Booleanos. Si se establece en "Yes", los Booleanos se mapean a SQL_CHAR; de lo contrario, se mapean a SQL_BIT. |
| SSLmode | Especifica el modo SSL para la conexión. |
| ConnSettings | Configuraciones adicionales enviadas al backend en la conexión. |
Probando la conexión ODBC
Para comprobar si la conexión ODBC funciona correctamente, puede utilizar la utilidad isql (incluida en el paquete unixODBC):
isql test
+---------------------------------------+
| ¡Conectado! |
| |
| sentencia-sql |
| help [nombretabla] |
| quit |
| |
+---------------------------------------+
Configuración de la métrica en el frontend de Zabbix
Configure una métrica de monitorización de base de datos.

Todos los campos obligatorios están marcados con un asterisco rojo.
Para las métricas de monitorización de base de datos, debe especificar:
| Tipo | Seleccione "Monitorización de base de datos" aquí. |
| Clave | Introduzca una de las claves de métrica soportadas: db.odbc.select[] - esta métrica devuelve un valor (la primera columna de la primera fila del resultado de la consulta SQL); db.odbc.get[] - esta métrica devuelve varias filas/columnas en formato JSON; db.odbc.discovery[] - esta métrica devuelve datos de bajo nivel de descubrimiento. |
| Nombre de usuario | Introduzca el nombre de usuario de la base de datos (hasta 255 caracteres). Este parámetro es opcional si el nombre de usuario de la base de datos se especifica en el archivo odbc.ini.Si se utiliza una cadena de conexión y el campo Nombre de usuario no está vacío, entonces se añade a la cadena de conexión como UID=<usuario>. |
| Contraseña | Introduzca la contraseña del usuario de la base de datos (hasta 255 caracteres). Este parámetro es opcional si la contraseña se especifica en el archivo odbc.ini.Si se utiliza una cadena de conexión y el campo Contraseña no está vacío, entonces se añade a la cadena de conexión como PWD=<contraseña>.Se admiten caracteres especiales en este campo. La contraseña se añadirá a la cadena de conexión después del nombre de usuario como, por ejemplo, UID=<usuario>;PWD=P?;)*word.Para probar la cadena resultante, puede ejecutar el siguiente comando: isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD=P?;)*word' |
| Consulta SQL | Introduzca la consulta SQL. Tenga en cuenta que con db.odbc.select[], la consulta debe devolver solo un valor. |
| Tipo de información | Seleccione aquí el tipo de información que devolverá la consulta. Si el tipo de información se selecciona incorrectamente, la métrica quedará como no soportada. |
Notas importantes
- Las métricas de monitorización de bases de datos dejarán de estar soportadas si no se inician procesos odbc poller en la configuración del servidor o proxy.
Para activar los ODBC pollers, establezca el parámetro
StartODBCPollersen el archivo de configuración de Zabbix server o, para comprobaciones realizadas por el proxy, en el archivo de configuración de Zabbix proxy. - El valor del parámetro Timeout en el formulario de configuración de la métrica se utiliza como tiempo de espera de inicio de sesión ODBC y como tiempo de espera de ejecución de la consulta. Tenga en cuenta que estas configuraciones de tiempo de espera pueden ser ignoradas si el controlador ODBC instalado no las soporta.
- El comando SQL debe devolver un conjunto de resultados como cualquier consulta que utilice la sentencia
select. La sintaxis de la consulta dependerá del SGBDR que las procese. La sintaxis de la petición a un procedimiento almacenado debe comenzar con la palabra clavecall.
Detalles de la clave de la métrica
Los parámetros sin corchetes angulares son obligatorios. Los parámetros marcados con corchetes angulares < > son opcionales.
db.odbc.select[<descripción corta única>,<dsn>,<cadena de conexión>]
Devuelve un valor, es decir, la primera columna de la primera fila del resultado de la consulta SQL.
Valor devuelto: Dependiendo de la consulta SQL.
Parámetros:
- descripción corta única: una descripción corta única para identificar la métrica (para usar en disparadores, etc.);
- dsn: el nombre de la fuente de datos (como se especifica en
odbc.ini); - cadena de conexión: la cadena de conexión (puede contener argumentos específicos del controlador).
Comentarios:
- Aunque
dsnycadena de conexiónson parámetros opcionales, se requiere al menos uno de ellos; si ambos están definidos, se ignorarádsn. - Si una consulta devuelve más de una columna, solo se lee la primera columna. Si una consulta devuelve más de una línea, solo se lee la primera línea.
db.odbc.get[<descripción corta única>,<dsn>,<cadena de conexión>]
Transforma el resultado de la consulta SQL en un array JSON.
Valor de retorno: objeto JSON.
Parámetros:
- descripción corta única: una descripción corta única para identificar la métrica (para usar en disparadores, etc.);
- dsn: el nombre de la fuente de datos (como se especifica en
odbc.ini); - cadena de conexión: la cadena de conexión (puede contener argumentos específicos del driver).
Comentarios:
- Aunque
dsnycadena de conexiónson parámetros opcionales, se requiere al menos uno de ellos; si ambos están definidos, se ignorarádsn. - Se pueden devolver varias filas/columnas en formato JSON. Esta métrica puede usarse como una métrica maestra que recopila todos los datos en una sola llamada al sistema, mientras que el preprocesamiento JSONPath puede usarse en métricas dependientes para extraer valores individuales. Para más información, consulte un ejemplo del formato devuelto, utilizado en el descubrimiento de bajo nivel.
Ejemplo:
# Conexión para el driver MySQL ODBC 5:
db.odbc.get[Ejemplo MySQL,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]
db.odbc.discovery[<descripción corta única>,<dsn>,<cadena de conexión>]
Transforma el resultado de la consulta SQL en un array JSON, utilizado para el descubrimiento de bajo nivel.
Los nombres de las columnas del resultado de la consulta se convierten en nombres de macros de descubrimiento de bajo nivel emparejados con los valores de los campos descubiertos.
Estas macros pueden utilizarse para crear prototipos de métricas, disparadores, etc.
Valor de retorno: objeto JSON.
Parámetros:
- descripción corta única: una descripción corta única para identificar la métrica (para su uso en disparadores, etc.);
- dsn: el nombre de la fuente de datos (tal como se especifica en
odbc.ini); - cadena de conexión: la cadena de conexión (puede contener argumentos específicos del driver).
Comentarios:
- Aunque
dsnycadena de conexiónson parámetros opcionales, se requiere al menos uno de ellos; si ambos están definidos, se ignorarádsn.
Mensajes de error
Los mensajes de error de ODBC están estructurados en campos para proporcionar información detallada. Por ejemplo, un mensaje de error podría verse así:
No se puede ejecutar la consulta ODBC: [SQL_ERROR]:[42601][7][ERROR: error de sintaxis en o cerca de ";"; Error al ejecutar la consulta]
- "
No se puede ejecutar la consulta ODBC" - Mensaje de Zabbix - "
[SQL_ERROR]" - Código de retorno de ODBC - "
[42601]" - SQLState - "
[7]" - Código de error nativo - "
[ERROR: error de sintaxis en o cerca de ";"; Error al ejecutar la consulta]" - Mensaje de error nativo
Tenga en cuenta que la longitud del mensaje de error está limitada a 2048 bytes, por lo que el mensaje puede ser truncado.
Si hay más de un registro de diagnóstico ODBC, Zabbix intenta concatenarlos (separados con |) hasta donde lo permita el límite de longitud.