Se encuentra viendo la documentación de la versión en desarrollo, puede estar incompleta.
Únase a nuestro proyecto de traducción y ayude a traducir la documentación de Zabbix a su lengua materna.

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
MySQL

To install the MySQL unixODBC database driver, use the package manager for the system of your choice:

# For Ubuntu/Debian systems:
       apt install odbc-mariadb
       
       # For RedHat/Fedora-based systems:
       dnf install mysql-connector-odbc
       
       # For SUSE-based systems:
       zypper install MyODBC-unixODBC

To install the database driver without a package manager, refer to MySQL documentation.

PostgreSQL

To install the PostgreSQL unixODBC database driver for RedHat/Fedora-based systems, use the dnf package manager:

dnf install postgresql-odbc

For other systems, please refer to PostgreSQL documentation.

Oracle

To install the unixODBC database driver, please refer to Oracle documentation.

MSSQL

To install the MSSQL unixODBC database driver for RedHat/Fedora-based systems, use the dnf package manager:

dnf -y install freetds unixODBC

For other systems, please refer to FreeTDS user guide.

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 ODBC de bases de datos instalados:

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

Detalles de parámetros:

Atributo Descripción
mysql Nombre del controlador de la base de datos.
Description Descripción del controlador de la base de datos.
Driver Localización de la biblioteca del controlador 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
test Nombre de fuente de datos (DSN).
Description Descripción de la fuente de datos.
Driver Nombre del controlador de la base de datos: como se especifica en odbcinst.ini
Server IP/DNS del servidor de base de datos.
User Usuario de base de datos para conexión.
Password Contraseña de usuario de la base de datos.
Port Puerto de conexión de base de datos.
Database Nombre de la base de datos.

Para verificar si la conexión ODBC funciona correctamente, se debe comprobar la 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   |
       |    |
       +---------------------------------------+
odbcinst.ini

The odbcinst.ini file lists the installed ODBC database drivers. If odbcinst.ini is missing, it is necessary to create it manually.

[TEST_MYSQL]
       Description=ODBC for MySQL
       Driver=/usr/lib/libmyodbc5.so
       FileUsage=1
Parameter Description
TEST_MYSQL Database driver name.
Description Database driver description.
Driver Database driver library location.
FileUsage Determines whether the database driver supports connecting to a database server without the support for accessing local files (0); supports reading data from files (1); supports writing data to files (2).
Threading Thread serialization level. Supported for PostgreSQL.
Since 1.6, if the driver manager is built with thread support, you may add another driver entry.
odbc.ini

The odbc.ini file is used to configure data sources.

[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 Data source name (DSN).
Description Data source description.
Driver Database driver name (as specified in odbcinst.ini).
Server Database server IP/DNS.
User Database user for connection.
Password Database user password.
Port Database connection port.
Socket Database connection socket.
Database Database name.

For other possible configuration parameter options, see MySQL documentation.

The odbc.ini file for PostgreSQL may contain additional parameters:

[TEST_PSQL]
       Description=PostgreSQL Test Database
       Driver=postgresql
       Username=zbx_test
       Password=zabbix
       Servername=127.0.0.1
       Database=zabbix
       Port=5432
       ReadOnly=No
       Protocol=7.4+
       ShowOidColumn=No
       FakeOidIndex=No
       RowVersioning=No
       ShowSystemTables=No
       Fetch=Yes
       BoolsAsChar=Yes
       SSLmode=Require
       ConnSettings=
Parameter Description
ReadOnly Specifies whether the database connection allows only read operations (SELECT queries) and restricts modifications (INSERT, UPDATE, and DELETE statements); useful for scenarios where data should remain unchanged.
Protocol PostgreSQL backend protocol version (ignored when using SSL connections).
ShowOidColumn Specifies whether to include Object ID (OID) in SQLColumns.
FakeOidIndex Specifies whether to create a fake unique index on OID.
RowVersioning Specifies whether to enable applications to detect if data has been modified by other users while you are attempting to update a row. Note that this parameter can speed up the update process, since, to update a row, every single column does not need to be specified in the WHERE clause.
ShowSystemTables Specifies whether the database driver should treat system tables as regular tables in SQLTables; useful for accessibility, allowing visibility into system tables.
Fetch Specifies whether the driver should automatically use declare cursor/fetch to handle SELECT statements and maintain a cache of 100 rows.
BoolsAsChar Controls the mapping of Boolean types.
If set to "Yes", Bools are mapped to SQL_CHAR; otherwise, they are mapped to SQL_BIT.
SSLmode Specifies the SSL mode for the connection.
ConnSettings Additional settings sent to the backend on connection.
Testing ODBC connection

To test if the ODBC connection is working successfully, you can use the isql utility (included in the unixODBC package):

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

Configuración de elementos en la interfaz de Zabbix

Configurar una métrica para el 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 la base de datos debe ingresar:

Tipo Seleccione aquí Monitor de base de datos .
Clave Ingrese una de las dos claves de elementos admitidos:
db.odbc.select[<unique short description>,<dsn>,<connection string>] - este elemento está diseñado 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 múltiples filas/columnas en formato JSON. Por lo tanto, puede usarse como una métrica maestra que recopila todos los datos en una llamada al sistema, mientras que el preprocesamiento JSONPath puede usarse 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. Este elemento es compatible desde Zabbix 4.4.
La descripción única servirá para identificar la métrica en 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, debe configurarse como se especifica en odbc.ini.
La cadena de conexión puede contener un controlador -argumentos específicos.

Ejemplo (conexión para el controlador ODBC 5 de MySQL):
=> db.odbc.get[Ejemplo de MySQL,,"Driver=/usr/local/lib/libmyodbc5a.so; Base de datos=maestro;Servidor=127.0.0.1;Puerto=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 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=<usuario>
Contraseña Ingrese la contraseña del usuario de la base de datos
Este parámetro es opcional si la contraseña se especifica en odbc.ini.
Si se utiliza una cadena de conexión y el campo Contraseña no está vacío, se agrega a la conexión cadena como PWD=<contraseña>.
Si una contraseña contiene punto y coma, debe estar entre llaves, por ejemplo:
Contraseña: {P?;)*palabra} (si es real la contraseña es P?;)*word)

