Czy Ping to niezawodny sposób sprawdzenia, czy serwer jest dostępny?

96

W mojej aplikacji pinguję serwer i czekam na odpowiedź. Używam tego do ustalenia, czy serwer jest dostępny i reaguje, czy nie.

Czy to niezawodny sposób na określenie dostępności? Zakładam, że zapora sieciowa może filtrować ruch icmp ... Czy są jeszcze jakieś wady? Czy istnieje bardziej niezawodna metoda?

Peter Kelly
źródło

Odpowiedzi:

139

Najlepszym sposobem stwierdzenia, czy dana usługa zdalna jest aktywna, jest poproszenie jej o obsługę żądania w sposób, w jaki jest przeznaczony - w rzeczywistości jest to jedyny sposób, aby naprawdę wiedzieć, że coś działa poprawnie.

Jako przykład zawsze otrzymuję od moich równoważników obciążenia, aby otrzymali rzeczywistą odpowiedź „z góry” z naszych serwerów WWW, możesz zrobić to samo dla małego wyboru na polu DB, jeśli chcesz lub cokolwiek twój serwer obsługuje. Wskazówka: możesz utworzyć plik „online.txt” (lub dowolną nazwę, którą chcesz nadać) na swoich serwerach internetowych, poproś LB o pobranie tego pliku, a jeśli się nie powiedzie, usunie serwer z VIP-a, to jest dobry sposób na ręczne usunięcie poszczególnych serwerów ze swoich VIP-ów po prostu przez zmianę nazwy jednego pliku.

Ping tylko testuje zdolność do reagowania na pingi, więc to jest podstawowy system operacyjny, części stosu IP i łącza fizyczne - ale to wszystko, wszystko inne może być wyłączone i nie będziesz wiedział.

Wiem, że wspomniano o tym poniżej, ale należy to powtarzać wielokrotnie.

Żądania echa ICMP (inaczej „pingi”) (inaczej ICMP typ 8) są wbudowane w specyfikację stosu IP, tak, ale nie muszą być ani implementowane, ani używane. W rzeczywistości istnieje duża liczba dostawców Internetu, którzy odmawiają przekazania dalej i po cichu odrzucają te żądania, ponieważ są one formą ataku sieciowego (zwanego pingflood).

Jak wspomniano powyżej, jest to obsługiwane przez system operacyjny (szczególnie na poziomie stosu sieciowego), więc konfiguracja systemu operacyjnego zależy od tego, czy nie. Jeśli jest to wyłączone (środek bezpieczeństwa?), Nie możesz nic zrobić z otrzymywaniem odpowiedzi ping z drugiego końca. Dlatego nie jest wiarygodny.

Siekacz 3
źródło
34
Co mężczyzna powiedział! Zawsze doradzamy klientom, że najlepszym sposobem, aby stwierdzić, czy serwer jest obecnie oferuje usługi X jest zlecenie usługi X .
MadHatter,
5
My rzeczywiście zbudować „test” REST API do naszych aplikacji tylko do tego. Wiemy więc, że jeśli aplikacja odpowiada na blaha / cokolwiek_aplikację / puls, działa, obsługuje żądania i ma wszystkie narzędzia, których potrzebuje (DB, zależności itp.)
tsykoduk
5
Aby dodać do MadHatter, często dobrym pomysłem jest wykonanie polecenia ping i żądania. W ten sposób możesz od razu wiedzieć, czy masz do czynienia z łącznością sieciową, czy z przerwą w świadczeniu usług ... Każda z nich ma tendencję do tworzenia zupełnie innych rzeczy niż druga.
user606723,
Ping nie jest jeszcze wiarygodnym testem, który sam serwer może odpowiadać na ping - jeśli nie to wszystko co wiem, jest to, że coś między wami i to jest filtrowanie ruchu ICMP
Rob Moir
4
Zakładając, że maszyna reaguje na ping w normalnych okolicznościach, możesz użyć polecenia ping jako pewnego rodzaju filtru kwitnienia: Jeśli ping nie powiedzie się, usługa jest zdecydowanie niedostępna (masz problem z siecią, ponieważ zwykle ustaliliśmy, że ping działa). Jeśli jednak ping się powiedzie, usługa może nadal działać zgodnie z opisem w tej odpowiedzi
3Doubloons,
10

Jednak przez większość czasu tak:

  • niektóre serwery blokują żądania ping

  • tylko dlatego, że serwer odpowiada , nie oznacza to automatycznie, że strona internetowa (lub jakakolwiek usługa, której oczekujesz) będzie działać , powinieneś również sprawdzić, czy odpowiedź odpowiada oczekiwanej treści.

dzikie piki
źródło
5

Prawdą jest, że w wielu przypadkach ruch ICMP jest odfiltrowywany, co może być zawodne ...

