Najlepsze praktyki monitorowania aplikacji internetowych [zamknięte]

Kończymy naszą aplikację internetową i planujemy jej wdrożenie. Bardzo ważnym aspektem wdrożenia do produkcji jest monitorowanie stanu systemu. Posiadanie niewielkiego zespołu programistów / wsparcia sprawia, że bardzo ważne jest, abyśmy otrzymywali Wczesne powiadomienia o potencjalnych problemach i rozwiązywali je, zanim wpłyną one na użytkowników.

Korzystanie z Nagios szwy jak dobrą opcją, ale chciał uzyskać więcej opinii na temat, jakie są najlepsze narzędzia monitorowania / praktyki dla sieci aplikacja w ogóle i specjalnie dla aplikacji Django? Również mile widziane zalecenia dotyczące tego, co powinno być monitorowane oprócz oczywistego procesora, pamięci, miejsca na dysku, łączności z bazą danych.

Nasza aplikacja jest napisana w Django, działamy na Linuksie (Ubuntu) pod Apache + Fast CGI z bazą danych PostgreSQL.

EDIT Mamy całkowicie zwirtualizowane środowisko pod Linode.

EDIT Używamy django-logging więc mamy sposób oddzielenia informacji, błędów, kwestie krytyczne itp.

Author: umnik700, 2009-01-30

18 answers

Nagios jest dobry, dobrze, że może testy systemu (Selenium) działają regularnie.

Edit: Hyperic i Groundwork również wyglądają ciekawie.

Prawdopodobnie istnieje zestaw testowy, który może utrzymać ciśnienie testowania wszystko, jak również dla Ciebie. Nie pamiętam nazwy z czubka głowy, może ktoś wspomni o jednym poniżej.

Inne rzeczy, które lubię robić:

Najlepsze motto dla infrastruktury to zawsze naprawiać, wykrywać, naprawiać. Podnieś go, dotrzyj do korzenia i wylecz/zapobiegnij, jeśli możesz.

Ponieważ system istnieje na wielu poziomach, powinniśmy testować na wielu poziomach:

Edit: wszystkie błędy lub ostrzeżenia zostaną wysłane bezpośrednio do menedżera spraw za pośrednictwem poczty e-mail. W ten sposób możesz śledzić zdarzenia w jednym miejscu.

1) połączenie : monitoruj połączenie internetowe z serwera i z zewnątrz. Log this somewhere

2) Serwer : monitoruj wszystkie procesy, których potrzebujesz aby upewnić się, że działają i nie przypinają serwera. Użyj serwera HP lub czegoś podobnego z powiadomieniem o awarii sprzętu, które może wykonać z poziomu bios-u. Powiadom i zaloguj, jeśli są.

3) oprogramowanie : Zidentyfikuj kluczowe oprogramowanie, które zawsze musi być uruchomione. Ustaw poziomy wydajności, jeśli występują, a następnie monitoruj je. Nagios powinien w tym pomóc. W systemie windows może być nieco więcej. Gdy wystąpi wyjątek, powinieneś być w stanie uruchomić skrypt z niego do uruchom ponownie procesy automatycznie. Mój wymarzony system pozwala mi na interakcję z serwerami przez SMS, jeśli serwer widzi to jako wyjątek, na który muszę albo zezwolić, albo taki, który stanie się automatycznie, chyba że anuluję przez sms. Pewnego dnia..

4) zdalne Zasilanie : upewnij się, że funkcje zdalnego resetowania zasilania są w zasięgu ręki. Możesz zaplanować cotygodniowe restarty, jeśli kiedykolwiek używasz systemu windows do czegokolwiek.

5) testowanie logiki biznesowej : regularnie uruchamiane Skrypty testujące przepływ pracy systemu. Selenium może prawdopodobnie osiągnąć część z tego, ale lubię rejestrowanie wyników, jak również powiedzieć, że to działało w tym czasie i te pliki miały błędy. Jeśli to możliwe w dowolnym miejscu, system monitoruje się za pomocą skryptów.

