14 Monitorizando ODBC

Descripción general

El monitoreo ODBC corresponde al tipo de métrica Monitor de base de datos en la Interfaz 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 (SGBD). El concepto ODBC fue desarrollado por Microsoft y luego portado a otras plataformas.

Zabbix puede consultar cualquier base de datos compatible con ODBC. Para hacer eso, Zabbix no se conecta directamente a las bases de datos, sino que utiliza la interfaz ODBC y controladores configurados en ODBC. Esta función permite un monitoreo más eficiente de diferentes bases de datos para múltiples propósitos - para, por ejemplo, comprobar colas de bases de datos específicas, estadísticas de uso, etc. Zabbix soporta UnixODBC, que es una de las implementaciones de los sistemas abiertos de API ODBC de origen más utilizados..

Ver también los problemas conocidos para las comprobaciones ODBC.

Instalación de unixODBC

La forma sugerida de instalar UnixODBC es utilizar los repositorios de paquetes predeterminados del sistema operativo Linux. En las distribuciones de Linux más populares se incluye unixODBC en el repositorio de paquetes de forma predeterminada. Si no está disponible, se puede obtener en la página de inicio de unixODBC: http://www.unixodbc.org/download.html.

Instalación de unixODBC en sistemas Ubuntu/Debian usando el administrador de paquetes apt:

apt install unixodbc unixodbc-dev

Instalación de unixODBC en sistemas basados en RedHat/Fedora usando el gestor de paquetes dnf:

dnf install unixODBC unixODBC-devel

Instalación de unixODBC en sistemas basados en SUSE usando el gestor de paquetes zypper:

zypper in unixODBC-devel

El paquete unixODBC-devel es necesario para compilar Zabbix con soporte UnixODBC.

Instalación de controladores UnixODBC

Se debe instalar un controlador de base de datos UnixODBC para la base de datos, que será monitoreada. unixODBC tiene una lista de bases de datos compatibles y controladores: http://www.unixodbc.org/drivers.html. En algunas distribuciones Linux, los controladores de bases de datos se incluyen en los repositorios de paquetes.

Instalación del controlador de base de datos MySQL en sistemas Ubuntu/Debian usando el administrador de paquetes apt:

apt install odbc-mariadb

Instalación del controlador de base de datos MySQL en sistemas basados en RedHat/Fedora usando el gestor de paquetes dnf:

dnf install mariadb-connector-odbc

Instalación del controlador de base de datos MySQL en sistemas basados en SUSE utilizando el gestor de paquetes zypper:

zypper in mariadb-connector-odbc

Configuración de unixODBC

La configuración de ODBC se realiza editando los archivos odbcinst.ini y odbc.ini. Para verificar la ubicación del archivo de configuración, escriba:

odbcinst -j

odbcinst.ini se utiliza para listar los controladores de bases de datos ODBC instalados:

[mysql]
       Description = ODBC for MySQL
       Driver · = /usr/lib/libmyodbc5.so

Detalles de parámetros:

Atributo Descripción
mysql Nombre driver de la base de datos.
Description Descripción driver de la base de datos.
Driver Localización de la biblioteca del driver de la base de datos.

odbc.ini se utiliza para definir las fuentes de datos:

[test]
       Description = MySQL test database
       Driver · = mysql
       Server · = 127.0.0.1
       User = root
       Password =
       Port · = 3306
       Database · = zabbix

Detalles de los parámetros:

Atributo Descripción
*Nombre de la fuente de datos (DSN).
*Descripción de la fuente de datos
Driver Nombre del controlador de la base de datos - como se especifica en odbcinst.ini
Servidor: IP/DNS del servidor de la base de datos.
*Usuario de la base de datos para la conexión
*Contraseña del usuario de la base de datos
*Puerto de conexión de la base de datos
Base de datos: Nombre de la base de datos.

Para verificar si la conexión ODBC funciona correctamente, debe probarse una conexión a la base de datos. Eso puede hacerse con la utilidad isql (incluida en el paquete unixODBC):

 isql test
       +---------------------------------------+
       | Connected! · |
       |   |
       | sql-statement · |
       | help [tablename] · |
       | quit · |
       |   |
       +---------------------------------------+

Compilando Zabbix con soporte ODBC