Być może lepszym sposobem może być telnetowanie serwera do interesującego cię portu serwisowego.

tj. telnet 127.0.0.1 8080

sdmythos_gr
źródło
5

Jeśli serwer wymaga tylko odpowiedzi na pingi, jest to dobra metoda określenia jego dostępności. Jeśli wymagane jest na przykład świadczenie usługi internetowej, należy przeprowadzić test w celu sprawdzenia, czy działa on podobnie w przypadku usług plików itp.

użytkownik9517
źródło
3

ping ma 2 wady:

  • ping wysyła icmp, które mogą być filtrowane przez zaporę ogniową
  • port tcp lub udp używany przez aplikację może być zajęty lub nie być otwarty - ping tego nie sprawdza

lepszym rozwiązaniem jest sprawdzenie bezpośrednio portu udp / tcp, aby sprawdzić, czy usługa jest nadal dostępna ... :-)

JMW
źródło
3

Istnieją specjalne narzędzia do testowania i monitorowania, takie jak Nagios / Icinga .
Za pomocą tych narzędzi możesz (oczywiście) przeprowadzać kontrole za pomocą różnych testów ping, ale także sprawdzać swoje usługi.

Wszystkie kontrole mogą wykorzystywać zwracaną wartość do klasyfikowania wyniku jako „dobry”, „ostrzegawczy” i „krytyczny” i mogą być napisane w prawie każdym języku programowania.

Oczywiście nie jest łatwy w konfiguracji (jak wskaż i kliknij), ale można go dostosować, niezawodny i rozszerzalny. Działa dobrze w różnych dystrybucjach Linux i Unix.

ppuschmann
źródło
2

Przetestuj usługi, których szukasz, pingowanie serwera nie oznacza, że ​​usługi działają.

Na przykład:

Wyobraź sobie serwer WWW z kilkunastoma stronami internetowymi, a następnie muszę wiedzieć, czy strony te działają poprawnie, zrobiłem sobie mały skrypt w php i uruchamiam go co 10 minut.

Skrypt wykonuje następujące czynności ->

<?php
    $website1 = "http://www.mywebsite.com/";
    $myWebsite = file_get_contents($website1);
    $message = 'My website' . $website1 . ' is DOWN at the moment.';
    if (empty($myWebsite)) mail('[email protected]', 'Website is DOWN', $message);
?>
głębokie komórki
źródło
2

Użycie polecenia ping do ustalenia, czy serwer jest dostępny, jest jak lekarz ER sprawdzający, czy pacjent oddycha. Tak, jest to dobre miejsce na rozpoczęcie, ale mogą występować inne problemy.

Adam
źródło
1

pingPrzed uruchomieniem usługi systemowej, która próbuje nawiązać połączenie ssh, używamy do sprawdzenia, czy host jest włączony i osiągalny. Oszczędza to trochę czasu debugowania, ponieważ systemctl startpolecenie natychmiast się nie powiedzie, zamiast po cichu zawieść i zgubić się w dżungli dzienników.

Zauważ, że ping nie jest „niezawodny” w tym samym znaczeniu co TCP. Jeśli masz złe połączenie (lub gburowaty stos sieciowy, dziękuję Mps Intel ) i pakiety są odrzucane, pojedynczy ping może się nie powieść. Z drugiej strony połączenie TCP jest niezawodne w przypadku odrzuconych pakietów. Jak na ironię, połączenie ssh może działać natychmiast po pojedynczej ping awarii . Więc jeśli używasz polecenia ping do sprawdzenia poprawności psychicznej, pamiętaj, aby pozwolić na pewną awarię.

Mark Lakata
źródło
0

Tylko moje dwa centy: Mamy starszą aplikację, która korzysta z tej metody i musieliśmy ją obsłużyć, ponieważ ping nie był wystarczający do określenia dostępności usługi.

Ping pokazuje tylko, że serwer jest w stanie nasłuchiwać, ale w naszym przypadku usługa nie mogła zostać uruchomiona bez interwencji człowieka.

W rezultacie jednostki, które naiwnie zakładały, że serwer jest dostępny, próbowały się połączyć i upłynął limit czasu. Zamiast wyświetlać nasz komunikat „Serwer jest niedostępny”.

-

Nasza obecna aplikacja, która komunikuje się za pośrednictwem XMLHTTPRequests z serwerem WWW, wysyła sformatowaną wiadomość, na którą serwer odpowie kodem stanu. Kod stanu jest obliczany przez serwer przeprowadzający szereg kontroli, aby upewnić się, że różne podsystemy są w trybie online (DB, niezbędne katalogi są zapisywalne itp.)

Robbie
źródło
0