6) Backups: Utwórz kopię zapasową, którą możesz ustawić i zapomnieć. Jeśli możesz przenosić rzeczy do maszyn wirtualnych, byłoby to idealne rozwiązanie, ponieważ możesz skalować, przenosić lub wdrażać dowolną część infrastruktury w dowolnym miejscu. Miałem przypadki, w których przeniosłem martwy serwer na mój laptop, pozwól mu działać w vmware, podczas gdy naprawiłem problem.

 36
Author: Jas Panesar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-27 18:52:48

Monitorowanie liczby połączeń z serwerem WWW i bazą danych to kolejna dobra rzecz do śledzenia. Są szanse, że jeśli ktoś strzeli przez dach, coś głoduje za zasobami, a strona zaraz padnie.

Upewnij się również, że masz regularne żądanie adresu URL, który jest rozsądnym end-to-end test systemu. Jeśli Twoja witryna obsługuje wyszukiwanie, poproś nagios o wykonanie wyszukiwania - powinno to upewnić się, że indeks wyszukiwania jest zdrowy, serwer WWW i baza danych serwer.

Upewnij się również, że aplikacje wysyłają Ci e-maile za każdym razem, gdy użytkownicy zobaczą błąd lub istnieje nieobsługiwany wyjątek. W ten sposób wiesz, jak aplikacja zawodzi w terenie.

 12
Author: Cameron Pope,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-30 16:55:13

Gdybym miał wybrać jeden rodzaj testów, to byłoby przetestowanie funkcjonalności systemu dla użytkownika końcowego. Ważną rzeczą do rozważenia jest użytkownik. Podczas testowania rzeczy takich jak dostępność bazy danych, Czas pracy serwera itp. są ważne, testowanie przepływu pracy przez system za pośrednictwem zdalnego systemu testowania interfejsu użytkownika obejmuje wszystkie te bazy. Jeśli wiesz, że krytyczne części systemu są dostępne dla użytkownika końcowego, to wiesz, że Twój system jest prolly Ok.

  1. Zidentyfikuj ważna praca-przepływy w systemie. na przykład, jeśli napisałeś witrynę eCommerce, możesz zidentyfikować przepływ pracy "wyszukaj produkt, umieść produkt w koszyku i kup produkt".
  2. ustal priorytet przepływu pracy i najpierw zbuduj testy o wyższym priorytecie. zawsze możesz dodać dodatkowe testy po wdrożeniu do produkcji.
  3. tworzenie testów interfejsu użytkownika przy użyciu jednej z dostępnych frameworków do testowania interfejsu użytkownika. istnieje wiele darmowych i komercyjnych testów interfejsu użytkownika frameworki, które mogą być uruchamiane w sposób zautomatyzowany. Najpierw zbuduj podstawowy zestaw testów, które dotyczą krytycznych przepływów pracy.
  4. Ustaw co najmniej jedną zdalną lokalizację, z której będą uruchamiane testy.Chcesz przetestować każdy aspekt swojego systemu, co oznacza testowanie go zdalnie. Czy połączenie internetowe jest włączone? Czy serwer WWW działa? Czy połączenie z serwerem bazy danych działa? Itd, itp. Jeśli testujesz zdalnie, upewniasz się, że system jest dostępny dla świata zewnętrznego, co oznacza, że najprawdopodobniej działa od końca do końca. Możesz również uruchomić te testy wewnętrznie, ale myślę, że kluczowe jest, aby uruchomić je zewnętrznie.
  5. Upewnij się, że Twoje rozwiązanie obejmuje zarówno raportowanie, jak i powiadamianie. Jeśli jeden z Twoich krytycznych testów przepływu pracy nie powiedzie się, chcesz, aby ktoś o tym wiedział, aby rozwiązać problem JAK NAJSZYBCIEJ. Jeśli zadanie niekrytyczne nie powiedzie się, być może chcesz raportować tylko po to, aby rozwiązać problemy poza pasmem.

