Czy istnieją dobre techniki monitorowania zadań CRON w klastrze?
Zaczynamy używać crona do uruchamiania zadań w codziennych odstępach czasu. Kilka pomysłów na sprawdzenie informacji:
- Dodaj specjalną obsługę aplikacji, która rejestruje informacje w jakimś „świadomym sieci” miejscu, na przykład DB
- Zbuduj system plików dziennika, który okresowo przesyła dziennik cron do centralnego punktu w celu przetwarzania / wysyłania zapytań (wraz z innymi możliwymi plikami dziennika)
Zastanawiam się, czy ludzie odnieśli sukces w robieniu rzeczy osobno dla crona w porównaniu do innych rzeczy, czy też zadania zostały całkowicie zintegrowane z innym podejściem. Skłaniam się ku # 2, ale chciałbym wiedzieć, co bardziej doświadczeni ludzie mogą wypróbować.
monitoring
cron
Tristan Juricek
źródło
źródło
Odpowiedzi:
Oprócz innych odpowiedzi:
Używamy pierwszy ułatwić Nagios ( Icinga ), aby sprawdzić, na przykład, jeśli ostatni napisany timestamp jest starsze niż n godzin (plus cokolwiek logika co potrzeba) - wiemy, coś poszło nie tak.
źródło
Moje wspólne podejście to:
źródło
/dev/null
|| echo "service $service is FUBAR"
W dodatku do powyższego:
źródło
Istnieje kilka technik monitorowania cronjobs.
Aby otrzymywać powiadomienia o niepowodzeniach kolesia:
System, który proponuje się zalogować do miejsca „rozpoznającego sieć”, brzmi jak syslog . syslog zapewnia prostą metodę tworzenia dzienników, zwykle zarządza plikami takimi jak / var / log / messages. Możesz dokonać podstawowych dostosowań, takich jak wybór plików, które będą otrzymywać komunikaty dziennika.
Syslog można uruchomić w trybie rozpoznawania sieci. Na przykład, możesz go skonfigurować tak, aby slave mógł zalogować się do mastera:
W przypadku dystrybucji opartej na systemie Red Hat przykładowa konfiguracja wygląda następująco:
(Pierwsza linia konfiguracyjna przekierowuje powiadomienia local1. * Do dziennika @ 192.168.1.3 („master”). Flaga -r drugiej linii SYSLOGD_OPIONS włącza obsługę sieci. Wreszcie trzecia linia konfiguracji kieruje local1. * Wiadomości otrzymane na „master” do pliku).
Podejście syslog jest lepsze do rejestrowania tylko błędów / informacji. Pliki dziennika mają mniejszą widoczność niż wiadomości e-mail, więc prawdopodobnie nie będziesz przeglądać dzienników, chyba że coś pójdzie nie tak.
Jeśli zdecydujesz się wybrać trasę w stylu syslog, rozważ także syslog-ng: http://freshmeat.net/projects/syslog-ng/ .
Oczywiście, możesz uzyskać najlepsze z obu technik, używając obu. Na przykład syslog'owanie zarówno niepowodzeń, jak i sukcesów oraz wysyłanie maili w razie awarii.
źródło
Podałem podobną odpowiedź na pytanie na StackOverflow ( /programming/21025495/system-for-monitoring-cron-jobs-and-automated-tasks )
Cronitor ( https://cronitor.io ) był narzędziem, które zbudowałem właśnie do tego celu. Zasadniczo sprowadza się do bycia śledzącym sygnałem nawigacyjnym, który wykorzystuje żądania HTTP jako ping.
Jednak jedną z potrzeb, o której wspominał PO w swoim komentarzu, jest konieczność poinformowania, gdy zadanie zacznie trwać zbyt długo.
Miałem tę samą potrzebę i stwierdziłem, że podobne narzędzia nie obsługują łatwo tego rodzaju monitorowania. Cronitor rozwiązuje ten problem, umożliwiając opcjonalne uruchomienie zdarzenia początkowego i końcowego w celu śledzenia czasu trwania.
Śledzenie czasu trwania było dla mnie koniecznością, ponieważ miałem cronjob, który był zaplanowany co godzinę, ale z czasem zacząłem zajmować ponad godzinę. Mam nadzieję, że uznasz to za przydatne!
źródło
W chwili pisania tego tekstu jest wciąż w fazie rozwoju, ale zachęcam do zapoznania się z https://github.com/jamesrwhite/minicron . Został opracowany w celu rozwiązania opisanych problemów. Po niewielkiej modyfikacji uruchomionego polecenia może on rejestrować stan wyjściowy i wyjściowy zadań i wysyła te dane z powrotem do centralnego serwera w czasie rzeczywistym oraz może wysyłać powiadomienia za pośrednictwem poczty elektronicznej, SMS i PagerDuty, gdy zadanie nie powiedzie się (status wyjścia> 0) lub nie wykonuje się, kiedy powinien.
Oświadczenie: Jestem programistą, który nad tym pracuje.
źródło
To wygląda jak klasyczny przypadek użycia AlertGrid .
Nie wymaga instalacji, wszystko, co musisz zrobić, aby skorzystać z tego narzędzia, to:
execution_time
!jeśli my_job nie odpowiedział w ciągu X minut (w twoim przypadku godziny) -> wyślij SMS do administratora
lub
jeśli czas wykonania> 60 sekund -> wyślij e-mail do zainteresowanych osób
Właściwie to wszystko. Możesz zarządzać regułami powiadomień za pomocą przyjemnego edytora wizualnego. Nie musisz modyfikować kodu źródłowego ani niektórych plików konfiguracyjnych, jeśli coś się zmieniło. Jest to scentralizowane rozwiązanie, dzięki czemu możesz korzystać z zarządzania regułami z jednego miejsca.
Mam nadzieję, że to komuś pomoże. Dostępne jest bezpłatne konto, dzięki czemu możesz testować i korzystać z AlertGrid, jeśli jesteś zainteresowany. Jestem jednym z członków zespołu AlertGrid - nie wahaj się zapytać, czy masz jakieś pytania.
źródło
Twoje zadania cron są już zarejestrowane przez syslog. Dane te można wysłać do centralnego serwera za pomocą syslogd, innej standardowej usługi.
http://www.debuntu.org/how-to-remote-syslog-logging-on-debian-and-ubuntu/ zawiera szczegółowe informacje na temat konfiguracji.
źródło
używam http://cronrat.com po prostu dołączam && curl „... twój adres url cronrat” do twoich zadań cron. Najbardziej podoba mi się to, że nie musisz niczego konfigurować po utworzeniu konta początkowego. Każdy alert jest uruchamiany w momencie, gdy go używasz. dlatego mogę korzystać z zautomatyzowanych narzędzi, aby rozpocząć pracę, która jeszcze nie istnieje, w przeciwieństwie do niektórych usług, w których najpierw muszę skonfigurować pracę.
źródło
Stworzyłem Power Crona po tych właśnie potrzebach. Potrzebowałem scentralizowanego widoku moich zadań cron i pojęcia zależności między zadaniami różnych członków klastra.
Potrzebowałem też więcej informacji niż to, co mogłem znaleźć w logach, i dodałem profilowanie zadań.
źródło
W tym celu zbudowaliśmy PushMon, http://www.pushmon.com . Powiedz, że Twoja codzienna praca zaczyna się o 3 rano i zwykle kończy się o 4 rano. Możesz ustawić harmonogram PushMon „do 4:00 każdego dnia”. Lub nieco bardziej zaawansowany harmonogram, taki jak „do 4:00 rano każdego dnia w ciągu 1 godziny”. Wszystko, co musisz zrobić, to „pingować” adres URL PushMon za każdym razem, gdy uruchamia się Twoje zadanie, i ostrzega o brakujących pingach. Jeśli wiesz na pewno, że wystąpił błąd, na przykład gdy wychwycisz wyjątek, którego nie możesz obsłużyć, możesz skorzystać z funkcji alertu na żądanie.
źródło
Healthchecks ( https://github.com/healthchecks/healthchecks/ ) to usługa i pulpit stworzony specjalnie do monitorowania zadań cron. Jest używany w produkcji, jest utrzymywany i akceptuje wkłady kodu.
Działa podobnie jak Cronitor, Dead Man's Snitch i przyjaciele: ustawiasz swoje zadanie cron, aby przed zakończeniem wysyłać żądanie HTTP / HTTPS na specjalny, unikalny adres URL. Kontrola zdrowia odbiera i rejestruje te pingi. Ciągle sprawdza, czy pingi docierają w oczekiwanych odstępach czasu. Po wykryciu problemu wysyła powiadomienie. Obsługiwane metody powiadomień to e-mail, haki internetowe, Slack, Telegram, Discord, SMS, Pushover, Pusbullet, PagerDuty, PagerTree, HipChat, VictorOps, OpsGenie.
Możesz to wszystko skonfigurować i hostować samodzielnie, ale, podobnie jak w przypadku każdej usługi internetowej, konfiguracja nazwy domeny, certyfikatu, konfiguracja odwrotnego proxy HTTP, konfiguracja kopii zapasowych baz danych itp. Jest dość prosta. bieganie polega na użyciu tej wersji dostosowanej do Heroku: https://github.com/iphoting/healthchecks . Znam ludzi, którzy sami prowadzą ten projekt i używają go do monitorowania setek usług.
Oświadczenie: Jestem autorem i prowadzę Healthchecks jako usługę hostowaną na https://healthchecks.io
źródło