# - \#15 Monitorowanie ODBC

#### - Przegląd

Monitorowanie ODBC odpowiada typowi pozycji *Monitor bazy danych* w
interfejsie użytkownika Zabbix.

ODBC jest napisanym w języku programowania C pośrednim API, pozwalającym
na dostęp do systemów zarządzania bazami danych (DBMS). ODBC zostało
opracowane przez Microsoft a następnie zostało przeniesione na inne
platformy.

Zabbix może odpytywać dowolne bazy, wyposażone w ODBC. Żeby to zrobić,
Zabbix nie łączy się bezpośrednio z bazą danych, ale używa interfejsów i
sterowników ustawionych w ODBC. Funkcja ta pozwala w bardziej wydajny
sposób monitorować wiele aspektów różnych baz danych - na przykład,
pozwala sprawdzić konkretne kolejki bazy danych, statystykę użycia i tak
dalej. Zabbix obsługuje unixODBC, który jest jedną z najczęściej
używanych implementacji API ODBC typu open source.

#### - Instalacja unixODBC

Zalecanym sposobem instalacji unixODBC jest użycie domyślnych
repozytoriów pakietów systemu operacyjnego Linux. W większości
popularnych dystrybucji Linux, unixODBC jest domyślnie dostępny w
repozytorium pakietów. Jeżeli nie jest dostępny, można go pobrać ze
strony domowej unixODBC: <http://www.unixodbc.org/download.html>.

Instalacja unixODBC na systemach opartych o RedHat/Fedora przy użyciu
menadżera pakietów *yum*:

    shell> yum -y install unixODBC unixODBC-devel

Instalacja unixODBC na systemach opartych o SUSE przy użyciu menadżera
pakietów *zypper*:

    # zypper in unixODBC-devel

::: noteclassic
Pakiet unixODBC-devel jest wymagany do skompilowania Zabbix
z obsługą unixODBC.
:::

#### - Instalacja sterowników unixODBC

Dla bazy danych, która ma być monitorowana, należy zainstalować
sterownik bazy danych unixODBC. unixODBC udostępnia listę obsługiwanych
baz danych i sterowników: <http://www.unixodbc.org/drivers.html>. W
niektórych dystrybucjach Linux sterowniki baz danych są umieszczone w
repozytorium pakietów. Instalacja sterownika bazy danych MySQL na
systemach opartych o RedHat/Fedora przy użyciu menadżera pakietów *yum*:

    shell> yum install mysql-connector-odbc

Instalacja sterownika bazy danych MySQL na systemach opartych o SUSE
przy użyciu menadżera pakietów *zypper*:

    zypper in MyODBC-unixODBC

#### - Konfiguracja unixODBC

ODBC konfiguruje się poprzez edycję plików **odbcinst.ini** i
**odbc.ini** files. Żeby sprawdzić lokalizację plików konfiguracyjnych,
należy wpisać:

    shell> odbcinst -j

**odbcinst.ini** używany jest do wyświetlania zainstalowanych
sterowników baz danych ODBC:

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

Szczegóły parametrów:

|Atrybut|Opis|
|-------|----|
|*mysql*|Nazwa sterownika bazy danych.|
|*Description*|Opis sterownika bazy danych.|
|*Driver*|Lokalizacja biblioteki sterownika bazy danych.|

**odbc.ini** używane jest do definiowania źródeł danych:

    [test]
    Description = MySQL test database
    Driver      = mysql
    Server      = 127.0.0.1
    User        = root
    Password    =
    Port        = 3306
    Database    = zabbix

Szczegóły parametrów:

|Atrybut|Opis|
|-------|----|
|*test*|Nazwa źródła danych (DSN).|
|*Description*|Opis źródła danych.|
|*Driver*|Nazwa sterownika bazy danych - określona w odbcinst.ini|
|*Server*|IP/DNS serwera bazy danych.|
|*User*|Użytkownik bazy danych do podłączania się.|
|*Password*|Hasło użytkownika bazy danych.|
|*Port*|Port do podłączania się do bazy danych.|
|*Database*|Nazwa bazy danych.|