Jeśli w normalnych okolicznościach serwer odpowiada na ping, przydatne jest pingowanie go w jednominutowych odstępach, aby sprawdzić, czy odpowiada. To oczywiście mówi tylko, że pod tym adresem IP znajduje się serwer i że istnieje ścieżka sieciowa od źródła polecenia ping do miejsca docelowego. Ustawienie progu czasu odpowiedzi może również umożliwić monitorowanie stanu sieci. Jeśli pingujesz serwer przez Internet, możesz niewiele zrobić, aby naprawić sieć, ale jeśli klient zadzwoni, aby złożyć skargę, będziesz już świadomy problemu. Przydaje się także pingowanie google.com. Jeśli ty i Google oboje jesteście załamani, coś się dzieje.

Jak wspomnieli inni, ważne jest monitorowanie, czy usługa, którą świadczysz, odpowiada i czy jej wydajność jest OK. Tzn. Możesz chcieć sprawdzić, dlaczego wiek sieci, który zwykle reaguje w ciągu sekundy, odpowiada teraz, mam 10 sekund.

Wiedząc, że usługa nie reaguje i ping nie działa, daje znacznie więcej informacji niż tylko jedno podejście. Również jeśli monitorujesz procesy, wiedząc, że ping odpowiada, usługa nie odpowiada, a serwer WWW nie ma prawidłowej liczby procesów, mówi, gdzie szukać najpierw.

Możesz zwariować na punkcie monitorowania, więc wystarczy monitorować, aby powiedzieć Ci, kiedy stało się coś złego lub staje się niebezpieczne. Tzn. Za dużo zamiany,> 90% użycia dysku, wysoki dysk io, 100% procesora przez dłuższy czas i pamiętaj, że monitorowanie to tylko atak typu „odmowa usługi” przeprowadzany bardzo powoli.

Stuart Woodward
źródło
0

Ping (Packet Internet Groper) informuje, czy Twój system komunikuje się z systemem, z którym chcesz nawiązać połączenie przez sieć. Nawet pinguje, nie oznacza, że ​​usługa, na przykład usługa RemoteRegistry jest uruchomiona.

Jednak w celu rozwiązania problemu ping jest konieczny. Możesz zdalnie naprawić każdy problem. Dlatego ping ma swoje znaczenie.

sairam
źródło
-3

Najlepszym sposobem, w jaki używam w moich skryptach jest

#rsh servername.com "date"
Mon Sep 19 04:42:20 PDT 2011

zamiast rsh można zastosować alternatywy takie jak remsh. Zapewnia to całkowite uruchomienie systemu zdalnego i uruchomienie na nim poleceń. Proste pingowanie nie jest wystarczające, ponieważ podczas uruchamiania, gdy usługi sieciowe są uruchomione, system zaczyna odpowiadać na ping.

Sprzedaż Amol
źródło
3
rsh? Naprawdę? Dlaczego nie użyć sshzamiast tego?
Joachim Sauer,
5
rshw sshprzeciwieństwie do tego, w jaki sposób zdolność do wykonywania date(zakładając, że jesteś, na początek) mówi cokolwiek o tym, czy serwer WWW, serwer SMTP, serwer DNS, lokalny serwer bazy danych lub co tam działa i może obsłużyć żądania? Lepiej zapytać o konkretną usługę, dla której chcesz sprawdzić dostępność (która może być zdalną powłoką, ale na pewno nie musi).
CVn
-3

Po ponownym uruchomieniu serwera Windows otwieram okno wiersza polecenia i wchodzę

ping <box> -t

Najpierw zasugeruje, że jest dostępny - to pole spada. Wtedy będziesz mieć dużo czasu na żądanie. Gdy zaczniesz otrzymywać odpowiedzi, okno jest gotowe.

Dave
źródło
7
To nie znaczy, że jest w stanie wykonać prawdziwą pracę, tylko że odpowiada na ping.
user9517
Może. Zawsze myślę, że mogę zalogować się na serwerze i to wszystko, czego kiedykolwiek potrzebuję.
Dave,
Jest całkowicie możliwe, że serwer reaguje na ping, ale nie (jeszcze, a nawet wcale) nie uruchomił żadnych funkcji sieciowych wyższego poziomu. Jedyne, co testuje ping, to ping. A może rozpoznawanie nazw, jeśli pingujesz według nazwy zamiast adresu IP
Rob Moir,
Miałem wiele okazji, w których serwer odpowiadał na pingi, ale nie mógł dostarczyć żadnego innego rodzaju żądania, w tym logowania. Ping może być bardzo prostym sposobem na określenie, kiedy serwer zaczął się ponownie uruchamiać, ale to wszystko. Oczywiście przy założeniu, że serwer reaguje nawet na pingi.
John Gardeniers,