To testowanie użytkownika końcowego nie powinno eliminować monitorowania system w Twoim centrum danych, ale chcę powtórzyć, że testowanie użytkownika końcowego jest najważniejszym rodzajem testowania, jaki możesz zrobić dla aplikacji internetowej.

 11
Author: Jason Jackson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-01 20:44:56

Ahhh, monitoring. Jak ja kocham ciebie i twoje wibracje o 3 nad ranem.

Zasadniczo potrzebujesz sposobu na sprawdzenie wewnętrznego stanu aplikacji, zarówno w określonym momencie, jak i na przestrzeni czasu(ten ostatni jest bardzo ważny dla wykrywania problemów, zanim wystąpią). Innym sposobem myślenia o tym jest gloryfikowane Testowanie jednostek.

Mamy własny (bardzo ładny) system monitorowania, więc nie mogę komentować Nagios ani innych aplikacji. Nasz przypadek użycia jest podobny do twojego (cgi app na apache).

  1. Dodaj logowanie.metoda typu monitor (), która zapisze informacje na dysk. Powinno to przynajmniej wspierać rejestrowanie prostych liczb i dictów liczb (skojarzenie klucz= > wartość może być niezwykle przydatne).
  2. mieć proces, który zeskrobuje dzienniki monitorowania i przechowuje je w bazie danych.
  3. mają proces, który pobiera informacje z bazy danych, sprawdza je pod kątem reguł i wysyła alerty. Należy pamiętać, że coś może być łuszczące. Just ponieważ masz 404 raz {[13] }nie oznacza, że aplikacja go w dół.
  4. masz sposób na wyciszenie alertów (bardzo przydatny do konserwacji lub do czytania wiadomości e-mail).

To wszystko dość wysoki poziom. Ważne jest to, że masz historię stanu aplikacji w czasie. Na podstawie tego możesz utworzyć reguły (być może tylko surowe zapytania sql, które umieścisz gdzieś w konfiguracji), które mówią: "Jeśli zapytania na sekundę podwoiły się, Wyślij alert z kropkami" lub " jeśli 50% odpowiedzi jest 404, wyślij alarm". To również zachwyca zarządzanie, ponieważ można oszacować każdy komentarz na temat tego, czy jego w górę, w dół, szybko, czy wolno.

Rzeczy do monitorowania obejmują (inni prawdopodobnie również o nich wspominali): status http, dostęp do portu, obciążenie http, obciążenie bazy danych, otwarte połączenie, opóźnienie zapytań, dostępność serwera (ssh, ping), zapytania na sekundę, liczba procesów roboczych, procent błędów, wskaźnik błędów.

Proste testy end-to-end są również bardzo przydatne, choć mogą być kruche. Najlepiej, aby były proste, ale powinieneś mieć taki, który próbuje dotknąć rdzeń aplikacji (buforowanie, baza danych, uwierzytelnianie).

 7
Author: Richard Levasseur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-01 21:17:01

Używam Munin i Monit i jestem z nich bardzo zadowolony.

 5
Author: Carl Meyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-31 14:58:25

Wewnętrzne logowanie jest w porządku i dandy, ale gdy cała aplikacja idzie w dół lub twój box / enviro awarii trzeba sprawdzić zewnątrz zbyt. http://www.pingdom.com / był dla mnie bardzo wiarygodny.

Moją jedyną radą jest to, że nie spędziłbym zbyt wiele czasu na to. moim najlepszym przykładem jest twitter, ile energii włożyli w system, będąc w stanie na wpół umrzeć, zamiast po prostu inwestować ten czas i energię w wyrzucanie więcej sprzętu / skalowanie go.

Szanse są to, co cię zniszczy, i tak twoje systemy logowania i opieki zdrowotnej zostaną pominięte.

 4
Author: dfasdljkhfaskldjhfasklhf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-04 18:59:46