Para habilitar la compatibilidad con ODBC, Zabbix debe compilarse con los siguientes parámetros:

  --with-unixodbc[=ARG] # usa el controlador odbc contra el paquete unixODBC.

Vea más sobre la instalación de Zabbix desde el código fuente.

Configuración de métricas en la interfaz de Zabbix

Configurar una
métrica de monitoreo de base de datos.

Todos los campos de entrada obligatorios están marcados con un asterisco rojo.

Específicamente para las métricas de monitoreo de base de datos, debe ingresar:

Tipo Seleccione Monitor de base de datos aquí.
Clave Ingrese una de las dos claves de métrica admitidas:
db.odbc.select[<descripción breve única>,<dsn>,<cadena de conexión>]: esta métrica está diseñada para devolver un valor, es decir, la primera columna de la primera fila del resultado de la consulta SQL. 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[<unique short description>,<dsn>,<connection string>] - esta métrica es capaz de devolver varias filas/columnas en formato JSON. Por lo tanto, se puede utilizar como una métrica maestra que recopila todos los datos en una llamada del sistema, mientras que el preprocesamiento de JSONPath se puede utilizar en métricas dependientes para extraer valores individuales. Para obtener más información, consulte un ejemplo del formato devuelto, utilizado en el descubrimiento de bajo nivel. Esta métrica es compatible desde Zabbix 4.4.
La descripción única servirá para identificar la métrica en los iniciadores, etc.
Aunque dsn y connection string son parámetros opcionales, al menos uno de ellos debe estar presente. Si se definen tanto el nombre de la fuente de datos (DSN) como la cadena de conexión, se ignorará el DSN.
El nombre de la fuente de datos, si se utiliza, se debe configurar como se especifica en odbc.ini.
La cadena de conexión puede contener argumentos específicos del controlador.

Ejemplo (conexión para el controlador ODBC MySQL 5):
=> db.odbc.get[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]
Nombre de usuario Ingrese el nombre de usuario de la base de datos
Este parámetro es opcional si se especifica el usuario en odbc.ini.
Si se utiliza la cadena de conexión y el campo Nombre de usuario no está vacío, se agrega a la cadena de conexión como UID=<user>
Contraseña Ingrese la contraseña del usuario de la base de datos
Este parámetro es opcional si se especifica la contraseña en odbc.ini.
Si se utiliza una cadena de conexión y el campo Contraseña no está vacío, se agrega a la cadena de conexión como PWD=<contraseña>.
Desde Zabbix 6.0.34, se admiten caracteres especiales en este campo.

Antes de Zabbix 6.0.34, si la contraseña contenía un punto y coma, debía estar entre llaves, por ejemplo, {P?;)*palabra}. Después de 6.0.34, aún se admite incluir la contraseña en este caso, pero no es obligatorio. La contraseña se agregará a la cadena de conexión después del nombre de usuario como UID=<nombre de usuario>;PWD={P?;)*palabra}. 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 Ingrese la consulta SQL.
Tenga en cuenta que con la métrica db.odbc.select[] la consulta debe devolver solo un valor.
Tipo de información Es importante saber qué tipo de información devolverá la consulta, para que se seleccione correctamente aquí. Con un tipo de información incorrecto, la métrica dejará de ser compatible.

Notas importantes

  • Las métricas de monitoreo de la base de datos dejarán de ser compatibles si no se inician procesos odbc poller en la configuración del servidor o proxy. Para activar los sondeadores ODBC, establezca el parámetro StartODBCPollers en el archivo de configuración del servidor Zabbix o, para comprobaciones realizadas por proxy, en el archivo de configuración del proxy Zabbix.
  • Zabbix no limita el tiempo de ejecución de la consulta. Depende del usuario elegir consultas que puedan ejecutarse en una cantidad razonable de tiempo.
  • El valor del parámetro Tiempo de espera del servidor Zabbix se utiliza como tiempo de espera de inicio de sesión ODBC (tenga en cuenta que dependiendo de los controladores ODBC, la configuración del tiempo de espera de inicio de sesión puede ser ignorado).
  • El comando SQL debe devolver un conjunto de resultados como cualquier consulta con select.... La sintaxis de la consulta dependerá del RDBMS que la procese. La sintaxis de solicitud a un procedimiento de almacenamiento debe comenzar con la palabra clave "call".

Mensajes de error

Los mensajes de error de ODBC se estructuran 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 se puede truncar. 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.