Problem jest następujący: jest wiele serwerów, każdy z nich ma uruchomione kilka usług. Potencjalnie, niektóre z nich mogą raz na jakiś czas zrobić coś brzydkiego i się wywalić / zeżreć całą pamięć / przestać odpowiadać itd.
W takiej sytuacji chciałbym: ubić, zrestartować, powiadomić admina o problemie.
Ja z reguły używam monita. Bez problemu można podpiąć typowe dla rubiego zabawki jak delayed job. Tak samo sphinx czy inne serwery.
Kiedyś potrzebowałem trochę bardziej zaawansowanego sprawdzania kiedy ubić proces i używałem Goda. Jakiś czas temu wycieki pamięci zostały poprawione. Podobno dalej czasami występują problemy z pamięcią, ale raczej mniejsze.
Jako rozwiązanie tego problemu miałem w cronie ubijanie goda raz na dzień
Monit niezbyt dobrze radzi sobie z nginxem, tzn. monitoruje tylko ten główny proces, ale nie widzę w ogóle passengera (bo ma zmieniający się pid). Da się to jakoś zorganizować?
check process apache with pidfile /var/pids/apache.pid
start program = “/etc/init.d/apache2 start”
stop program = “/etc/init.d/apache2 stop”
if failed host example.org port 80 protocol http
with timeout 10 seconds for 3 cycles
then restart
Nie sprawdzi to oczywiście konkretnie passengera, ale jeżeli host padnie, to zrestartuje się cały apache, co i tak często jest jedynym sposobem na podniesienie passengera.
hmmm, z Munina nikt (poza mna) nie korzysta ? Masa wtyczek i jest w stanie powiadomic zanim sie cos zwali, w razie jesli Ci czego zabraknie kawalek jezyka skryptowego i masz co chcesz.
Ja korzystałem trochę z Munina, ale bardziej na zasadzie zbierania statystyk niż bieżącego monitorowania. W porównaniu z godem i Monitem wydaje się być koszmarnie mało intuicyjny w konfiguracji.
Do rozważania polecam też Inspeqtor. Wydaje się bardziej poukladany/cywilizowany niż monit, ale jeszcze nie sprawdziłem osobiście, więc nie rekomenduję.