Jednym z najważniejszych sposobów monitorowania każdej witryny internetowej jest monitorowanie zewnętrzne. Celem powinno być monitorowanie witryny w sposób, który najlepiej odzwierciedla sposób, w jaki użytkownicy korzystają z witryny. W 99% przypadków, gdy tylko wiesz, że Twoja strona jest wyłączona zewnętrznie, stosunkowo łatwo jest znaleźć przyczynę. Najważniejsze jest, aby wiedzieć jak najszybciej, że twoi klienci nie są w stanie załadować Twojej witryny.

Zasadniczo oznacza to stosowanie zewnętrznego monitorowania wydajności obsługa. Oni bardzo z bardzo niskiego końca (mon.itor.us, pingdom) do wysokiej klasy (Webmetrics, Gomez, Keynote). I jak zawsze, dostajesz to, za co płacisz. Rzeczy, na które należy zwrócić uwagę przy zakupie usługi monitoringu to:

  • wielkość i rozmieszczenie sieci monitorującej
  • czy rozwiązanie monitorujące jest w stanie monitorować witrynę za pomocą prawdziwej przeglądarki (w przeciwnym razie nie testujesz witryny tak, jak zrobiłby to prawdziwy użytkownik)
  • język skryptowy (do skrypt transakcji na twojej stronie)
  • dział wsparcia, aby pomóc ci po drodze i zapewnić wiedzę na temat prawidłowego monitorowania

Powodzenia!

 4
Author: lennysan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-08 00:38:01

Monitorowanie sieci przez IP Patrol lub SiteSentry były dla nas przydatne. Drugi jest trochę podobny do zaufania strony, ale nieco ładniejszy lol.

 3
Author: greg84,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-14 13:16:06

Myślałeś też o monitorowaniu funkcjonalności? Skrypt (w języku skryptowym, takim jak Perl lub Pyton lub przy użyciu jakiegoś narzędzia, takiego jak WebTest), który rozmawia z Twoją aplikacją i wykonuje kilka ważnych kroków, takich jak logowanie, dokonywanie zakupów itp.

 2
Author: innaM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-30 16:39:46

Oprócz tego, co należy monitorować, na co już udzielono odpowiedzi, musisz upewnić się-niezależnie od używanego systemu-że otrzymasz tylko Jedno powiadomienie o błędzie, który zdarza się wiele razy, na każde żądanie. Albo w skrzynce odbiorczej zabraknie pamięci :) poza tym jest to zwyczajnie irytujące...

Podziel zmiany czuwania między zespół wsparcia / deweloperów, aby jedna osoba nie musiała być na dyżurze każdego wieczoru. To zniszczy ludzi. Monitoring to dobra rzecz , ale każdy musi mieć szansę na życie raz na jakiś czas. Twój telefon brzęczący o 2 w nocy przez kilka nocy będzie bardzo stary, uwierz mi. Nie każdy programista jest przyzwyczajony do wsparcia 24/7, więc musisz znaleźć równowagę między używaniem monitorowania a nadużywaniem monitorowania.

Zasadniczo mają wyraźne poziomy eskalacji, a jeśli niebo nie spada, zdefiniuj okno " serenity now " w nocy, gdzie mniejsze poziomy eskalacji nie wychodzą.

 2
Author: Andrei Taranchenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-01 20:31:14

Używałem Nagios + CruiseControl + Selenium do przeprowadzania testów na wysokim poziomie w krytycznych aplikacjach internetowych. Zostałem spalony dość mocno przez prosty błąd jquery, który powstrzymał użytkowników przed przejściem przez formularz rejestracji online.

Http://www.agileatwork.com/the-holy-trinity-of-web-2-0-application-monitoring/

 2
Author: Mike Valenty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-25 21:06:43

Możesz spojrzeć na AlertGrid . Ta aplikacja internetowa umożliwia filtrowanie i przekazywanie alertów do Twojego zespołu (na całym świecie). Ma również dobrą zdolność monitorowania, jeśli coś się nie stało.

 2
Author: dzida,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-04 21:08:16

