- #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
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
Zobacz więcej na temat instalacji Zabbix z kodów źródłowych.
- Konfiguracja pozycji w interfejsie użytkownika Zabbix
Konfiguracja pozycji monitorowania bazy danych:

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] Unikalny opis posłuży do identyfikacji pozycji w wyzwalaczach, itp. 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. Począwszy od Zabbix 2.0.8 wartość parametru Timeout 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.