Dzisiejszy post będzie o tym, jak należy poprawnie konfigurować Icingę2 w celu monitorowania stanu hosta (UP/DOWN). Temat niby trywialny i powinno działać od razu, ale jak się okazuje – a poświęciłem na jego zgłębienie kilka dobrych godzin – dokumentacja nie jest wystarczająco precyzyjna, a podobnych pytań o to jak to poprawnie skonfigurować znalazłem w sieci mnóstwo (niestety bez rozwiązań).
Nakreślmy więc problem:
- Mamy Icinga2 w konfiguracji z wieloma strefami, jedna strefa master i po jednej strefie na każdego hosta.
- Korzystamy z podejścia top-down, zalecanego w dokumentacji Icingi2, a więc konfiguracja jest synchronizowana z mastera do poszczególnych hostów obsługujących każdy swoją strefę.
- W ramach definicji obiektu danego hosta używamy cluster-zone jako check_command celem zbadania połączenia z danej strefy do mastera – choćby dlatego, że poszczególne hosty są za firewallem i nie możemy ich bezpośrednio pingować z mastera.
Co więc może pójść nie tak?
Otóż okazuje się, że taka (aż się prosi, aby dopisać „domyślna”) konfiguracja się nie sprawdzi tzn. jeśli nastąpi awaria hosta to Icinga2 nie zareaguje wywołując alert – jedyną reakcją będzie oznaczenie checka cluster-zone jako late check. To jednak nie powoduje alertów.
Dzieje się tak dlatego, że domyślne w konfiguracji top-down takowy check wykonuje się… na hoście, którego badamy! Stąd, gdy host ulega awarii to nie jest w stanie zgłosić rezultatu checka do mastera.
Aby uzyskać poprawne zachowanie czyli alert w momencie, gdy host ulega awarii musimy ręcznie wymusić wywołanie checka cluster-zone na… masterze. W praktyce sprowadza się to do dodania następującej konfiguracji (czy to w szablonie hosta, czy też bezpośrednio w obiekcie hosta):
check_command = "cluster-zone" vars.cluster_zone = name zone = "master"
Gdzie master to oczywiście nazwa naszej strefy mastera (może być różna, w zależności od konfiguracji).
Jednak to nie wszystko. Ustawienie strefy wyłącznie w konfiguracji szablonu hosta powoduje, że wszystkie usługi od niego zależne… też wykonają się na masterze! Konieczna jest więc modyfikacja szablonu usługi i ustawienie w niej:
zone = host.name
Powyższa konfiguracja daje nam następujące efekty:
- Wszystkie checki usług będą się wykonywała tak jak powinny, czyli na wskazanym hoście.
- Checki związane ze sprawdzeniem czy host jest UP wykonają się na masterze, co sprawi że:
- W przypadku awarii hosta master poprawnie zgłosi ten fakt i umożliwi powiadomienia.
Mam nadzieję, że tym wpisem oszczędziłem komuś czasu na rozwiązywanie podobnych problemów :)
Dodaj komentarz