Żeby zweryfikować, czy połączenie ODBC działa prawidłowo, należy
przetestować połączenie do bazy danych. Można to zrobić przy pomocy
narzędzia **isql** (zawartego w pakiecie unixODBC):

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

#### - Kompilacja Zabbix z obsługą ODBC

Żeby włączyć obsługę ODBC, Zabbix powinien być skompilowany z
następującą flagą:

      --with-unixodbc[=ARG]   użyj sterownika odbc z pakietu unixODBC

::: noteclassic
Zobacz więcej na temat instalacji Zabbix z [kodów
źródłowych](/pl/manual/installation/install).
:::

#### - Konfiguracja pozycji w interfejsie użytkownika Zabbix

Konfiguracja [pozycji](/manual/config/items/item#przeglad) monitorowania
bazy danych:

![](../../../../../assets/pl/manual/config/items/itemtypes/odbc.png)

Specjalnie dla pozycji monitorowania bazy danych należy wprowadzić:

|   |   |
|---|---|
|*Typ*|Należy wybrać *Monitor bazy danych*.|
|*Klucz*|Należy wprowadzić **db.odbc.select**\[unikalny\_opis,nazwa\_źródła\_danych\]<br>Unikalny opis posłuży do identyfikacji pozycji w wyzwalaczach, itp.<br>Nazwa źródła danych (DSN) musi być taka sama jak w odbc.ini.|
|*Nazwa użytkownika*|Należy wprowadzić nazwę użytkownika bazy danych (opcjonale, jeżeli użytkownik został określony w odbc.ini)|
|*Hasło*|Należy wprowadzić hasło użytkownika bazy danych (opcjonale, jeżeli hasło zostało określone w odbc.ini)|
|*Zapytanie SQL*|Należy wprowadzić zapytanie SQL|
|*Typ informacji*|Koniecznie trzeba wiedzieć, jakiego typu dane zwracane są przez zapytanie, żeby ustawić właściwie to pole. Z niewłaściwym *typem informacji* pozycja stanie się niewspierana.|

#### - Ważne uwagi

-   Zapytanie nie może być uruchamiane na serwerze dłużej niż parametr
    [Timeout](/pl/manual/appendix/config/zabbix_server). Począwszy od
    Zabbix 2.0.8 wartość parametru
    [Timeout](/pl/manual/appendix/config/zabbix_server) używana jest
    również jako opóźnienie logowania ODBC (należy zauważyć, że w
    zależności od sterownika ODBC ustawienie opóźnienia logowania może
    być ignorowane).
-   Zapytanie musi zwracać wyłącznie jedną wartość.
-   Jeżeli zapytanie zwraca więcej niż jedną kolumnę, tylko pierwsza
    kolumna jest czytana.
-   Jeżeli zapytanie zwraca więcej niż jeden wiersz, tylko pierwszy jest
    czytany.
-   Komenda SQL musi zaczynać się od `select`.
-   Komenda SQL nie może zawierać żadnego znaku końca linii.

#### - Komunikaty błędów

Począwszy od wersji Zabbix 2.0.8 komunikaty błędów ODBC są grupowane w
polach, żeby przekazać bardziej szczegółowe informacje. Przykład:

    Cannot execute ODBC query:[SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]|
    -------------------------  ---------   -----  |  ------------------------------------------------------------------- |
                |                  |         |    `- Oryginalny kod błędu       `- komunikat błędu.                      `- Separator rekordu
                |                  |         `-SQLState
                `- Komunikat Zabbix`- Kod powrotu ODBC

Należy zauważyć, że długość komunikatu błędu ograniczona jest do 128
znaków, zatem komunikat może być obcięty. Jeżeli istnieje więcej niż
jeden rekord diagnostyczny ODBC Zabbix spróbuje połączyć je, do
osiągnięcia limitu długości.
