Monitor bazy danych
Omówienie
Typ pozycja Database monitor w frontendzie Zabbix jest używany do monitorowania ODBC (sprawdzeń ODBC).
ODBC to pośredniczące API języka programowania C służące do uzyskiwania dostępu do systemów zarządzania bazami danych (DBMS). Koncepcja ODBC została opracowana przez firmę Microsoft, a następnie przeniesiona na inne platformy.
Zabbix może wykonywać zapytania do dowolnej bazy danych obsługiwanej przez ODBC. Aby to zrobić, Zabbix nie łączy się bezpośrednio z bazami danych, lecz korzysta z interfejsu ODBC oraz sterowników skonfigurowanych w ODBC. Umożliwia to bardziej efektywne monitorowanie różnych baz danych do wielu celów (na przykład sprawdzanie określonych kolejek bazy danych, statystyk użycia itp.).
Zabbix obsługuje unixODBC, który jest jedną z najczęściej używanych otwartoźródłowych implementacji API ODBC.
Zobacz także: znane problemy dotyczące sprawdzeń ODBC.
Instalacja unixODBC
Zalecanym sposobem instalacji unixODBC jest użycie domyślnych repozytoriów pakietów systemu operacyjnego Linux. W najpopularniejszych dystrybucjach Linux unixODBC jest domyślnie uwzględniony w repozytorium pakietów. Jeśli pakiety nie są dostępne, pliki źródłowe można pobrać ze strony głównej unixODBC: http://www.unixodbc.org/download.html.
Aby zainstalować unixODBC, użyj menedżera pakietów dla wybranego systemu:
# Dla systemów Ubuntu/Debian:
apt install unixodbc unixodbc-dev
# Dla systemów opartych na RedHat/Fedora:
dnf install unixODBC unixODBC-devel
# Dla systemów opartych na SUSE:
zypper in unixODBC-devel
Pakiet unixodbc-dev lub unixODBC-devel jest niezbędny do skompilowania Zabbixa z obsługą unixODBC.
Aby włączyć obsługę ODBC, Zabbix należy skompilować z następującą opcją konfiguracji:
--with-unixodbc[=ARG] # Użyj sterownika ODBC dla pakietu unixODBC.
Instalowanie sterowników unixODBC
Sterownik bazy danych unixODBC powinien być zainstalowany dla bazy danych, która będzie monitorowana. Listę obsługiwanych baz danych i sterowników można znaleźć na stronie głównej unixODBC: http://www.unixodbc.org/drivers.html.
W niektórych dystrybucjach Linuksa sterowniki baz danych są dołączone do repozytoriów pakietów.
MySQL
Aby zainstalować sterownik bazy danych MySQL dla unixODBC, użyj menedżera pakietów odpowiedniego dla wybranego systemu:
# Dla systemów Ubuntu/Debian:
apt install odbc-mariadb
# Dla systemów opartych na RedHat/Fedora:
dnf install mariadb-connector-odbc
# Dla systemów opartych na SUSE:
zypper install mariadb-connector-odbc
Aby zainstalować sterownik bazy danych bez użycia menedżera pakietów, zapoznaj się z dokumentacją MySQL dla mysql-connector-odbc lub z dokumentacją MariaDB dla mariadb-connector-odbc.
PostgreSQL
Aby zainstalować sterownik bazy danych PostgreSQL dla unixODBC, użyj menedżera pakietów odpowiedniego dla wybranego systemu:
# Dla systemów Ubuntu/Debian:
apt install odbc-postgresql
# Dla systemów opartych na RedHat/Fedora:
dnf install postgresql-odbc
# Dla systemów opartych na SUSE:
zypper install psqlODBC
Aby zainstalować sterownik bazy danych bez użycia menedżera pakietów, zapoznaj się z dokumentacją PostgreSQL.
Oracle
Aby zainstalować sterownik bazy danych unixODBC, zapoznaj się z dokumentacją Oracle.
MSSQL
Aby zainstalować sterownik bazy danych MSSQL unixODBC, użyj menedżera pakietów odpowiedniego dla wybranego systemu:
# Dla systemów Ubuntu/Debian:
apt install tdsodbc
# Dla systemów opartych na RedHat/Fedora (pakiety EPEL: https://docs.fedoraproject.org/en-US/epel/):
dnf install epel-release
dnf install freetds
# Dla systemów opartych na SUSE:
zypper install libtdsodbc0
Aby zainstalować sterownik bazy danych bez użycia menedżera pakietów, zapoznaj się z przewodnikiem użytkownika FreeTDS.
Konfigurowanie unixODBC
Aby skonfigurować unixODBC, należy edytować pliki odbcinst.ini i odbc.ini.
Lokalizację tych plików można sprawdzić, wykonując następujące polecenie:
odbcinst -j
Wynik polecenia powinien zawierać informacje podobne do poniższych:
unixODBC 2.3.9
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
odbcinst.ini
Plik odbcinst.ini zawiera listę zainstalowanych sterowników baz danych ODBC.
Jeśli plik odbcinst.ini nie istnieje, należy utworzyć go ręcznie.
[TEST_MYSQL]
Description=ODBC for MySQL
Driver=/usr/lib/libmyodbc5.so
FileUsage=1
| Parameter | Description |
|---|---|
| TEST_MYSQL | Nazwa sterownika bazy danych. |
| Description | Opis sterownika bazy danych. |
| Driver | Lokalizacja biblioteki sterownika bazy danych. |
| FileUsage | Określa, czy sterownik bazy danych obsługuje połączenie z serwerem bazy danych bez obsługi dostępu do plików lokalnych (0); obsługuje odczyt danych z plików (1); obsługuje zapis danych do plików (2). |
| Threading | Poziom serializacji wątków. Obsługiwane dla PostgreSQL. Od wersji 1.6, jeśli menedżer sterowników został zbudowany z obsługą wątków, można dodać kolejny wpis sterownika. |
odbc.ini
Plik odbc.ini służy do konfigurowania źródeł danych.
Należy pamiętać, że lista obsługiwanych parametrów zależy od sterownika bazy danych (na przykład bazy danych Oracle mogą używać parametru ServerName zamiast Server itd.).
[TEST_MYSQL]
Description=MySQL Test Database
Driver=mysql
Server=127.0.0.1
User=root
Password=
Port=3306
Socket=
Database=zabbix
| Parameter | Description |
|---|---|
| TEST_MYSQL | Nazwa źródła danych (DSN). |
| Description | Opis źródła danych. |
| Driver | Nazwa sterownika bazy danych (zgodnie z określeniem w odbcinst.ini). |
| Server | IP/DNS serwera bazy danych. |
| User | Użytkownik bazy danych używany do połączenia. |
| Password | Hasło użytkownika bazy danych. |
| Port | Port połączenia z bazą danych. |
| Socket | Gniazdo połączenia z bazą danych. |
| Database | Nazwa bazy danych. |
Aby poznać inne możliwe opcje parametrów konfiguracyjnych, zobacz dokumentację MySQL.
Plik odbc.ini dla PostgreSQL może zawierać dodatkowe parametry:
[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=
| Parametr | Opis |
|---|---|
| ReadOnly | Określa, czy połączenie z bazą danych zezwala wyłącznie na operacje odczytu (zapytania SELECT) i ogranicza modyfikacje (instrukcje INSERT, UPDATE i DELETE); przydatne w scenariuszach, w których dane powinny pozostać niezmienione. |
| Protocol | Wersja protokołu backend PostgreSQL (ignorowana w przypadku używania połączeń SSL). |
| ShowOidColumn | Określa, czy uwzględniać Object ID (OID) w SQLColumns. |
| FakeOidIndex | Określa, czy tworzyć sztuczny unikalny indeks dla OID. |
| RowVersioning | Określa, czy włączyć aplikacjom możliwość wykrywania, czy dane zostały zmodyfikowane przez innych użytkowników podczas próby aktualizacji wiersza. Należy pamiętać, że ten parametr może przyspieszyć proces aktualizacji, ponieważ przy aktualizacji wiersza nie trzeba określać każdej pojedynczej kolumny w klauzuli WHERE. |
| ShowSystemTables | Określa, czy sterownik bazy danych powinien traktować tabele systemowe jako zwykłe tabele w SQLTables; jest to przydatne ze względu na dostępność, ponieważ umożliwia wgląd w tabele systemowe. |
| Fetch | Określa, czy sterownik powinien automatycznie używać declare cursor/fetch do obsługi instrukcji SELECT i utrzymywać pamięć podręczną 100 wierszy. |
| BoolsAsChar | Steruje mapowaniem typów logicznych. Jeśli ustawiono wartość "Yes", wartości logiczne są mapowane na SQL_CHAR; w przeciwnym razie są mapowane na SQL_BIT. |
| SSLmode | Określa tryb SSL dla połączenia. |
| ConnSettings | Dodatkowe ustawienia wysyłane do backend podczas nawiązywania połączenia. |
Testowanie połączenia ODBC
Aby sprawdzić, czy połączenie ODBC działa poprawnie, można użyć narzędzia isql (dołączonego do pakietu unixODBC):
isql test
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
Konfiguracja pozycji w frontend Zabbix
Skonfiguruj pozycję monitorowania bazy danych.

Wszystkie obowiązkowe pola wejściowe są oznaczone czerwoną gwiazdką.
W przypadku pozycji monitorowania bazy danych należy określić:
| Type | Wybierz tutaj "Database monitor". |
| Key | Wprowadź jeden z obsługiwanych kluczy pozycji: db.odbc.select[] - ta pozycja zwraca jedną wartość (pierwszą kolumnę pierwszego wiersza wyniku zapytania SQL); db.odbc.get[] - ta pozycja zwraca wiele wierszy/kolumn w formacie JSON; db.odbc.discovery[] - ta pozycja zwraca dane wykrywania niskiego poziomu. |
| User name | Wprowadź nazwę użytkownika bazy danych (do 255 znaków). Ten parametr jest opcjonalny, jeśli nazwa użytkownika bazy danych jest określona w pliku odbc.ini.Jeśli używany jest ciąg połączenia, a pole User name nie jest puste, zostanie ono dołączone do ciągu połączenia jako UID=<user>. |
| Password | Wprowadź hasło użytkownika bazy danych (do 255 znaków). Ten parametr jest opcjonalny, jeśli hasło jest określone w pliku odbc.ini.Jeśli używany jest ciąg połączenia, a pole Password nie jest puste, zostanie ono dołączone do ciągu połączenia jako PWD=<password>. W tym polu obsługiwane są znaki specjalne. Dla wszystkich baz danych z wyjątkiem Oracle hasła zawierające % muszą być ujęte w nawiasy klamrowe {}.Hasło zostanie dołączone do ciągu połączenia po nazwie użytkownika, na przykład jako UID=<username>;PWD=P?;)*word.Aby przetestować wynikowy ciąg, możesz uruchomić następujące polecenie: isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD=P?;)*word' |
| SQL query | Wprowadź zapytanie SQL. Pamiętaj, że w przypadku db.odbc.select[] zapytanie musi zwracać tylko jedną wartość. |
| Type of information | Wybierz tutaj typ informacji, który ma zostać zwrócony przez zapytanie. Jeśli typ informacji zostanie wybrany nieprawidłowo, pozycja stanie się nieobsługiwana. |
Ważne uwagi
- Pozycje monitorowania bazy danych staną się nieobsługiwane, jeśli w konfiguracji serwera lub proxy nie zostaną uruchomione żadne procesy odbc poller.
Aby aktywować ODBC pollers, ustaw parametr
StartODBCPollersw pliku konfiguracyjnym Zabbix serwer lub, w przypadku kontroli wykonywanych przez proxy, w pliku konfiguracyjnym Zabbix proxy. - Wartość parametru Timeout w formularzu konfiguracji pozycji jest używana jako limit czasu logowania ODBC oraz limit czasu wykonania zapytania. Należy pamiętać, że te ustawienia limitu czasu mogą zostać zignorowane, jeśli zainstalowany sterownik ODBC nie obsługuje ich.
- Polecenie SQL musi zwracać zestaw wyników, tak jak każde zapytanie używające instrukcji
select. Składnia zapytania będzie zależeć od RDBMS, który będzie je przetwarzał. Składnia żądania do procedury składowanej musi zaczynać się od słowa kluczowegocall.
Szczegóły klucza pozycji
Parametry bez nawiasów ostrych są obowiązkowe. Parametry oznaczone nawiasami ostrymi < > są opcjonalne.
db.odbc.select[<unikalny krótki opis>,<dsn>,<connection string>]
Zwraca jedną wartość, czyli pierwszą kolumnę pierwszego wiersza wyniku zapytania SQL.
Wartość zwracana: Zależy od zapytania SQL.
Parametry:
- unikalny krótki opis — unikalny krótki opis identyfikujący pozycja (do użycia w wyzwalaczach itp.);
- dsn — nazwa źródła danych (zgodnie z definicją w
odbc.ini); - connection string — ciąg połączenia (może zawierać argumenty specyficzne dla sterownika).
Uwagi:
- Chociaż
dsniconnection stringsą parametrami opcjonalnymi, wymagany jest co najmniej jeden z nich; jeśli zdefiniowano oba,dsnzostanie zignorowany. - Jeśli zapytanie zwraca więcej niż jedną kolumnę, odczytywana jest tylko pierwsza kolumna. Jeśli zapytanie zwraca więcej niż jeden wiersz, odczytywany jest tylko pierwszy wiersz.
db.odbc.get[<unique short description>,<dsn>,<connection string>]
Przekształca wynik zapytania SQL do tablicy JSON.
Wartość zwracana: obiekt JSON.
Parametry:
- unique short description - unikalny krótki opis służący do identyfikacji pozycji (do użycia w wyzwalaczach itp.);
- dsn - nazwa źródła danych (zgodnie z definicją w
odbc.ini); - connection string - ciąg połączenia (może zawierać argumenty specyficzne dla sterownika).
Komentarze:
- Chociaż
dsniconnection stringsą parametrami opcjonalnymi, wymagany jest co najmniej jeden z nich; jeśli oba są zdefiniowane,dsnzostanie zignorowany. - W formacie JSON mogą zostać zwrócone wiele wierszy/kolumn. Ta pozycja może być używana jako pozycja nadrzędna, która zbiera wszystkie dane w jednym wywołaniu systemowym, natomiast w pozycjach zależnych można użyć przetwarzania JSONPath do wyodrębnienia poszczególnych wartości. Więcej informacji można znaleźć w przykładzie zwróconego formatu, używanego w niskopoziomowym wykrywaniu.
Przykład:
# 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"]
db.odbc.discovery[<unikalny krótki opis>,<dsn>,<connection string>]
Przekształca wynik zapytania SQL w tablicę JSON, używaną do niskopoziomowego wykrywania.
Nazwy kolumn z wyniku zapytania są przekształcane w nazwy makr niskopoziomowego wykrywania sparowane z wartościami wykrytych pól.
Makra te mogą być używane podczas tworzenia prototypów pozycji, wyzwalaczy itp.
Wartość zwracana: obiekt JSON.
Parametry:
- unikalny krótki opis — unikalny krótki opis identyfikujący pozycję (do użycia w wyzwalaczach itp.);
- dsn — nazwa źródła danych (zgodnie z definicją w
odbc.ini); - connection string — ciąg połączenia (może zawierać argumenty specyficzne dla sterownika).
Uwagi:
- Chociaż
dsniconnection stringsą parametrami opcjonalnymi, wymagany jest co najmniej jeden z nich; jeśli zdefiniowano oba,dsnzostanie zignorowany.
Komunikaty o błędach
Komunikaty o błędach ODBC są podzielone na pola, aby dostarczyć szczegółowych informacji. Na przykład komunikat o błędzie może wyglądać tak:
Cannot execute ODBC query: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]
- "
Cannot execute ODBC query" — komunikat Zabbix - "
[SQL_ERROR]" — kod zwrotny ODBC - "
[42601]" — SQLState - "
[7]" — natywny kod błędu - "
[ERROR: syntax error at or near ";"; Error while executing the query]" — natywny komunikat błędu
Należy pamiętać, że długość komunikatu o błędzie jest ograniczona do 2048 bajtów, więc komunikat może zostać obcięty.
Jeśli istnieje więcej niż jeden rekord diagnostyczny ODBC, Zabbix próbuje je połączyć (oddzielając je znakiem |) w zakresie dozwolonym przez limit długości.