La contraseña se agregará a la cadena de conexión después del nombre de usuario como:
UID=<nombre de usuario>;PWD={P?;)*word}

Para probar la cadena resultante, ejecute:
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 un solo valor.
Tipo de información Es importante saber qué tipo de información devolverá la consulta, para que aquí se seleccione correctamente. Con un tipo de información incorrecto, el elemento dejará de ser compatible.

Item key details

Parameters without angle brackets are mandatory. Parameters marked with angle brackets < > are optional.

db.odbc.select[<unique short description>,<dsn>,<connection string>]


Returns one value, i.e. the first column of the first row of the SQL query result. Return value: depending on the SQL query.

Parameters:

  • unique short description - a unique short description to identify the item (for use in triggers, etc);
  • dsn - the data source name (as specified in odbc.ini);
  • connection string - the connection string (may contain driver-specific arguments).

Comments:

  • Although dsn and connection string are optional parameters, at least one of them must be present. If both data source name (DSN) and connection string are defined, the DSN will be ignored.
  • If a query returns more than one column, only the first column is read. If a query returns more than one line, only the first line is read.
db.odbc.get[<unique short description>,<dsn>,<connection string>]


Transforms the SQL query result into a JSON array.
Return value: JSON object.

Parameters:

  • unique short description - a unique short description to identify the item (for use in triggers, etc);
  • dsn - the data source name (as specified in odbc.ini);
  • connection string - the connection string (may contain driver-specific arguments).

Comments:

  • Although dsn and connection string are optional parameters, at least one of them must be present. If both data source name (DSN) and connection string are defined, the DSN will be ignored.
  • Multiple rows/columns in JSON format may be returned. This item may be used as a master item that collects all data in one system call, while JSONPath preprocessing may be used in dependent items to extract individual values. For more information, see an example of the returned format, used in low-level discovery.

Example:

db.odbc.get[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"] #connection for MySQL ODBC driver 5
db.odbc.discovery[<unique short description>,<dsn>,<connection string>]


Transforms the SQL query result into a JSON array, used for low-level disovery. The column names from the query result are turned into low-level discovery macro names paired with the discovered field values. These macros can be used in creating item, trigger, etc prototypes.
Return value: JSON object.

Parameters:

  • unique short description - a unique short description to identify the item (for use in triggers, etc);
  • dsn - the data source name (as specified in odbc.ini);
  • connection string - the connection string (may contain driver-specific arguments).

Comments:

  • Although dsn and connection string are optional parameters, at least one of them must be present. If both data source name (DSN) and connection string are defined, the DSN will be ignored.

Notas importantes

  • Las métricas de monitoreo de 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, configure 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 ODBC están estructurados en campos para proporcionar información detallada. Por ejemplo:

No se puede ejecutar la consulta ODBC: [SQL_ERROR]:[42601][7][ERROR: error de sintaxis en o cerca de ";"; Error al ejecutar la consulta]
       └───────────┬───────────┘ └────┬────┘ └──┬ ──┘└┬┘└─── ──────────────────────────┬────────────── ───────── ──────────────┘
                   │ │ │ └─ Código de error nativo └─ Mensaje de error nativo
                   │ │ └─ EstadoSQL
                   └─ Mensaje de Zabbix └─ Código de retorno ODBC

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 le permita el límite de longitud.