14 Monitorizando ODBC

Descripción general

El monitoreo ODBC corresponde al tipo de elemento 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 (DBMS). El concepto ODBC fue desarrollado por Microsoft y luego trasladado a otras plataformas.

Zabbix puede consultar cualquier base de datos 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 un monitoreo más eficiente de diferentes bases de datos para múltiples propósitos (por ejemplo, verificar colas de bases de datos específicas, 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.

::: nota importante Consulte también: problemas conocidos para verificaciones de ODBC. :::

Instalando 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, unixODBC se incluye en el repositorio de paquetes de forma predeterminada. Si los paquetes no están disponibles, los archivos fuente se pueden obtener en la página de inicio de unixODBC: http://www.unixodbc.org/download.html.

Para instalar unixODBC, use el administrador de paquetes para el sistema de su elección:

# Para sistemas Ubuntu/Debian:
       apto para instalar unixodbc unixodbc-dev

       # Para sistemas basados en RedHat/Fedora:
       dnf instala unixODBC unixODBC-devel

       # Para sistemas basados en SUSE:
       zypper en unixODBC-devel

::: nota importante El paquete unixodbc-dev o unixODBC-devel es necesario para compilar Zabbix con soporte para unixODBC. Para habilitar la compatibilidad con ODBC, Zabbix debe compilarse con la siguiente opción de configuración:

--with-unixodbc[=ARG] # Usar el controlador ODBC contra el paquete unixODBC.

:::

Instalación de controladores UnixODBC

Se debe instalar el controlador de base de datos UnixODBC para la base de datos que se monitoreará. Para obtener una lista de bases de datos y controladores compatibles, consulte la página de inicio de unixODBC: http://www.unixodbc.org/drivers.html.

::: nota clásica En algunas distribuciones de Linux, los controladores de bases de datos se incluyen en los repositorios de paquetes. :::

MySQL

Para instalar el controlador de base de datos MySQL unixODBC, use el administrador de paquetes para el sistema de su elección:

# Para sistemas Ubuntu/Debian:
       apto para instalar odbc-mariadb

       # Para sistemas basados en RedHat/Fedora:
       dnf instala mariadb-conector-odbc

       # Para sistemas basados en SUSE:
       zypper instala mariadb-conector-odbc

Para instalar el controlador de la base de datos sin un administrador 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, use el administrador de paquetes para el sistema de su elección:

# Para sistemas Ubuntu/Debian:
       apto para instalar odbc-postgresql

       # Para sistemas basados en RedHat/Fedora:
       instalar dnf postgresql-odbc

       # Para sistemas basados en SUSE:
       instalación zypper psqlODBC

Para instalar el controlador de la base de datos sin un administrador de paquetes, consulte la [documentación de PostgreSQL] (https://www.postgresql.org/download/linux/).

Oráculo

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 para sistemas Ubuntu/Debian, use el administrador de paquetes para el sistema de su elección:

# Para sistemas Ubuntu/Debian:
       apto para instalar tdsodbc

       # Para sistemas basados en RedHat/Fedora (paquetes EPEL: https://docs.fedoraproject.org/en-US/epel/):
       dnf instala epel-liberación
       dnf instala freetds

       # Para sistemas basados en SUSE:
       instalación zypper libtdsodbc0

Para instalar el controlador de la base de datos sin un administrador de paquetes, consulte la [guía del usuario de FreeTDS] (http://www.freetds.org/userguide/).

Configurando 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 debe contener información similar a la siguiente:

unixODBC 2.3.9
       CONTROLADORES............: /etc/odbcinst.ini
       FUENTES DE DATOS DEL SISTEMA: /etc/odbc.ini
       FUENTES DE DATOS DEL ARCHIVO...: /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]
       Descripción=ODBC para MySQL
       Controlador=/usr/lib/libmyodbc5.so
       Uso de archivo=1
Parámetro Descripción
TEST_MYSQL Nombre del controlador de la base de datos.
Descripción Descripción del controlador de la base de datos.
Controlador Ubicación de la biblioteca del controlador de la base de datos.
FileUsage Determina si el controlador de la 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 de archivos (1); admite la escritura de datos en archivos (2).
Threading Nivel de serialización del hilo. Compatible con PostgreSQL.
Desde 1.6, si el administrador de controladores está creado con soporte para subprocesos, puede agregar otra entrada de controlador.
odbc.ini

El archivo odbc.ini se utiliza para configurar fuentes de datos.

[TEST_MYSQL]
       Descripción=Base de datos de prueba MySQL
       Controlador=mysql
       Servidor=127.0.0.1
       Usuario=raíz
       Contraseña=
       Puerto=3306
       Zócalo=
       Base de datos=zabbix
Parámetro Descripción
TEST_MYSQL Nombre de la fuente de datos (DSN).
Descripción Descripción de la fuente de datos.
Controlador Nombre del controlador de la base de datos (como se especifica en odbcinst.ini).
Servidor IP/DNS del servidor de base de datos.
Usuario Usuario de base de datos para la conexión.
Contraseña Contraseña de usuario de la base de datos.
Puerto Puerto de conexión de base de datos.
Socket Tocket de conexión a base de datos.
Base de datos Nombre de la base de datos.

Para conocer 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]
       Descripción=Base de datos de prueba PostgreSQL
       Controlador=postgresql
       Nombre de usuario = zbx_test
       Contraseña=zabbix
       Nombre del servidor = 127.0.0.1
       Base de datos=zabbix
       Puerto=5432
       Sólo lectura=No
       Protocolo=7,4+
       MostrarOidColumn=No
       FakeOidIndex=No
       Versionado de fila=No
       MostrarTablasSistema=No
       Recuperar=
       BoolsAsChar=
       Modo SSL=Requerir
       Configuración de conexión=
Parámetro Descripción
ReadOnly Especifica si la conexión de la base de datos permite sólo operaciones de lectura (consultas SELECT) y restringe modificaciones (declaraciones INSERT, UPDATE y DELETE); útil para escenarios donde los datos deben permanecer sin cambios.
Protocolo Versión del protocolo backend PostgreSQL (ignorado cuando se utilizan conexiones SSL).
ShowOidColumn Especifica si se incluye el ID de objeto (OID) en SQLColumns.
FakeOidIndex Especifica si se crea un índice único falso en OID.
RowVersioning Especifica si se debe permitir que las aplicaciones detecten si otros usuarios han modificado los datos 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 en la cláusula WHERE.
ShowSystemTables Especifica si el controlador de la base de datos debe tratar las tablas del sistema como tablas normales en SQLTables; útil para la accesibilidad, permitiendo visibilidad de las tablas del sistema.
Fetch Especifica si el controlador debe usar automáticamente declarar cursor/fetch para manejar declaraciones SELECT y mantener un caché de 100 filas.
BoolsAsChar Controla la asignación de tipos booleanos.
Si se establece en "Sí", los bools se asignan a SQL_CHAR; de lo contrario, se asignan a SQL_BIT.
SSLmode Especifica el modo SSL para la conexión.
ConnSettings Configuraciones adicionales enviadas al backend al conectarse.
Probando la conexión ODBC

Para probar si la conexión ODBC funciona correctamente, puede utilizar la utilidad isql (incluida en el paquete unixODBC):

prueba isql
       +------------------------------------------------+
       | ¡Conectado!                            |
       |                                       |
       | declaración-sql |
       | ayuda [nombre de tabla] |
       | dejar |
       |                                       |
       +------------------------------------------------+

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.

Para las métricas de monitoreo de base de datos, debe especificar:

Tipo Seleccione "Monitor de base de datos" aquí.
Clave Ingrese una de las claves de métrica admitidas:
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 detección de bajo nivel.
Nombre de usuario Ingrese 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, se agrega a la cadena de conexión como UID=<user>.
Contraseña Ingrese 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, se agrega a la cadena de conexión como PWD=<contraseña>.
Desde Zabbix 7.0.3, se admiten caracteres especiales en este campo.

Antes de Zabbix 7.0.3, si la contraseña contenía un punto y coma, debía estar entre llaves, por ejemplo, {P?;)*palabra}. Después de 7.0.3, 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 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 dejará de ser compatible.