Parafrazując Richard Levasseur: ach, narzędzia monitorujące, jak twoje niedoskonałości mnie frustrują. Nie wydaje się, aby było to idealne narzędzie; Nagios jest dość łatwy w konfiguracji, ale interfejs jest trochę staromodny i musisz mieć demona działającego na każdym monitorowanym serwerze. Zenoss ma znacznie ładniejszy interfejs, w tym wykresy trendów wykorzystania zasobów, ale używa SNMP, więc musisz mieć trochę znajomości z tym, aby działał poprawnie, a dokumentacja nie jest najlepsza - są setki stron, ale naprawdę trudno znaleźć tylko informacje, których potrzebujesz, aby zacząć.

Moi znajomi polecili równieżKaktusy iHyperic , ale nie mam z nimi osobistego doświadczenia.

Ostatnia rzecz - jedna z innych odpowiedzi sugerowała uruchomienie narzędzia, które podkreśla Twoją stronę. Nie polecam robienia tego na swojej stronie NA ŻYWO, chyba że masz niezawodny okres ciszy, gdy nikt go nie uderza; nawet wtedy możesz go obniżyć niespodziewanie. Znacznie lepiej mieć serwer pośredniczący, na którym można uruchamiać testy obciążenia przed wprowadzeniem zmian do produkcji.

 1
Author: gareth_bowles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-04 18:54:49
 1
Author: TimReiner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-20 10:05:48

Jeden z naszych klientów korzysta z Techout (www.techout.com) i jest bardzo zadowolony z obsługi.

Nie ma opłat za alerty, bez względu na to, jakiego rodzaju i ile, i oferują e-mail, poczta głosowa i SMS alerty - a jeśli coś poważnego się stanie, telefon od osoby na żywo, aby ci pomóc.

Wszystko opiera się na usłudze - nie instalujesz oprogramowania i masz konsultanta, który pracuje z Tobą, aby określić najlepsze podejście do Twojej firmy. To jeden z najbardziej wygodne monitorowanie aplikacji internetowych usługi, ponieważ dbają o wszystko.

 0
Author: onthecloud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-07 16:47:14

Dodam tylko, że można przewidzieć prawdopodobieństwo błędu nieco na podstawie historii błędów przeszłości i po ich naprawieniu. Dzięki wewnętrznym testom na mniejszą skalę, jeśli chcesz wykreślić częstotliwość i nasilenie problemów, które zostały skorygowane do tego momentu, będziesz miał przegląd przewidywalnych nowych problemów. Jeśli wszystko działa bez błędów od jakiegoś czasu, to dwoma źródłami kłopotów będą ostatnie zmiany lub problemy ze skalowalnością.

Z powyższego wynika, że skalowalność jest twoim jedynym zmartwieniem, ale wspominam tylko test częstotliwości błędów przeszłości, ponieważ zespoły, na których byłem niezmiennie myślą, że mają ostatni błąd naprawiony i nie ma więcej. Dopóki nie będzie.

 0
Author: Qualsmith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-09 17:10:08

Zmiana linii trochę, coś, co naprawdę uważam za przydatne i zmienił wiele jak monitoruję moje aplikacje jest rejestrowanie WYJĄTKÓW javascript gdzieś. Jest bardzo ładna implementacja, która rejestruje to bezpośrednio z przeglądarek użytkowników do Google Analytics. Jest to konieczne dla aplikacji internetowych zorientowanych na Javascript i może dać wyniki oparte bezpośrednio na przeglądarkach użytkowników, co może prowadzić do bardzo nieoczekiwanych błędów (iE i mobilna przeglądarka są bólem)

Zastrzeżenie: mój post bellow

Http://www.directperformance.com.br/en/javascript-debug-simples-com-google-analytics

 0
Author: Eduardo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-14 12:01:16

Dla monitorowania obecności w Internecie, proponuję usługę, nad którą pracuję: Sucuri NBIM (Network-based integrity monitor).

Sprawdza dostępność i integralność, poszukując zmian w twojej obecności w Internecie (witryny, DNS, WHOIS, nagłówki itp.) i utraty łączności. Jest darmowy i możesz go wypróbować tutaj .

 -1
Author: Sucuri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-01 04:44:26