Monitoring baz danych w Zabbixie
Monitoring to nierozłączna część życia w świecie IT. Monitorować można wiele podzespołów w warstwie fizycznej (hardware), jak i aplikacyjnej (software). Dzisiaj przedstawię w jaki sposób można obserwować dane zawarte w relacyjnych bazach danych, ponieważ błędy w aplikacjach mogą być spowodowane nie tylko brakami w połączeniu z bazą, ale również z nieaktualnymi już danymi, które są zawarte w tabelach.
Z tego artykułu dowiesz się:
Jakie są skutki nieaktualnych danych w bazie
Wyobraźmy sobie taką sytuację. Do banku przychodzi Klient, który chce wypłacić pieniądze ze swojego konta. Aplikacja, z której korzysta Pani „w okienku” jest połączona z bazą danych, która jest wykorzystywana również przez inne aplikacje. W momencie próby wykonania transakcji na tabele w bazie zostały nałożone tzw. „Locki”, co oznacza że można wyświetlić dane, lecz nie można ich zaktualizować. Spowodowane jest to tym, że dany rekord został wcześniej wykorzystany przez inną aplikację. Pieniądze klientowi zostają wypłacone, lecz w bazie nie księguje się informacja, że pieniądze zostały pobrane. Z perspektywy konsumenta sytuacja idealna – pieniądze za darmo. Z perspektywy banku – realna awaria i straty. Na szczęście można się przed taką sytuacją odpowiednio szybko zabezpieczyć. Poprzez monitoring bazy danych.
Jak korzystać z silników ODBC
System monitoringu Zabbix pozwala na skorzystanie z silników ODBC (Open DataBase Connectivity) różnych baz danych, takich jak MSSQL, MySQL, Oracle DB2, PostgreSQL i inne. Jak to działa? Z poziomu serwera Zabbix wysyłamy zapytanie bazodanowe (odpowiednie do typu bazy), które zwrócić ma nam daną zawartą w bazie danych.
Jak przygotować serwer Zabbix
Zaprezentuję przygotowanie serwera Zabbixa na przykładzie systemu CentOS i mySQLowej bazy danych Zabbixa. Do monitorowania bazy danych trzeba odpowiednio przygotować środowisko, na którym pracuje serwer Zabbix. Należy zainstalować silnik MySQL ODBC do bazy danych. Pozwolą na to polecenia:
# yum install unixODBC unixODBC-devel -y
# yum install mysql-connector-odbc -y
Po wykonaniu powyższych poleceń pojawi się plik w lokalizacji /etc o nazwie odbcinst.ini. Współgra z nim plik odbc.ini, który należy wytworzyć samodzielnie.
- /etc/odbcinst.ini – Plik konfiguracyjny silników baz danych
- /etc/odbc.ini – Plik konfiguracyjny do połączenia z bazą danych, wskazujący na silnik ODBC z pliku /etc/odbcinst.ini
Po zainstalowaniu paczki mysql-connector-odbc plik odbcinst.ini automatycznie uzupełnia się potrzebnymi danymi w następujący sposób:
[MySQL] # DSN określający sterownik silnika
Description=opis # Opis silnika
Driver= /usr/lib/libmyidbc5.so # Lokalizacja sterownika 32-bitowego
Setup= /usr/lib/libodbcmyS.so # Setup sterownika 32-bitowego
Driver64= /usr/lib64/libmyodbc5.so # Lokalizacja sterownika 64-bitowego
Setup64= /usr/lib64/libodbcmyS.so # Setup sterownika 64-bitowego
FileUsage=1 # Wpis informujący o zmianie w pliku konfiguracyjnym
Posiadając tak skonfigurowany plik odbcinst.ini możemy wytworzyć plik do łączenia się z bazami danych wykorzystując DSN wpisany w plik odbcinst.ini.
# touch /etc/odbc.ini
Wytworzony plik należy uzupełnić poniższymi danymi:
[BazaDanych] # DSN pliku odbc.ini
Description= Opis, której bazy dotyczy # Opcjonalny opis
Driver= MySQL # DSN z pliku /etc/odbcinst.ini
Server=127.0.0.1 # Adres IP/DNS serwera bazy danych
Port=3306 # Port do bazy danych
User=zabbix # Nazwa użytkownika w bazie danych
Password=zabbix123 # Hasło do bazy danych
Database=zabbix # Nazwa bazy danych
Serwer został skonfigurowany. Zabbix ma teraz możliwość korzystania z silników ODBC. Następnie skonfigurować można monitoring.
Jak wytworzyć monitoring
Do celów testowych wytworzymy monitoring ilości wszystkich wyzwalaczy w naszym własnym systemie Zabbix. Takie dane znajdują się w tabeli triggers w bazie zabbix, do której mamy dostęp dzięki plikowi odbc.ini skonfigurowanemu powyżej. Do zrealizowania takiego zadania musimy wytworzyć odpowiednie zapytanie SQL, zwracające nam tylko jedną daną dowolnego typu (liczba całkowita, liczba zmiennoprzecinkowa, tekst). W naszym przypadku to będzie funkcja zliczająca Count.
W bazie danych zapisanych jest 543 wyzwalaczy. Tworzymy więc pozycje podpięte do Hosta „Localhost” z takimi informacjami jak:
- Nazwa: Ilość wyzwalaczy w systemie Zabbix
- Typ: Monitor bazy danych
- Klucz: db.odbc.select[ilosc_wyzwalaczy,BazaDanych]
- Zapytanie SQL: select count(triggerid) from triggers;
- Typ informacji: Numerycznie (liczba całkowita bez znaku)
- Interwał aktualizacji: 5m
- Okres przechowywania historii: 30d
- Okres przechowywania trendu: 90d
- Aplikacje: Z bazy danych
W kluczu pierwszym parametrem jest dowolny wpis – aby zachować unikatowość nazwy klucza. Natomiast drugi parametr to DSN wpisany w plik odbc.ini. Dzięki temu Zabbix wie, z którego silnika bazy danych ma skorzystać. Ważne jest, aby nie odpytywać zbyt często bazy danych i jej tym samym nie przeciążyć. Zapytania co 5 min. powinny być wystarczające.
Po zatwierdzeniu wykonania powyższej pozycji, w niedługim czasie na hoście „Localhost” w zakładce „Ostatnie Dane” powinny pojawić się dane z naszej pozycji odpytujące bezpośrednio bazę danych z wartości w niej zawartych.
Monitoring baz danych jest wykorzystywany powszechnie, również w naszej usłudze rabbIT, bezpośrednio u nas i u naszych Klientów. Powyżej zaprezentowany został koncept w jaki sposób można monitorować środowisko bazodanowe. Problemów, sytuacji i koncepcji jest wiele – np. odpytywanie bazy danych pod kątem rekordów, czy nawet pod kątem weryfikacji zadań tzw. „Jobów” bazodanowych, czy zostały wykonane pomyślnie i zasilają aplikacje. A wszystko dzięki zaawansowanemu monitoringowi poleceń języka SQL.
W Aplitt mierzymy się z tym na co dzień. Wykonujemy takie zadania powszechnie i systematycznie, więc jeśli chcesz zapobiec problemom z bazami danych w Twojej organizacji, skontaktuj się z nami.
Podziel się treścią: