2012-05-18 17 views
5

Jak powinienem zarządzać opiekunem daemontools?Jak nadzorować serwer internetowy za pomocą daemontools?

Zacząłem korzystać z daemontools D. J. Bernsteinów, aby niektóre procesy działały i działają poprawnie. Ale teraz muszę monitorować kilka dodatkowych warunków dotyczących tych procesów i nie udało mi się znaleźć dobrych informacji, jak to zrobić.

Mój scenariusz jest taki, że mam pewne procesy uruchomione dla aplikacji internetowej (wirtualne maszyny wirtualne pharo smalltalk) i odpowiadają one http, każdy w swoim porcie (to dla loadbalance). Chciałbym w jakiś sposób pingować te, aby sprawdzić, czy działają nie tylko w odpowiedzi na żądania http. Jeśli nie reagują w określony sposób na prośbę o więcej niż 30 sekund, powinny być traktowane jako awarie i po prostu zostać ponownie uruchomione.

Czy jest to możliwe nawet w przypadku daemouchera? jeśli tak, jak mam napisać ten skrypt i gdzie go umieścić? lub gdzie jest dokumentacja na ten temat?

Odpowiedz

6

Najprostszym rozwiązaniem jest utworzenie kolejnego zadania Daemontool ze skryptem, który śpi przez 30 sekund, a następnie testy na obecność usługi (na przykład za pomocą wget lub curl). Jeśli usługa nie odpowiada na czas, możesz ponownie uruchomić usługę (svc -t yourapp) i/lub wysłać powiadomienie. Run-skrypt z nowej usługi może wyglądać tak proste, jak to:

#!/bin/sh 
sleep 30 
if ! wget --quiet --timeout=5 --delete-after "http://yourapp.com/" ; then 
    svc -t /etc/service/yourapp 
fi 

mam również dobre doświadczenia z narzędziami, takimi jak Munin. Ponownie musisz dostarczyć skrypt, który dostarcza informacji o stanie twojego obrazu. Jeśli skonfigurujesz swoje obrazy za pomocą usługi REST, możesz nawet dostarczyć naprawdę interesujące dane, takie jak aktywne sesje, nieaktywna sesja, parametry gc, zużycie pamięci, statystyki bazy danych, ... Narzędzie następnie rysuje ładne wykresy w czasie i pozwala określić granice otrzymywać powiadomienia, gdy coś źle się układa.

+0

Thanx. ale czy nie ma sposobu, aby to zrobić w samym nadzorze? – pauel

+0

Tak, zobacz pierwszy akapit mojej odpowiedzi. –

+0

Tak, mam to. po prostu myślałem, że przełożony, który uruchamia demona, może to zrobić w jakikolwiek sposób. W każdym razie twoje rozwiązanie bardzo mi pomaga. Wielkie dzięki – pauel

3

Aby wykryć, czy usługa jest czuły, można użyć zwijania (idealne dopasowanie dla HTTP i wiersza polecenia/skrypty powłoki)

curl --connect-timeout 10 http://8.8.8.8 
curl: (28) connect() timed out! 

i można napisać bardziej wyrafinowanych rzeczy, jak sprawdzenie, czy odpowiedzi to 200 (OK) itd.

Powiązane problemy