
Prezentacja Darii Wilkowej dla Zabbix Meetup Online
Chcę przedstawić Wam narzędzie do monitorowania PostgreSQL i systemu operacyjnego, które rozwijamy w naszej firmie z wykorzystaniem Zabbix.
Od dawna wybraliśmy Zabbix jako narzędzie do monitorowania, ponieważ jest to platforma z otwartym kodem źródłowym, wspierana przez aktywną społeczność, która cieszy się dużą popularnością w Rosji.
Stworzyliśmy aktywnego agenta — Mamonsu, który zapewnia bardziej elastyczne monitorowanie, niż standardowe narzędzia na tamten czas oraz umożliwia zbieranie metryk i ich wysyłanie na Zabbix Server. W naszej firmie Mamonsu jest wykorzystywane podczas audytów.
Mamonsu
Mamonsu to aktywny agent (Zabbix Trapper) do monitorowania PostgreSQL i systemu operacyjnego. Mamonsu (napisany w Pythonie) pozwala na skonfigurowanie parametrów monitorowania PostgreSQL i systemu operacyjnego w pięć minut.
Mamonsu ma dodatkowe narzędzia:
- mamonsu tune — komenda, która edytuje parametry konfiguracji w pliku konfiguracyjnym PostgreSQL na maszynie, na której zainstalowany jest agent Mamonsu.
- mamonsu report — komenda, która generuje odpowiedzi dotyczące systemu operacyjnego i PostgreSQL.
Mamonsu jest instalowane na serwerze DBMS, zbiera informacje, kompiluje je w JSON, który wysyła do wizualizacji na Zabbix Server, gdzie powinien być szablon dla jego metryk.

Schema działania Mamonsu
Możliwości Mamonsu
- Efektywna praca z PostgreSQL. Stałe połączenie z PostgreSQL to główna zaleta Mamonsu. W tym przypadku maksymalna liczba połączeń odpowiada maksymalnej liczbie baz danych, do których się łączy.
- Rozszerzalność. Mamonsu to w pełni "pluginowy" agent, a dzięki ustalonej strukturze każdego pluginu i względnej prostoty Pythona, łatwo można nauczyć się pisać nowe lub edytować standardowe pluginy, czyli parametry zbierania metryk.
- Szeroki zakres metryk do monitorowania dla PostgreSQL, w tym metryki specyficznych rozszerzeń.
- Szybkie uruchomienie, dostępność "out of the box".
- Eksport szablonów i plików konfiguracyjnych, a także załadunek na Zabbix Server.
- Wieloplatformowość, co jest ważne dla naszych klientów, którzy korzystają z różnych dystrybucji Linux, w tym krajowych.
- Licencja BSD-clause.
Obecnie oferujemy wiele pluginów i w każdej kolejnej wersji staramy się dodać coś nowego.
- 14 pluginów dla PostgreSQL,
- 8 wtyczek dla systemu Linux,
- 4 wtyczki dla systemu Windows.
Mamonsu zbiera ponad 110 metryk PostgreSQL i systemów operacyjnych:
- 70 metryk PostgreSQL,
- 40 metryk systemu Linux,
- 8 metryk systemu Windows.
Główne metryki obejmują dostępność bazy danych, liczbę połączeń, rozmiar bazy danych, punkty kontrolne, prędkość odczytu/zapisu, blokady, liczbę procesów autovacuum oraz prędkość generowania WAL. Pełna lista dostępnych metryk oraz szczegółowy opis wszystkich narzędzi są dostępne na stronie GitHub.

