[comment]: # ({cd592738-68c88a1c})
# 8 Monitor de base de datos

[comment]: # ({/cd592738-68c88a1c})

[comment]: # ({52947967-b5170fd3})
#### Resumen

El tipo de item *Database monitor* en el frontend de Zabbix se utiliza para la supervisión mediante ODBC (comprobaciones ODBC).

ODBC es una API de middleware del lenguaje de programación C para acceder a sistemas de gestión de bases de datos (DBMS).
El concepto de ODBC fue desarrollado por Microsoft y posteriormente adaptado 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 una supervisión más eficiente de distintas bases de datos para múltiples fines (por ejemplo, comprobar colas específicas de la base de datos, estadísticas de uso, etc.).

Zabbix admite unixODBC, que es una de las implementaciones de API ODBC de código abierto más utilizadas.

::: noteimportant
Véase también: [known issues](/manual/installation/known_issues#odbc-checks) para las comprobaciones ODBC.
:::

[comment]: # ({/52947967-b5170fd3})

[comment]: # ({d01ad0be-bf6fd8ba})
#### Instalación de unixODBC

La forma recomendada de instalar unixODBC es usar los repositorios de paquetes predeterminados del sistema operativo Linux.
En las distribuciones Linux más populares, unixODBC está incluido de forma predeterminada en el repositorio de paquetes.
Si los paquetes no están disponibles, los archivos de origen se pueden obtener en la página principal de unixODBC: <http://www.unixodbc.org/download.html>.

Para instalar unixODBC, use el gestor de paquetes del sistema de su elección:

```bash
# For Ubuntu/Debian systems:
apt install unixodbc unixodbc-dev

# For RedHat/Fedora-based systems:
dnf install unixODBC unixODBC-devel

# For SUSE-based systems:
zypper in unixODBC-devel
```

::: noteimportant
El paquete `unixodbc-dev` o `unixODBC-devel` es necesario para compilar Zabbix con soporte para unixODBC.
Para habilitar el soporte ODBC, Zabbix debe compilarse con la siguiente [opción de configuración](/manual/installation/install#configure-the-sources):
<br><br>

    --with-unixodbc[=ARG] # Use ODBC driver against unixODBC package.

:::

[comment]: # ({/d01ad0be-bf6fd8ba})

[comment]: # ({07af6a39-eea09ed7})
#### 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>.

::: noteclassic
En algunas distribuciones de Linux, los controladores de base de datos están incluidos en los repositorios de paquetes.
:::

[comment]: # ({/07af6a39-eea09ed7})

[comment]: # ({d49fdb52-e1911043})
##### MySQL

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

```bash
# 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](https://dev.mysql.com/downloads/connector/odbc/) para `mysql-connector-odbc`, o la [documentación de MariaDB](https://mariadb.com/kb/en/mariadb-connector-odbc/) para `mariadb-connector-odbc`.

[comment]: # ({/d49fdb52-e1911043})

[comment]: # ({1b513583-0842efba})
##### PostgreSQL

Para instalar el controlador de base de datos unixODBC de PostgreSQL, utilice el gestor de paquetes para el sistema de su elección:

```bash
# 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](https://www.postgresql.org/download/linux/).

[comment]: # ({/1b513583-0842efba})

[comment]: # ({b4e6cb7e-88097de9})
##### Oracle

Para instalar el controlador de base de datos unixODBC, consulte la [documentación de Oracle](https://www.oracle.com/database/technologies/releasenote-odbc-ic.html).

[comment]: # ({/b4e6cb7e-88097de9})

[comment]: # ({0a04e88d-f1ce859d})
##### MSSQL

Para instalar el controlador de base de datos MSSQL unixODBC, utilice el gestor de paquetes para el sistema de su elección:

```bash
# 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](http://www.freetds.org/userguide/).

[comment]: # ({/0a04e88d-f1ce859d})

[comment]: # ({f24fde2e-b15e771b})
#### 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:

```bash
odbcinst -j
```

El resultado del comando debería contener información similar a la siguiente:

```bash
unixODBC 2.3.9
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
```

[comment]: # ({/f24fde2e-b15e771b})

[comment]: # ({72609b6e-d99c28e7})
##### odbcinst.ini

El archivo `odbcinst.ini` enumera los controladores de base de datos ODBC instalados.
Si falta `odbcinst.ini`, es necesario crearlo manualmente.

```ini
[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.<br>Desde la 1.6, si el gestor de controladores se compila con soporte para hilos, puede agregar otra entrada de controlador.|

[comment]: # ({/72609b6e-d99c28e7})

[comment]: # ({f10754c8-207ccff7})
##### 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.).

```ini
[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](https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html).

[comment]: # ({/f10754c8-207ccff7})

[comment]: # ({9cc86ee1-fed5e483})
El archivo `odbc.ini` para PostgreSQL puede contener parámetros adicionales:

```ini
[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|Especifica si la conexión a la base de datos permite solo operaciones de lectura (`SELECT`) y restringe las modificaciones (`INSERT`, `UPDATE` y `DELETE`); útil en escenarios en los que 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 ficticio sobre 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 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, ya que permite ver las tablas del sistema.|
|Fetch|Especifica si el controlador debe usar automáticamente declare cursor/fetch para gestionar las instrucciones `SELECT` y mantener una caché de 100 filas.|
|BoolsAsChar|Controla la asignación de tipos Boolean.<br>Si se establece en "Yes", los valores booleanos se asignan a `SQL_CHAR`; en caso contrario, se asignan a `SQL_BIT`.|
|SSLmode|Especifica el modo SSL para la conexión.|
|ConnSettings|Configuraciones adicionales enviadas al backend durante la conexión.|

[comment]: # ({/9cc86ee1-fed5e483})

[comment]: # ({2e87263e-93c68b7f})
##### Probando la conexión ODBC

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

```bash
isql test
+---------------------------------------+
| ¡Conectado!                           |
|                                       |
| sentencia-sql                         |
| help [nombretabla]                    |
| quit                                  |
|                                       |
+---------------------------------------+
```

[comment]: # ({/2e87263e-93c68b7f})

[comment]: # ({8e5e3daf-ca784f43})
#### Configuración de item en Zabbix frontend

Configure un [item](/manual/config/items/item#overview) de **monitorización de base de datos**.

![](../../../../../assets/en/manual/config/items/itemtypes/db_monitor.png){width="600"}

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

Para los items de monitorización de base de datos, debe especificar:

|   |   |
|--|--------|
|*Type*|Seleccione "Database monitor" aquí.|
|*Key*|Introduzca una de las claves de item admitidas:<br>[**db.odbc.select[]**](#db.odbc.select) - este item devuelve un solo valor (la primera columna de la primera fila del resultado de la consulta SQL);<br>[**db.odbc.get[]**](#db.odbc.get) - este item devuelve varias filas/columnas en formato JSON;<br>[**db.odbc.discovery[]**](#db.odbc.discovery) - este item devuelve datos de descubrimiento de bajo nivel.|
|*User name*|Introduzca el nombre de usuario de la base de datos (hasta 255 caracteres).<br>Este parámetro es opcional si el nombre de usuario de la base de datos se especifica en el archivo `odbc.ini`.<br>Si se usa una cadena de conexión y el campo *User name* no está vacío, se añade a la cadena de conexión como `UID=<user>`.|
|*Password*|Introduzca la contraseña del usuario de la base de datos (hasta 255 caracteres).<br>Este parámetro es opcional si la contraseña se especifica en el archivo `odbc.ini`.<br>Si se usa una cadena de conexión y el campo *Password* no está vacío, se añade a la cadena de conexión como `PWD=<password>`.<br> Desde Zabbix 7.0.3, se admiten caracteres especiales en este campo.<br><br>Antes de Zabbix 7.0.3, si la contraseña contiene un punto y coma, debe encerrarse entre llaves, por ejemplo, `{P?;)*word}`. Después de 7.0.3, seguir encerrando la contraseña entre llaves en este caso sigue siendo compatible, pero no es necesario. La contraseña se añadirá a la cadena de conexión después del nombre de usuario como `UID=<username>;PWD={P?;)*word}`. Para probar la cadena resultante, puede ejecutar el siguiente comando:<br>`isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD={P?;)*word}'`|
|*SQL query*|Introduzca la consulta SQL.<br>Tenga en cuenta que con `db.odbc.select[]`, la consulta debe devolver solo un valor.|
|*Type of information*|Seleccione aquí el tipo de información que devolverá la consulta.<br>Si el tipo de información se selecciona incorrectamente, el item pasará a no ser compatible.|

[comment]: # ({/8e5e3daf-ca784f43})

[comment]: # ({db5ed945-06f9d2eb})
**Notas importantes**

-   Los items de monitorización de bases de datos dejarán de ser compatibles si no se inician procesos *odbc poller* en la configuración de server o proxy.
    Para activar los ODBC pollers, establezca el parámetro `StartODBCPollers` en el archivo de configuración de Zabbix [server](/manual/appendix/config/zabbix_server) o, para las comprobaciones realizadas por proxy, en el archivo de configuración de Zabbix [proxy](/manual/appendix/config/zabbix_proxy).
-   El valor del parámetro *Timeout* en el formulario de [configuración del item](/manual/config/items/item#configuration) 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 estos ajustes de tiempo de espera podrían ignorarse si el controlador ODBC instalado no los admite.
-   El comando SQL debe devolver un conjunto de resultados, igual que cualquier consulta que use la instrucción `select`.
    La sintaxis de la consulta dependerá del RDBMS que la procese.
    La sintaxis de la solicitud a un procedimiento almacenado debe comenzar con la palabra clave `call`.

[comment]: # ({/db5ed945-06f9d2eb})

[comment]: # ({99bf7f73-0188aaa2})
#### 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.

[comment]: # ({/99bf7f73-0188aaa2})

[comment]: # ({1a75e5c0-13edfcd4})
##### db.odbc.select[<descripción corta única>,<dsn>,<cadena de conexión>] {#db.odbc.select}

<br>
Devuelve un valor, es decir, la primera columna de la primera fila del resultado de la consulta SQL.<br>
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 `dsn` y `cadena de conexión` son 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.

[comment]: # ({/1a75e5c0-13edfcd4})

[comment]: # ({77183579-ebf5d449})
##### db.odbc.get[<unique short description>,<dsn>,<connection string>] {#db.odbc.get}

<br>
Transforma el resultado de la consulta SQL en un array JSON.<br>
Valor devuelto: *objeto JSON*.

Parámetros:

-   **unique short description** - una breve descripción única para identificar el item (para usar en triggers, etc.);
-   **dsn** - el nombre de la fuente de datos (según se especifica en `odbc.ini`);
-   **connection string** - la cadena de conexión (puede contener argumentos específicos del controlador).

Comentarios:

-   Aunque `dsn` y `connection string` son parámetros opcionales, se requiere al menos uno de ellos; si ambos están definidos, `dsn` se ignorará.
-   Se pueden devolver varias filas/columnas en formato JSON.
    Este item puede usarse como un item maestro que recopila todos los datos en una sola llamada del sistema, mientras que el preprocesamiento JSONPath puede usarse en items dependientes para extraer valores individuales.
    Para obtener más información, consulte un [ejemplo](/manual/discovery/low_level_discovery/examples/sql_queries#using-db-odbc-get) del formato devuelto, utilizado en la detección de bajo nivel.

Ejemplo:

    # Connection for MySQL ODBC driver 5:
    db.odbc.get[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]

[comment]: # ({/77183579-ebf5d449})

[comment]: # ({f6dfe740-c8148c95})
##### db.odbc.discovery[<descripción corta única>,<dsn>,<cadena de conexión>] {#db.odbc.discovery}

<br>
Transforma el resultado de la consulta SQL en un array JSON, utilizado para el [descubrimiento de bajo nivel](/manual/discovery/low_level_discovery/examples/sql_queries).
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.<br>
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 `dsn` y `cadena de conexión` son parámetros opcionales, se requiere al menos uno de ellos; si ambos están definidos, se ignorará `dsn`.

[comment]: # ({/f6dfe740-c8148c95})

[comment]: # ({87547b91-718edfdc})
#### 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.

[comment]: # ({/87547b91-718edfdc})
