Jest sobie jakiś monitoring - powiedzmy oparty o Nagiosa. Bada on pewien system. Niezależnie od tego istnieje drugi monitoring badający inne aspekty systemu. I trzeci/czwarty... Do tego jeszcze logi z aplikacji które mogą wskazywać że coś nie działa prawidłowo/za chwilę się wysypie.
Jedno zdarzenie w systemie - wygeneruje na każdym z monitoringów jakieś alarmy. Np przy systemie gdzie za LB swoją serwery aplikacyjne z Apachem, pod nimi uruchomione przez fcgi jakieś aplikacje korzystające z osobnych instancji memcache - w sytuacji awarii serwera z memcache spowoduje wygenerowanie alarmów:
- awaria serwera (cała lista alarmów, poczynając od niedostępności dysków, aż po brak odpowiedzi na ping),
- awaria memcache,
- awaria aplikacji fcgi,
- błędy na apache,
- wyłączenie na LB niesprawnego serwera.
Klient nie zauważy przerwy, jednak alarmy wygenerują dużo powiadomień.
W sytuacji gdyby wszystko było zapięte do jednego nagiosa - można by to jakoś rozwiązać za pomocą service dependencies.
Jak jednak ogarnąć temat alarmów w sytuacji wielu różnych monitoringów?
Jakiś centralny system który by na podstawie jakiś kryteriów określał ważność alarmu i podejmował decyzję czy budzić kogoś w nocy, czy nie?
Problem jest o tyle skomplikowany ze czasami ciężko określić wagę jakiegoś zdarzenia - awaria serwera z memcache, tudzież jednego z klastrów mongo nie spowoduje niedostępności usług. Ale jak jeden węzeł przestanie być dostępny z powodu awarii memcache, inny z powodu awarii mongo, to trzeci węzeł może już nie obsłużyć całego ruchu.