[comment]: # translation:outdated

[comment]: # ({68c88a1c-68c88a1c})
# 14 Monitoratge ODBC

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

[comment]: # ({3fce4dab-b5170fd3})
#### Vista general

El monitoratge ODBC correspon al tipus d'element **monitoratge de la base de dades** a la interfície Zabbix.

ODBC és una API intermediària en llenguatge de programació C, que permet accedir als sistemes de gestió de base de dades (SGBD). El concepte ODBC s'ha desenvolupat per Microsoft i més tard s'ha estès a altres plataformes.

Zabbix pot interrogar qualsevol base de dades admesa per ODBC. Per fer-ho, Zabbix no connecta pas directament a la base de dades, sinó que empra la interfície ODBC i els controladors configurats dins ODBC. Aquesta funció permet un monitoratge més eficient de diferents bases de dades amb múltiples finalitats (per exemple, la verificació de cues de base de dades específiques, les estadístiques d'ús, etc.). Zabbix admet unixODBC, que és una de les implementacions d'API ODBC de programari lliure més emprada.

::: noteimportant
Consulteu també els [problemes coneguts](/manual/installation/known_issues#odbc_checks) per les verificacions ODBC.
:::

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

[comment]: # ({d01ad0be-bf6fd8ba})
#### Instal·lació de unixODBC

Es suggereix instal·lar unixODBC amb el paquet dels repositoris de Linux, per defecte. Les distribucions més populars de Linux inclouen al repositori els paquets de unixODBC per defecte. Si els paquets no són disponibles, els arxius font es poden obtindre al lloc web de unixODBC:
<http://www.unixodbc.org/download.html>.

Per installar unixODBC, empreu el gestor de paquets:

```bash
# Per a sistemes Ubuntu/Debian:
apt install unixodbc unixodbc-dev

# Per a sistemes basats en RedHat/Fedora:
dnf install unixODBC unixODBC-devel

# PEr a sistemes basats en SUSE-based:
zypper in unixODBC-devel
```

::: noteimportant
Cal el paquet `unixodbc-dev` o `unixODBC-devel` per compilar Zabbix amb suport unixODBC.
Per habilitar el suport ODBC, Zabbix s'ha de compilar amb la següent [opció de configuració](/manual/installation/install#configure-the-sources):
<br><br>

    --with-unixodbc[=ARG] # Empreu el controlador ODBC contra el paquet unixODBC.

:::

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

[comment]: # ({07af6a39-eea09ed7})
#### Instal·lar els drivers unixODBC

S'ha d'instal·lar un controlador de base de dades unixODBC per a la base de dades que es monitorarà. unixODBC té una llista de bases de dades i controladors compatibles: <http://www.unixodbc.org/drivers.html>.

::: noteclassic
En algunes distribucions de Linux, els drivers de la base de dades s'inclouen als paquets del repositori.
:::

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

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

Per instal·lar el controlador de base de dades MySQL unixODBC, empreu el gestor de paquets del sistema que trieu:

```bash
# Per als sistemes Ubuntu/Debian:
apt install odbc-mariadb

# Per a sistemes basats en RedHat/Fedora:
dnf instal·lar mariadb-connector-odbc

# Per a sistemes basats en SUSE:
zypper instal·lar mariadb-connector-odbc
```

Per instal·lar el controlador de la base de dades sense un gestor de paquets, consulteu la [documentació de MySQL](https://dev.mysql.com/downloads/connector/odbc/) per a `mysql-connector-odbc`, o la [documentació de MariaDB](https://mariadb.com/kb/en/mariadb-connector-odbc/) per a "mariadb-connector-odbc".

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

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

Per instal·lar el controlador de base de dades PostgreSQL unixODBC, empreu el gestor de paquets del sistema que trieu:

```bash
# Per als sistemes Ubuntu/Debian:
apt install odbc-postgresql

# Per a sistemes basats en RedHat/Fedora:
dnf install postgresql-connector-odbc

# Per a sistemes basats en SUSE:
zypper install postgresql-connector-odbc
```

Per instal·lar el controlador de la base de dades sense un gestor de paquets, consulteu la [documentació de PostgreSQL](https://www.postgresql.org/download/linux/).

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

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

Per instal·lar el controlador de base de dades unixODBC, consulteu la [documentació d'Oracle](https://www.oracle.com/database/technologies/releasenote-odbc-ic.html).

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

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

Per instal·lar el controlador de base de dades MSSQL unixODBC per als sistemes Ubuntu/Debian, empreu el gestor de paquets del sistema que trieu:

```bash
# Per als sistemes Ubuntu/Debian:
apt install tdsodbc

# Per a sistemes basats en RedHat/Fedora (paquets EPEL: https://docs.fedoraproject.org/en-US/epel/):
dnf install epel-release
dnf install freetds

# Per a sistemes basats en SUSE:
zypper install libtdsodbc0
```

Per instal·lar el controlador de la base de dades sense un gestor de paquets, consulteu la [Guia d'usuari de FreeTDS](http://www.freetds.org/userguide/).

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

[comment]: # ({f24fde2e-b15e771b})
#### Configuració de unixODBC

La configuració d'ODBC es fa editant els fitxers `odbcinst.ini` i `odbc.ini`. Per comprovar la ubicació del fitxer de configuració, escriviu:

```bash
odbcinst -j
```

La comanda hauria de retornar informació similar a la següent:

```
bashunixODBC 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 fitxer `odbcinst.ini` enumera els controladors de base de dades ODBC instal·lats.
Si falta `odbcinst.ini`, cal crear-lo manualment.

```ini
[TEST_MYSQL]
Description=ODBC for MySQL
Driver=/usr/lib/libmyodbc5.so
FileUsage=1
```

|Paràmetre|Descripció|
|--|---------|
|TEST_MYSQL|Nom del controlador de base de dades.|
|Descripció|Descripció del controlador de base de dades.|
|Controlador|Ubicació de la biblioteca de controladors de base de dades.|
|FileUsage|Determina si el controlador de base de dades admet la connexió a un servidor de bases de dades sense suport per accedir a fitxers locals (0); admet la lectura de dades dels fitxers (1); admet l'escriptura de dades als fitxers (2).|
|Threading|Nivell de serialització de fils. Admet PostgreSQL.<br>Des de la versió 1.6, si el gestor de controladors és creat amb suport de fils, podeu afegir una altra entrada de controlador.|

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

[comment]: # ({f10754c8-207ccff7})
##### odbc.ini

El fitxer `odbc.ini` s'empra per configurar les fonts de dades.
Tingueu en compte que la llista de paràmetres admesos depèn del controlador de la base de dades (per exemple, les bases de dades Oracle poden utilitzar ServerName en lloc de Server, etc.).

```ini
[TEST_MYSQL]
Description=MySQL Test Database
Driver=mysql
Server=127.0.0.1
User=root
Password=
Port=3306
Socket=
Database=zabbix
```

|Paràmetre|Descripció|
|--|---------|
|TEST_MYSQL|Nom de la font de dades (DSN).|
|Descripció|Descripció de la font de dades.|
|Controlador|Nom del controlador de base de dades (tal com s'especifica a `odbcinst.ini`).|
|Servidor|Servidor de bases de dades IP/DNS.|
|Usuari|Usuari de la base de dades per a la connexió.|
|Contrasenya|Contrasenya d'usuari de la base de dades.|
|Port|Port de connexió a la base de dades.|
|Socket|Socket de connexió de base de dades.|
|Base de dades|Nom de la base de dades.|

Per a altres opcions de paràmetres de configuració possibles, consulteu [documentació de MySQL](https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html).

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

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

El fitxer `odbc.ini` per a PostgreSQL pot contindre paràmetres addicionals:

```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=
```

|Paràmetre|Descripció|
|--|---------|
|ReadOnly|Especifica si la connexió a la base de dades només permet operacions de lectura (consultes `SELECT`) i restringeix les modificacions (sentències `INSERT`, `UPDATE` i `DELETE`); útil per a escenaris on les dades haurien de romandre sense canvis.|
|Protocol|Versió del protocol backend PostgreSQL (ignorada quan s'empren connexions SSL).|
|ShowOidColumn|Especifica si s'ha d'incloure l'ID d'objecte (OID) a SQLColumns.|
|FakeOidIndex|Especifica si s'ha de crear un índex únic fals a l'OID.|
|RowVersioning|Especifica si s'ha de permetre que les aplicacions detectin si altres usuaris han modificat les dades mentre intenteu actualitzar una filera. Tingueu en compte que aquest paràmetre pot accelerar el procés d'actualització, ja que, per actualitzar una filera, no cal especificar cada columna a la clàusula `WHERE`.|
|ShowSystemTables|Especifica si el controlador de la base de dades ha de tractar les taules del sistema com a taules normals en SQLTables; útil per a l'accessibilitat, permetent la visibilitat a les taules del sistema.|
|Fetch|Especifica si el controlador hauria d'emprar automàticament declare cursor/fetch per gestionar les instruccions `SELECT` i mantindre una memòria cau de 100 files.|
|BoolsAsChar|Controla l'assignació de tipus booleans.<br>Si s'estableix en "Sí", els bools s'assignen a `SQL_CHAR`; en cas contrari, s'assignen a `SQL_BIT`.|
|SSLmode|Especifica el mode SSL per a la connexió.|
|ConnSettings|Configuració addicional enviada al backend en connexió.|

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

[comment]: # ({2e87263e-93c68b7f})
##### Prova de connexió ODBC

Per provar si la connexió ODBC funciona correctament, podeu emprar la utilitat `isql` (inclosa al paquet `unixODBC`):

```bash
isql test
+---------------------------------------+
| Connectat!                            |
|                                       |
| sql-statement |
| help [nom de la taula] |
| quit |
|                                       |
+---------------------------------------+
```

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

[comment]: # ({458da043-ca784f43})
#### Configuració dels elements a la interfície Zabbix

Configureu un [element](/manual/config/items/item#overview) de **monitoratge de base de dades**.

![](../../../../../assets/en/manual/config/items/itemtypes/db_monitor.png)

Tots els camps d'entrada obligatoris són marcats amb un asterisc vermell.

Específicament per als elements de monitoratge de bases de dades, heu d'introduir:

| | |
|--|---------|
|*Tipus*|Trieu "Monitoratge de bases de dades" aquí.|
|*Clau*|Introduïu una de les dues claus d'element admeses:<br>[**db.odbc.select[]**](#db.odbc.select) - aquest element és dissenyat per retornar un valor (la primera columna de la primera filera del resultat de la consulta SQL);<br>[**db.odbc.get[]**](#db.odbc.get) - aquest element retorna informació de la descoberta de baix nivell|
|*Nom d'usuari*|Introduïu el nom d'usuari de la base de dades<br>Aquest paràmetre és opcional si l'usuari s'especifica a `odbc.ini`.<br>Si s'empra la cadena de connexió i el camp *Nom d'usuari* no és pas buit, s'afegeix al cadena de connexió com a `UID=<usuari>`|
|*Mot de pas*|Introduïu el mot de pas de l'usuari de la base de dades<br>Aquest paràmetre és opcional si s'especifica el mot de pas a odbc.ini.<br>Si s'empra la cadena de connexió i el camp *Mot de pas* no és pas buit, s'adjunta a la connexió cadena com a `PWD=<mot_de_pas>`.<br>Des de Zabbix 6.0.34, s'admeten caràcters especials en aquest camp.<br><br>Abans de Zabbix 6.0.34, si el mot de pas conté un punt i coma, s'hauria d'embolcallar entre claudàtors; per exemple, `{P?;)*word}`. Després de la 6.0.34, en aquest cas encara s'admet l'embolcall del mot de pas, però no és obligatori. El mot de pas s'adjuntarà a la cadena de connexió després del nom d'usuari com a `UID=<nom d'usuari>;PWD={P?;)*paraula}`. Per provar la cadena resultant, podeu executar l'ordre següent:<br>`isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD={P?;)*word}'`|
|*Consulta SQL*|Introduïu la consulta SQL.<br>Tingueu en compte que amb l'element `db.odbc.select[]`, la consulta només ha de retornar un valor.|
|*Tipus d'informació*|És important sapiguer quin tipus d'informació retornarà la consulta, perquè aquí estigui correctament seleccionada.<br>Si un tipus d'informació incorrecte, l'element no s'admetrà pas.|

[comment]: # ({/458da043-ca784f43})

[comment]: # ({db5ed945-06f9d2eb})
**Notes importants**

- Els elements de monitoratge de la base de dades no seran compatibles si no s'inicia cap procés *odbc poller* a la configuració del servidor o del proxy.
    Per habilitar els enquestadors ODBC, configureu el paràmetre `StartODBCPollers` al fitxer de configuració del [servidor](/manual/appendix/config/zabbix_server) Zabbix o, per a comprovacions de proxy, al [proxy](/manual/appendix/config/zabbix_proxy) Zabbix.
- El valor del paràmetre *Timeout* al formulari de la [configuració de l'element](/manual/config/items/item#configuration)s'empra com a temps d'espera del login ODBC i el temps d'epera de l'execució de la consulta.
	Fixeu-vos que aquesta configuració de temps d'espera s'ignorarà si el driver ODBC instal·lat no ho admet.
- La comanda SQL ha de retornar un conjunt de resultats com qualsevol consulta amb `select`.
	La sintaxi de les peticions dependrà de l'RDBMS, que les processarà.
	La sintaxi de consulta d'un procediment d'emmagatzematge s'ha d'iniciar amb la paraula clau `call`.

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

[comment]: # ({99bf7f73-0188aaa2})
#### Detalls clau de l'element

Els paràmetres sense claudàtors angulars són obligatoris. Els paràmetres marcats amb claudàtors angulars **<** **>** són opcionals.

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

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

##### db.odbc.select[<descripció curta única>,<dsn>,<cadena de connexió>] {#db.odbc.select}

<br>
Retorna un valor, és a dir, la primera columna de la primera fila del resultat de la consulta SQL.<br>
Valor de retorn: depenent de la consulta SQL.

Paràmetres:

- **descripció breu única** - una descripció breu única per identificar l'element (per emprar-lo a triggers, etc.);
- **dsn** - el nom de la font de dades (tal com s'especifica a `odbc.ini`);
- **cadena de connexió** - la cadena de connexió (pot contindrearguments específics del controlador).

Comentaris:

- Encara que `dsn` i `connection string` són paràmetres opcionals, almenys un d'ells és necessari; si tots dos són definits, `dsn` s'ignorarà.
- Si una consulta retorna més d'una columna, només es llegeix la primera columna. Si una consulta retorna més d'una línia, només es llegeix la primera línia.

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

[comment]: # ({a6ace17e-ebf5d449})

##### db.odbc.get[<descripció curta única>,<dsn>,<cadena de connexió>] {#db.odbc.get}

<br>
Transforma el resultat de la consulta SQL en una matriu JSON.<br>
Valor de retorn: *objecte JSON*.

Paràmetres:

- **descripció breu única** - una descripció breu única per identificar l'element (per emprar-lo a triggers, etc.);
- **dsn** - el nom de la font de dades (tal com s'especifica a `odbc.ini`);
- **cadena de connexió** - la cadena de connexió (pot contindre arguments específics del controlador).

Comentaris:

- Encara que `dsn` i `connection string` són paràmetres opcionals, almenys un d'ells és necessari; si tots dos estan definits, `dsn` s'ignorarà.
- Es poden retornar diverses fileres/columnes en format JSON.
    Aquest element es pot emprar com a element mestre que recull totes les dades en una trucada al sistema, mentre que el preprocessament JSONPath es pot emprar en elements dependents per extreure valors individuals.
    Per obtindre més informació, consulteu un [exemple](/manual/discovery/low_level_discovery/examples/sql_queries#using-db.odbc.get) del format retornat, emprant la descoberta de baix nivell.

Exemple:

    # Connexió per al controlador ODBC MySQL 5:
    db.odbc.get[exemple de MySQL,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]

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

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

##### db.odbc.discovery[<descripció curta única>,<dsn>,<cadena de connexió>] {#db.odbc.discovery}

<br>
Transforma el resultat de la consulta SQL en una matriu JSON, emprada per a [descoberta de baix nivell](/manual/discovery/low_level_discovery/examples/sql_queries).
Els noms de columnes del resultat de la consulta es converteixen en noms de macro de descoberta de baix nivell combinats amb els valors de camp descoberts.
Aquestes macros es poden emprar per crear prototips d'elements, triggers, etc.<br>
Valor de retorn: *objecte JSON*.

Paràmetres:

- **descripció breu única** - una descripció breu única per identificar l'element (per emprar-lo a triggers, etc.);
- **dsn** - el nom de la font de dades (tal com s'especifica a `odbc.ini`);
- **cadena de connexió** - la cadena de connexió (pot contindre arguments específics del controlador).

Comentaris:

- Encara que `dsn` i `connection string` són paràmetres opcionals, almenys un d'ells és necessari; si tots dos estan definits, `dsn` s'ignorarà.

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

[comment]: # ({87547b91-718edfdc})
#### Missatges d'error

Els missatges d'error ODBC s'estructuren en camps per proporcionar informació detallada.
Per exemple, un missatge d'error pot tindre aquesta apareça:

    Cannot execute ODBC query: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]

-   "`Cannot execute ODBC query`" - Missatge de Zabbix
-   "`[SQL_ERROR]`" - Codi de retorn ODBC
-   "`[42601]`" - SQLState
-   "`[7]`" - Codi d'error nadiu
-   "`[ERROR: syntax error at or near ";"; Error while executing the query]`" - Missatge d'error nadiu

Veieu que la longitud del missatge d'error és limitada a 2048 octets, de manera que el missatge es pot truncar. Si hi ha diversos registres de diagnòstic ODBC, Zabbix prova de concatenar-los (separats per `|`) sempre que el límit de longitud ho permeti.

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