[comment]: # ({cd592738-68c88a1c})
# 8 Datu bāzes monitors

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

[comment]: # ({52947967-b5170fd3})
#### Pārskats

*Database monitor* vienuma tips Zabbix lietotāja saskarnē tiek izmantots ODBC uzraudzībai (ODBC pārbaudēm).

ODBC ir C programmēšanas valodas starpprogrammatūras API datubāzu pārvaldības sistēmu (DBMS) piekļuvei.
ODBC koncepciju izstrādāja Microsoft, un vēlāk tā tika portēta uz citām platformām.

Zabbix var vaicāt jebkurai datubāzei, ko atbalsta ODBC.
Lai to izdarītu, Zabbix nepieslēdzas datubāzēm tieši, bet izmanto ODBC saskarni un ODBC iestatītos draiverus.
Tas ļauj efektīvāk uzraudzīt dažādas datubāzes vairākiem mērķiem (piemēram, konkrētu datubāzu rindu rindām, lietojuma statistikai utt.).

Zabbix atbalsta unixODBC, kas ir viena no visbiežāk izmantotajām atvērtā pirmkoda ODBC API implementācijām.

::: noteimportant
Skatiet arī: [zināmās problēmas](/manual/installation/known_issues#odbc-checks) ODBC pārbaudēm.
:::

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

[comment]: # ({47a0f71f-bf6fd8ba})
#### unixODBC instalēšana

Ieteicamais unixODBC instalēšanas veids ir izmantot Linux operētājsistēmas noklusējuma pakotņu repozitorijus.
Populārākajās Linux distribūcijās unixODBC pēc noklusējuma ir iekļauts pakotņu repozitorijā.
Ja pakotnes nav pieejamas, pirmkoda failus var iegūt unixODBC mājaslapā: <http://www.unixodbc.org/download.html>.

Lai instalētu unixODBC, izmantojiet izvēlētās sistēmas pakotņu pārvaldnieku:

```bash
# Ubuntu/Debian sistēmām:
apt install unixodbc unixodbc-dev

# RedHat/Fedora bāzētām sistēmām:
dnf install unixODBC unixODBC-devel

# SUSE bāzētām sistēmām:
zypper in unixODBC-devel
```

::: noteimportant
`unixodbc-dev` vai `unixODBC-devel` pakotne ir nepieciešama, lai kompilētu Zabbix ar unixODBC atbalstu.
Lai iespējotu ODBC atbalstu, Zabbix jākompilē ar šādu [konfigurācijas opciju](/manual/installation/install/sources#configure-the-sources):
<br><br>

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

:::

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

[comment]: # ({07af6a39-eea09ed7})
#### unixODBC draiveru instalēšana

unixODBC datubāzes draiveris ir jāinstalē datubāzei, kas tiks uzraudzīta.
Atbalstīto datubāzu un draiveru sarakstu skatiet unixODBC mājaslapā: <http://www.unixodbc.org/drivers.html>.

::: noteclassic
Dažās Linux distribūcijās datubāzu draiveri ir iekļauti pakotņu repozitorijos.
:::

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

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

Lai instalētu MySQL unixODBC datubāzes draiveri, izmantojiet jūsu izvēlētās sistēmas pakotņu pārvaldnieku:

```bash
# Ubuntu/Debian sistēmām:
apt install odbc-mariadb

# RedHat/Fedora bāzētām sistēmām:
dnf install mariadb-connector-odbc

# SUSE bāzētām sistēmām:
zypper install mariadb-connector-odbc
```

Lai instalētu datubāzes draiveri bez pakotņu pārvaldnieka, lūdzu, skatiet [MySQL dokumentāciju](https://dev.mysql.com/downloads/connector/odbc/) par `mysql-connector-odbc` vai [MariaDB dokumentāciju](https://mariadb.com/kb/en/mariadb-connector-odbc/) par `mariadb-connector-odbc`.

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

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

Lai instalētu PostgreSQL unixODBC datubāzes draiveri, izmantojiet jūsu izvēlētās sistēmas pakotņu pārvaldnieku:

```bash
# Ubuntu/Debian sistēmām:
apt install odbc-postgresql

# RedHat/Fedora bāzētām sistēmām:
dnf install postgresql-odbc

# SUSE bāzētām sistēmām:
zypper install psqlODBC
```

Lai instalētu datubāzes draiveri bez pakotņu pārvaldnieka, lūdzu, skatiet [PostgreSQL dokumentāciju](https://www.postgresql.org/download/linux/).

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

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

Lai instalētu unixODBC datubāzes draiveri, lūdzu, skatiet [Oracle dokumentāciju](https://www.oracle.com/database/technologies/releasenote-odbc-ic.html).

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

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

Lai instalētu MSSQL unixODBC datubāzes draiveri, izmantojiet jūsu izvēlētās sistēmas pakotņu pārvaldnieku:

```bash
# Ubuntu/Debian sistēmām:
apt install tdsodbc

# RedHat/Fedora bāzētām sistēmām (EPEL pakotnes: https://docs.fedoraproject.org/en-US/epel/):
dnf install epel-release
dnf install freetds

# SUSE bāzētām sistēmām:
zypper install libtdsodbc0
```

Lai instalētu datubāzes draiveri bez pakotņu pārvaldnieka, lūdzu, skatiet [FreeTDS user guide](http://www.freetds.org/userguide/).

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

[comment]: # ({f24fde2e-b15e771b})
#### unixODBC konfigurēšana

Lai konfigurētu unixODBC, jums jārediģē faili `odbcinst.ini` un `odbc.ini`.
Šo failu atrašanās vietu varat pārbaudīt, izpildot šādu komandu:

```bash
odbcinst -j
```

Komandas rezultātā jābūt informācijai, kas ir līdzīga šādai:

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

Fails `odbcinst.ini` uzskaita instalētos ODBC datubāzu draiverus.
Ja `odbcinst.ini` trūkst, tas ir jāizveido manuāli.

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

|Parameter|Description|
|--|--------|
|TEST_MYSQL|Datubāzes draivera nosaukums.|
|Description|Datubāzes draivera apraksts.|
|Driver|Datubāzes draivera bibliotēkas atrašanās vieta.|
|FileUsage|Nosaka, vai datubāzes draiveris atbalsta savienošanos ar datubāzes serveri bez atbalsta piekļuvei lokālajiem failiem (0); atbalsta datu nolasīšanu no failiem (1); atbalsta datu rakstīšanu failos (2).|
|Threading|Pavedienu serializācijas līmenis. Atbalstīts PostgreSQL.<br>Kopš 1.6, ja draiveru pārvaldnieks ir būvēts ar pavedienu atbalstu, varat pievienot vēl vienu draivera ierakstu.|

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

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

Fails `odbc.ini` tiek izmantots, lai konfigurētu datu avotus.
Ņemiet vērā, ka atbalstīto parametru saraksts ir atkarīgs no datubāzes draivera (piemēram, Oracle datubāzēs Server vietā var tikt izmantots ServerName u.c.).

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

|Parametrs|Apraksts|
|--|--------|
|TEST_MYSQL|Datu avota nosaukums (DSN).|
|Description|Datu avota apraksts.|
|Driver|Datubāzes draivera nosaukums (kā norādīts `odbcinst.ini`).|
|Server|Datubāzes servera IP/DNS.|
|User|Datubāzes lietotājs savienojumam.|
|Password|Datubāzes lietotāja parole.|
|Port|Datubāzes savienojuma ports.|
|Socket|Datubāzes savienojuma ligzda.|
|Database|Datubāzes nosaukums.|

Par citām iespējamām konfigurācijas parametru opcijām skatiet [MySQL dokumentāciju](https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html).

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

[comment]: # ({e0fd367c-fed5e483})
PostgreSQL `odbc.ini` fails var saturēt papildu parametrus:

```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=8.0+
ShowOidColumn=No
FakeOidIndex=No
RowVersioning=No
ShowSystemTables=No
Fetch=Yes
BoolsAsChar=Yes
SSLmode=Require
ConnSettings=
```

|Parametrs|Apraksts|
|--|--------|
|ReadOnly|Norāda, vai datubāzes savienojums atļauj tikai lasīšanas darbības (`SELECT` vaicājumus) un ierobežo izmaiņu veikšanu (`INSERT`, `UPDATE` un `DELETE` priekšrakstus); noderīgi scenārijos, kuros datiem jāpaliek nemainītiem.|
|Protocol|PostgreSQL aizmugursistēmas protokola versija (tiek ignorēta, izmantojot SSL savienojumus).|
|ShowOidColumn|Norāda, vai iekļaut Object ID (OID) SQLColumns rezultātos.|
|FakeOidIndex|Norāda, vai izveidot mākslīgu unikālu indeksu OID laukam.|
|RowVersioning|Norāda, vai iespējot lietotnēm noteikt, vai datus ir modificējuši citi lietotāji laikā, kamēr mēģināt atjaunināt rindu. Ņemiet vērā, ka šis parametrs var paātrināt atjaunināšanas procesu, jo, lai atjauninātu rindu, `WHERE` klauzulā nav jānorāda katra atsevišķā kolonna.|
|ShowSystemTables|Norāda, vai datubāzes draiverim sistēmas tabulas SQLTables rezultātos jāuztver kā parastas tabulas; noderīgi piekļūstamībai, nodrošinot sistēmas tabulu redzamību.|
|Fetch|Norāda, vai draiverim automātiski izmantot declare cursor/fetch `SELECT` priekšrakstu apstrādei un uzturēt 100 rindu kešatmiņu.|
|BoolsAsChar|Kontrolē Būla tipu kartēšanu.<br>Ja iestatīts uz "Yes", Būla vērtības tiek kartētas uz `SQL_CHAR`; pretējā gadījumā tās tiek kartētas uz `SQL_BIT`.|
|SSLmode|Norāda savienojuma SSL režīmu.|
|ConnSettings|Papildu iestatījumi, kas savienojuma izveides laikā tiek nosūtīti aizmugursistēmai.|

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

[comment]: # ({2e87263e-93c68b7f})
##### ODBC savienojuma testēšana

Lai pārbaudītu, vai ODBC savienojums darbojas veiksmīgi, varat izmantot `isql` utilītu (iekļauta `unixODBC` pakotnē):

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

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

[comment]: # ({458da043-ca784f43})
#### Vienuma konfigurācija Zabbix lietotāja saskarnē

Konfigurējiet **datubāzes uzraudzības** [vienumu](/manual/config/items/item#overview).

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

Visi obligātie ievades lauki ir atzīmēti ar sarkanu zvaigznīti.

Datubāzes uzraudzības vienumiem ir jānorāda:

|   |   |
|--|--------|
|*Type*|Šeit atlasiet "Database monitor".|
|*Key*|Ievadiet vienu no atbalstītajām vienuma atslēgām:<br>[**db.odbc.select[]**](#db.odbc.select) - šis vienums atgriež vienu vērtību (SQL vaicājuma rezultāta pirmās rindas pirmo kolonnu);<br>[**db.odbc.get[]**](#db.odbc.get) - šis vienums atgriež vairākas rindas/kolonnas JSON formātā;<br>[**db.odbc.discovery[]**](#db.odbc.discovery) - šis vienums atgriež zema līmeņa atklāšanas datus.|
|*User name*|Ievadiet datubāzes lietotājvārdu (līdz 255 rakstzīmēm).<br>Šis parametrs nav obligāts, ja datubāzes lietotājvārds ir norādīts `odbc.ini` failā.<br>Ja tiek izmantota savienojuma virkne un lauks *User name* nav tukšs, tad tas tiek pievienots savienojuma virknei kā `UID=<user>`.|
|*Password*|Ievadiet datubāzes lietotāja paroli (līdz 255 rakstzīmēm).<br>Šis parametrs nav obligāts, ja parole ir norādīta `odbc.ini` failā.<br>Ja tiek izmantota savienojuma virkne un lauks *Password* nav tukšs, tad tā tiek pievienota savienojuma virknei kā `PWD=<password>`.<br>Šajā laukā tiek atbalstītas speciālās rakstzīmes.<br>Parole tiks pievienota savienojuma virknei aiz lietotājvārda, piemēram, `UID=<username>;PWD=P?;)*word`.<br>Lai pārbaudītu iegūto virkni, varat izpildīt šādu komandu:<br>`isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD=P?;)*word'`|
|*SQL query*|Ievadiet SQL vaicājumu.<br>Ņemiet vērā, ka ar `db.odbc.select[]` vaicājumam ir jāatgriež tikai viena vērtība.|
|*Type of information*|Šeit atlasiet informācijas tipu, ko atgriezīs vaicājums.<br>Ja informācijas tips ir atlasīts nepareizi, vienums kļūs neatbalstīts.|

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

[comment]: # ({b2cf88bb-06f9d2eb})
**Svarīgas piezīmes**

-   Datubāzes uzraudzības vienumi kļūs neatbalstīti, ja servera vai starpniekservera konfigurācijā netiks palaisti neviens *odbc poller* process.
    Lai aktivizētu ODBC pollerus, iestatiet `StartODBCPollers` parametru Zabbix [serveris](/manual/concepts/server/server_params) konfigurācijas failā vai, ja pārbaudes veic starpniekserveris, Zabbix [starpniekserveris](/manual/concepts/proxy/proxy_params) konfigurācijas failā.
-   [vienuma konfigurācija](/manual/config/items/item#configuration) formā norādītā *Timeout* parametra vērtība tiek izmantota kā ODBC pieteikšanās noildze un vaicājuma izpildes noildze.
    Ņemiet vērā, ka šie noildzes iestatījumi var tikt ignorēti, ja instalētais ODBC draiveris tos neatbalsta.
-   SQL komandai ir jāatgriež rezultātu kopa, tāpat kā jebkuram vaicājumam, kas izmanto `select` priekšrakstu.
    Vaicājuma sintakse būs atkarīga no RDBMS, kas to apstrādās.
    Pieprasījuma uzglabāšanas procedūrai sintaksei jāsākas ar `call` atslēgvārdu.

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

[comment]: # ({99bf7f73-0188aaa2})
#### Vienuma atslēgas detaļas

Parametri bez leņķiekavām ir obligāti. Parametri, kas apzīmēti ar leņķiekavām **<** **>**, ir neobligāti.

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

[comment]: # ({1a75e5c0-13edfcd4})
##### db.odbc.select[<unikāls īss apraksts>,<dsn>,<savienojuma virkne>] {#db.odbc.select}

<br>
Atgriež vienu vērtību, proti, SQL vaicājuma rezultāta pirmās rindas pirmo kolonnu.<br>
Atgrieztā vērtība: atkarībā no SQL vaicājuma.

Parametri:

-   **unikāls īss apraksts** - unikāls īss apraksts, lai identificētu vienumu (izmantošanai trigeros u.c.);
-   **dsn** - datu avota nosaukums (kā norādīts `odbc.ini`);
-   **savienojuma virkne** - savienojuma virkne (var saturēt draiverim specifiskus argumentus).

Komentāri:

-   Lai gan `dsn` un `savienojuma virkne` ir neobligāti parametri, ir nepieciešams norādīt vismaz vienu no tiem; ja ir definēti abi, `dsn` tiks ignorēts.
-   Ja vaicājums atgriež vairāk nekā vienu kolonnu, tiek nolasīta tikai pirmā kolonna. Ja vaicājums atgriež vairāk nekā vienu rindu, tiek nolasīta tikai pirmā rinda.

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

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

<br>
Pārveido SQL vaicājuma rezultātu JSON masīvā.<br>
Atgrieztā vērtība: *JSON objekts*.

Parametri:

-   **unique short description** - unikāls īss apraksts, lai identificētu vienumu (izmantošanai trigeros u.c.);
-   **dsn** - datu avota nosaukums (kā norādīts `odbc.ini`);
-   **connection string** - savienojuma virkne (var saturēt draiverim specifiskus argumentus).

Piezīmes:

-   Lai gan `dsn` un `connection string` ir neobligāti parametri, ir nepieciešams vismaz viens no tiem; ja abi ir definēti, `dsn` tiks ignorēts.
-   JSON formātā var tikt atgrieztas vairākas rindas/kolonnas.
    Šo vienumu var izmantot kā galveno vienumu, kas vienā sistēmas izsaukumā apkopo visus datus, savukārt atkarīgajos vienumos individuālu vērtību iegūšanai var izmantot JSONPath priekšapstrādi.
    Plašāku informāciju skatiet [piemērā](/manual/discovery/low_level_discovery/examples/sql_queries#using-db-odbc-get) par atgriezto formātu, kas izmantots zemā līmeņa atklāšanā.

Piemērs:

    # Savienojums MySQL ODBC draiverim 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[<unikāls īss apraksts>,<dsn>,<savienojuma virkne>] {#db.odbc.discovery}

<br>
Pārveido SQL vaicājuma rezultātu par JSON masīvu, ko izmanto [zema līmeņa atklāšanā](/manual/discovery/low_level_discovery/examples/sql_queries).
Kolonnu nosaukumi no vaicājuma rezultāta tiek pārvērsti par zema līmeņa atklāšanas makrosu nosaukumiem, kas ir sasaistīti ar atklāto lauku vērtībām.
Šos makrosus var izmantot, veidojot vienumu, trigeru u.c. prototipus.<br>
Atgrieztā vērtība: *JSON objekts*.

Parametri:

-   **unikāls īss apraksts** - unikāls īss apraksts vienuma identificēšanai (izmantošanai trigeros u.c.);
-   **dsn** - datu avota nosaukums (kā norādīts `odbc.ini`);
-   **savienojuma virkne** - savienojuma virkne (var saturēt draiverim specifiskus argumentus).

Komentāri:

-   Lai gan `dsn` un `savienojuma virkne` ir neobligāti parametri, ir nepieciešams norādīt vismaz vienu no tiem; ja ir definēti abi, `dsn` tiks ignorēts.

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

[comment]: # ({87547b91-718edfdc})
#### Kļūdu ziņojumi

ODBC kļūdu ziņojumi ir strukturēti laukos, lai sniegtu detalizētu informāciju.
Piemēram, kļūdas ziņojums var izskatīties šādi:

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

-   "`Cannot execute ODBC query`" - Zabbix ziņojums
-   "`[SQL_ERROR]`" - ODBC atgriešanas kods
-   "`[42601]`" - SQLState
-   "`[7]`" - vietējās kļūdas kods
-   "`[ERROR: syntax error at or near ";"; Error while executing the query]`" - vietējās kļūdas ziņojums

Ņemiet vērā, ka kļūdas ziņojuma garums ir ierobežots līdz 2048 baitiem, tāpēc ziņojums var tikt saīsināts.
Ja ir vairāk nekā viens ODBC diagnostikas ieraksts, Zabbix mēģina tos savienot vienā ziņojumā (atdalot ar `|`) tik tālu, cik to pieļauj garuma ierobežojums.

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