Detalles clave del artículo

Los parámetros sin paréntesis angulares son obligatorios. Los parámetros marcados con corchetes angulares < > son opcionales.

db.odbc.select[<descripción breve ú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 de retorno: Dependiendo de la consulta SQL.

Parámetros:

  • descripción breve única: una descripción breve única para identificar el elemento (para usar en activadores, 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 dsn y connection string son parámetros opcionales, al menos uno de ellos es obligatorio; 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 breve única>,<dsn>,<cadena de conexión>]


Transforma el resultado de la consulta SQL en una matriz JSON.
Valor de retorno: objeto JSON.

Parámetros:

  • descripción breve única: una descripción breve única para identificar el elemento (para usar en activadores, 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 dsn y connection string son parámetros opcionales, al menos uno de ellos es obligatorio; si ambos están definidos, se ignorará dsn.
  • Se pueden devolver varias filas/columnas en formato JSON. Este elemento se puede utilizar como elemento maestro que recopila todos los datos en una llamada al sistema, mientras que el preprocesamiento JSONPath se puede utilizar en elementos dependientes para extraer valores individuales. Para obtener más información, consulte un ejemplo del formato devuelto, utilizado en el descubrimiento de bajo nivel.

Ejemplo:

# Conexión para el controlador ODBC 5 de MySQL:
       db.odbc.get[ejemplo de MySQL, "Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]
db.odbc.discovery[<descripción breve única>,<dsn>,<cadena de conexión>]


Transforma el resultado de la consulta SQL en una matriz JSON, utilizada para 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 se pueden utilizar para crear prototipos de elementos, activadores, etc.
Valor de retorno: objeto JSON.

Parámetros:

  • descripción breve única: una descripción breve única para identificar el elemento (para usar en activadores, 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 dsn y connection string son parámetros opcionales, al menos uno de ellos es obligatorio; si ambos están definidos, se ignorará dsn.

Notas importantes

  • Los elementos 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 de Zabbix servidor o, para comprobaciones realizadas por proxy, en Zabbix proxy archivo de configuración.
  • El valor del parámetro Tiempo de espera en el formulario configuración del elemento se utiliza como tiempo de espera de inicio de sesión de ODBC y tiempo de espera de ejecución de la consulta. Tenga en cuenta que estas configuraciones de tiempo de espera pueden ignorarse si el controlador ODBC instalado no las admite.
  • El comando SQL debe devolver un conjunto de resultados como cualquier consulta que utilice la instrucción select. La sintaxis de la consulta dependerá del RDBMS que las procesará. La sintaxis de solicitud de un procedimiento de almacenamiento debe iniciarse 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.