Techniki monitorowania zadań CRON?


22

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:

  1. Dodaj specjalną obsługę aplikacji, która rejestruje informacje w jakimś „świadomym sieci” miejscu, na przykład DB
  2. 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ć.


czy obawiasz się, że cronjobs nie działają? czy pytasz o monitorowanie „statusu” przebiegu pracy?
ericslaw

1
W większości nie zawiedli. Ale niektóre prace zajmują dużo czasu i możemy chcieć zdobyć informacje, takie jak „ups, to trwa zbyt długo”.
Tristan Juricek

Odpowiedzi:


16

Oprócz innych odpowiedzi:

  • pozwól, aby zadanie zapisało znacznik czasu do pliku, gdy zakończy się wraz z wartością zwracaną z rzeczywistego zadania
  • propaguj wartość zwracaną z powrotem do pierwotnego obiektu wywołującego

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.


Chociaż lubię odpowiedzi wszystkich - wiele się nauczyłem - zupełnie zapomniałem o naszym monitorowaniu Nagios. Jest to świetne rozwiązanie do długich zadań, o które naprawdę się martwię. Dzięki.
Tristan Juricek

16

Moje wspólne podejście to:

  • Nie stdout, gdy twoja aplikacja cron'ed zakończy się pomyślnie.
  • Nie przesyłaj żadnych danych wyjściowych do / dev / null.
  • Wykonuj znaczący wynik stderr, gdy coś pójdzie nie tak.
  • Ustaw adres $ MAILTO w crontab, aby wysłać dane wyjściowe błędu do wymaganego zespołu.

A jeśli naprawdę trzeba /dev/null|| echo "service $service is FUBAR"
potokować

4

W dodatku do powyższego:

  • Zadzwoń do „logger” wraz z pisaniem do stderr, gdy coś pójdzie nie tak. Syslog należy skonfigurować tak, aby dodatkowo przekazywał do hosta centralnego, czyli „loghost”. (Logger domyślnie korzysta z funkcji „user.notice”, ale możesz to zmienić).

1
Podoba mi się ten pomysł ... chociaż crond już loguje się do syslog (być może poprzez config param), więc użycie loggera nie jest ściśle wymagane dla tego podejścia.
ericslaw

4

Istnieje kilka technik monitorowania cronjobs.

Aby otrzymywać powiadomienia o niepowodzeniach kolesia:

  • Użyj standardowej funkcji cron MAILTO =. Jeśli cronjob produkuje dane wyjściowe na STDERR, zostaną one wysłane na wybrany adres.
  • Aby śledzić i radzić sobie z wiadomościami Cron, możesz skierować je do systemu biletów.

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:

[root@slave ~]#  echo "hello world from slave" | logger -p local1.info

[root@master ~]# tail /var/log/myapp
Jun 29 13:07:01 192.168.1.2 logger: hello world from slave

W przypadku dystrybucji opartej na systemie Red Hat przykładowa konfiguracja wygląda następująco:

[root@slave ~]# cat /etc/syslog.conf | grep local1
local1.*                                                @192.168.1.3

[root@master ~]# cat /etc/sysconfig/syslog | grep SYSLOGD_OPTIONS
SYSLOGD_OPTIONS="-m 0 -r"

[root@master ~]# cat /etc/syslog.conf | grep local
local1.* /var/log/myapp

(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.


Dzięki za odpowiedź -> Jestem programistą, co czyni mnie trochę nowicjuszem sysadmin. Nie byłem nawet świadomy możliwości sieciowych syslog.
Tristan Juricek

3

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!


2

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.


0

To wygląda jak klasyczny przypadek użycia AlertGrid .

Nie wymaga instalacji, wszystko, co musisz zrobić, aby skorzystać z tego narzędzia, to:

  1. wysyłaj Sygnał do AlertGrid za każdym razem, gdy Twoje zadanie cron zakończy pracę (można to zrobić za pomocą wyjątkowo prostego interfejsu API, sygnał jest tylko żądaniem HTTP). Możesz również wysłać niektóre parametry, takie jak execution_time!
  2. skonfiguruj reguły powiadomień, takie jak następujące:

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.



0

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ę.


Byłem podekscytowany czytaniem o cronracie - prosty i darmowy. Buuuuut Nie wiem, jak się zarejestrować. Czy ta usługa jest martwa?
rinogo

0

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ń.


0

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.


0

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.