Lista dostępnych metryk na stronie GitHub
Uruchomienie Mamonsu w 5 minut
Konfiguracja monitorowania PostgreSQL i systemu operacyjnego za pomocą Mamonsu zajmuje tylko 5 minut i składa się z 5 prostych kroków.
- Instalacja Mamonsu. Mamonsu można zbudować z kodu źródłowego lub skorzystać z dostępnych pakietów.
$ git clone ... && cd mamonsu && python setup.py
build && python setup.py install
- Konfiguracja połączeń. Należy podać parametry połączenia z PostgreSQL i serwerem Zabbix w pliku agent.conf.
/etc/mamonsu/agent.conf
- Eksport szablonu do serwera Zabbix.
$ mamonsu zabbix template export
/usr/share/mamonsu/example.xml
- Dodanie węzła sieciowego do serwera Zabbix. Eksportowany szablon zostanie automatycznie przypisany do nowego węzła sieciowego na serwerze Zabbix.
$ mamonsu zabbix host create mamonsu-demo
- Uruchomienie.
$ service mamonsu start
Kierunki rozwoju Mamonsu
W ramach rozwoju Mamonsu planujemy rozwijać metryki i tworzyć nowe wtyczki, na przykład wtyczkę do monitorowania rozmiarów poszczególnych tabel. Planujemy również poprawić i stworzyć dodatkowe narzędzia, a także rozszerzyć możliwości autokonfiguracji poprzez komendę mamonsu tune.
Moduł monitorowania PostgreSQL w składzie Zabbix Agent 2
Do połączenia z PostgreSQL używany jest szybki i popularny sterownik (Sterownik PG i zestaw narzędzi dla Go).
Obecnie używamy dwóch interfejsów: Exportera, wywołującego handler po kluczu, oraz Konfiguratora Zabbix Agent 2, który odczytuje i sprawdza parametry połączenia z serwerem, określone w pliku konfiguracyjnym.
Postaraliśmy się zoptymalizować działanie bazy danych, grupując metryki i korzystając z handlera dla metryk oraz grup metryk, a także stosując grupy metryk w formacie JSON jako zmienne zależne (dependency items) i niskopoziomowe wykrywanie (discovery rules).
Główne możliwości
- utrzymanie stałego połączenia z PostgreSQL między sprawdzeniami;
- wsparcie elastycznych interwałów zapytań;
- kompatybilność z wersjami PostgreSQL od 10 i serwerem Zabbix od wersji 4.4;
- możliwość jednoczesnego podłączania i monitorowania kilku instancji PostgreSQL dzięki temu, że Zabbix Agent 2 pozwala tworzyć wiele sesji.
Poziomy parametrów połączenia z PostgreSQL
Dostępne są trzy poziomy parametrów połączenia z PostgreSQL, tj. zadań i ustawień:
- Globalne,
- Sesje,
- Makarony.
Parametry Globalne definiowane są na poziomie agenta, a parametry Sesji i Makr definiują parametry połączenia z bazą.
Parametry połączenia z PostgreSQL — Sesje definiowane są w pliku zabbix_agent2.conf.

Parametry połączenia z PostgreSQL — Sesje
- Po słowie kluczowym Sesje podaje się unikalną nazwę sesji, która musi być wskazana w kluczu (szablonie).
- Ustawienia URI i Nazwa Użytkownika są obowiązkowe dla każdej sesji.
- Jeśli nazwa bazy nie jest określona, używana jest ogólna domyślna nazwa bazy dla wszystkich sesji PostgreSQL, która również jest określona w pliku konfiguracyjnym.
- Parametry połączenia z PostgreSQL — Makr definiowane są w kluczu metryki w szablonie (analogicznie jak w Zabbix Agent 1), t.j. tworzone są w szablonie i następnie wskazywane jako parametry w kluczu. Przy tym kolejność makr jest ustalona, t.j. na przykład, URI zawsze podawane są na pierwszym miejscu.

Parametry połączenia z PostgreSQL — Makr
Moduł monitorowania PostgreSQL obejmuje już ponad 95 metryk, które pozwalają na szeroki zakres parametrów PostgreSQL, w tym:
- liczbę połączeń,
- rozmiar baz danych,
- archiwizację plików wal,
- punkty kontrolne,
- liczbę „rozrośniętych” tabel,
- status replikacji,
- opóźnienie replikacji.
Metryki PostgreSQL nie są informacyjne bez parametrów systemu operacyjnego. Jednak Zabbix Agent 2 potrafi już zbierać parametry systemu operacyjnego, więc aby uzyskać pełny obraz, wystarczy podłączyć do węzła sieci odpowiednie szablony.
Handler (obsługiwacz)
Handler (obsługiwacz) — główna jednostka modułu, w której wykonywane jest zapytanie i która umożliwia uzyskiwanie metryk.
Aby uzyskać prostą metrykę:
- Tworzymy plik do uzyskania nowej metryki:
zabbix/src/go/plugins/postgres/handler_uptime.go
- Podłączamy pakiet i wskazujemy unikalny klucz (klucze) metryk:

- Tworzymy handler (obsługiwacz) z zapytaniem, t.j. inicjujemy zmienną, w której będzie wynik:

- Wykonujemy zapytanie:

Należy sprawdzić zapytanie pod kątem błędów, po czym wynik zostanie przechwycony przez proces Zabbix Agent 2.
- Rejestrujemy klucz nowej metryki:

Po zarejestrowaniu metryki można na nowo skompilować agenta z nową metryką.
Moduł jest dostępny od Zabbix 5.0 na stronie . W tej wersji Zabbix parametry są ustawiane oddzielnie przez host i port. W wersji Zabbix 5.0.2, która wkrótce wyjdzie, parametry połączenia będą skompilowane w jeden URI.
Dziękuję za uwagę!
Przydatne linki
Źródło: habr.com
