Ist Ping eine zuverlässige Methode, um zu überprüfen, ob ein Server verfügbar ist?

96

In meiner Anwendung pinge ich einen Server und warte auf eine Antwort. Ich verwende dies, um festzustellen, ob der Server verfügbar ist und reagiert oder nicht.

Ist dies eine zuverlässige Methode zur Ermittlung der Verfügbarkeit? Ich gehe davon aus, dass eine Firewall den ICMP-Verkehr filtert ... Gibt es noch andere Nachteile? Gibt es eine zuverlässigere Methode?

Peter Kelly
quelle

Antworten:

139

Der beste Weg, um festzustellen, ob ein bestimmter Remote-Service aktiv ist, besteht darin, ihn zu bitten, eine Anfrage so zu bearbeiten, wie es beabsichtigt ist. Tatsächlich ist dies der einzige Weg, um wirklich zu wissen, dass etwas richtig funktioniert.

Als Beispiel fordere ich meine Load-Balancer immer auf, eine tatsächliche Antwort von unseren Webservern zu erhalten. Sie könnten dasselbe für eine kleine Auswahl an einer DB-Box tun, wenn Sie möchten oder was auch immer Ihr tatsächlicher Server bedient. Als Tipp können Sie eine 'online.txt' (oder einen beliebigen Namen, den Sie vergeben möchten) auf Ihren Webservern erstellen. Lassen Sie Ihre LBs versuchen, diese Datei abzurufen. Wenn dies fehlschlägt, wird der Server vom VIP entfernt Eine gute Möglichkeit, einzelne Server manuell aus Ihren VIPs zu entfernen, indem Sie einfach eine einzelne Datei umbenennen.

Ping testet nur die Fähigkeit, auf Pings zu antworten. Das ist also das Basisbetriebssystem, Teile des IP-Stacks und die physischen Links - aber das ist alles, alles andere könnte ausgefallen sein und Sie wissen es nicht.

Ich weiß, dass dies unten erwähnt wird, aber es lohnt sich, es immer wieder zu wiederholen.

ICMP-Echoanforderungen (auch bekannt als "Pings") (auch bekannt als ICMP-Typ 8) basieren auf der IP-Stack-Spezifikation, müssen jedoch weder implementiert noch verwendet werden. Tatsächlich gibt es eine große Anzahl von Internetanbietern, die sich weigern, diese weiterzuleiten, und diese Anforderungen stillschweigend ablehnen, da es sich um eine Form von Netzwerkangriffen handelt (sogenannte Pingfloods).

Wie oben erwähnt, wird dies vom Betriebssystem (speziell auf Netzwerkstapelebene) behandelt, und es liegt daher an der Betriebssystemkonfiguration, auf diese zu reagieren oder nicht. Wenn dies deaktiviert ist (aus Sicherheitsgründen?), Können Sie keine Ping-Antworten vom anderen Ende empfangen. Deshalb ist es nicht zuverlässig.

Chopper3
quelle
34
Was der Mann gesagt hat! Ich rate Kunden immer, dass der beste Weg, um festzustellen, ob ein Server derzeit Service X anbietet, darin besteht, Service X anzufordern .
MadHatter
5
Wir bauen tatsächlich eine "Test" -RESTful-API in unsere Apps ein, nur für diesen Zweck . Wir wissen also, dass eine App, die auf blah / whatever_app / pulse antwortet, aktiv ist, Anforderungen
bearbeitet
5
Um zu MadHatter hinzuzufügen, ist es oft eine gute Idee, einen Ping und eine Anfrage zu machen. Auf diese Weise können Sie sofort feststellen, ob es sich um eine Netzwerkkonnektivität oder einen Dienstausfall handelt. Entweder verursacht einer ganz andere Dinge als der andere.
user606723
Ping ist nicht einmal ein zuverlässiger Test , dass der Server sich ping reagieren kann - wenn es dann nicht tut alles , was Sie wissen , ist , dass etwas zwischen Ihnen und es filtert ICMP - Verkehr
Rob Moir
4
Unter der Annahme, dass das Gerät unter normalen Umständen auf Ping reagiert, können Sie Ping als eine Art Bloom-Filter verwenden: Wenn der Ping fehlschlägt, ist der Dienst definitiv inaktiv (Sie haben ein Netzwerkproblem, da wir festgestellt haben, dass Ping normalerweise funktioniert). Wenn der Ping jedoch erfolgreich war, ist der Dienst möglicherweise immer noch nicht verfügbar, wie in dieser Antwort beschrieben
3Doubloons,
10

Meistens jedoch ja:

  • Einige Server blockieren Ping-Anfragen

  • Nur weil der Server antwortet, bedeutet dies nicht automatisch, dass die Website (oder der von Ihnen erwartete Dienst) funktioniert . Sie sollten auch prüfen, ob die Antwort mit dem erwarteten Inhalt übereinstimmt.

Wildpeaks
quelle
5

Es ist richtig, dass der ICMP-Verkehr in vielen Fällen herausgefiltert wird, so dass er möglicherweise unzuverlässig ist ...

Ein besserer Weg könnte sein, den Server an dem Service-Port zu telneten, an dem Sie interessiert sind.

dh Telnet 127.0.0.1 8080

sdmythos_gr
quelle
5

Wenn der Server nur auf Pings antworten muss, ist dies eine gute Methode, um die Verfügbarkeit zu ermitteln. Wenn zum Beispiel ein Webdienst bereitgestellt werden soll, sollten Sie eine Art Test durchführen, um festzustellen, ob dies für Dateidienste usw. ähnlich funktioniert.

user9517
quelle
3

Ping hat zwei Nachteile:

  • ping sendet icmp, das von der firewall gefiltert werden kann
  • Der TCP- oder UDP-Port, den Ihre Anwendung verwendet, ist möglicherweise belegt oder nicht geöffnet. Ping überprüft dies nicht

eine bessere lösung ist es, deinen udp / tcp port direkt zu überprüfen, um zu sehen, ob der service noch verfügbar ist ... :-)

JMW
quelle
3

Es gibt spezielle Tools zum Testen und Überwachen wie Nagios / Icinga .
Mit diesen Tools können Sie (natürlich) Prüfungen mit verschiedenen Ping-Tests durchführen, aber auch Ihre Dienste überprüfen.

Alle Prüfungen können den zurückgegebenen Wert verwenden, um das Ergebnis als "gut", "Warnung" und "kritisch" zu klassifizieren. Sie können in nahezu jeder Programmiersprache geschrieben werden.

Natürlich nicht einfach einzurichten (wie Point and Click), aber anpassbar, zuverlässig und erweiterbar. Läuft gut auf verschiedenen Linux- und Unix-Distributionen.

ppuschmann
quelle
2

Testen Sie die Dienste, nach denen Sie suchen. Wenn Sie nur einen Server anpingen, bedeutet dies nicht, dass die Dienste funktionieren.

Zum Beispiel:

Stellen Sie sich einen Webserver mit einem Dutzend Websites vor. Dann muss ich wissen, ob die Websites UP sind. Ich habe mir ein winziges Skript in PHP erstellt und es alle 10 Minuten ausgeführt.

Das Skript macht folgendes ->

<?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);
?>
deepcell
quelle
2

Wenn Sie mithilfe von Ping feststellen, ob ein Server verfügbar ist, überprüfen Sie wie ein Notarzt, ob ein Patient atmet. Ja, es ist ein guter Anfang, aber es kann auch andere Probleme geben.

Adam
quelle
1

Wir pingführen eine Vorprüfung durch, um sicherzustellen, dass der Host eingeschaltet und erreichbar ist, bevor wir unseren systemd-Dienst starten, der versucht, eine ssh-Verbindung zu ihm herzustellen. Dies spart Zeit beim Debuggen, da der systemctl startBefehl sofort fehlschlägt, anstatt stillschweigend fehlzuschlagen und sich im Journal-Dschungel zu verlieren.

Beachten Sie, dass Ping nicht im gleichen Sinne wie TCP "zuverlässig" ist. Wenn Sie eine schlechte Verbindung (oder einen beschissenen Netzwerkstapel, danke Intel mpss ) haben und Pakete verworfen werden, kann ein einzelner Paket-Ping fehlschlagen. Andererseits ist eine TCP-Verbindung gegen verworfene Pakete zuverlässig. Ironischerweise funktioniert eine SSH-Verbindung möglicherweise sofort nach einem einzelnen ping Fehler . Wenn Sie also Ping verwenden, um eine Überprüfung der Integrität durchzuführen, müssen Sie einige Fehler zulassen.

Mark Lakata
quelle
0

Nur meine zwei Cent: Wir haben eine Legacy-Anwendung, die diese Methode verwendet, und mussten sie warten, da der Ping nicht ausreichte, um die Verfügbarkeit des Dienstes zu bestimmen.

Ping zeigt lediglich, dass der Server empfangsbereit ist. In unserem Fall konnte der Dienst jedoch nicht ohne menschliches Eingreifen gestartet werden.

Infolgedessen versuchten Einheiten, die naiv davon ausgegangen waren, dass der Server verfügbar war, eine Verbindung herzustellen und das Zeitlimit zu überschreiten. Stattdessen wird die Meldung "Server ist nicht verfügbar" angezeigt.

-

Unsere aktuelle Anwendung, die über XMLHTTPRequests an einen Webserver kommuniziert, sendet eine Nachricht, die vom Server mit einem Statuscode beantwortet wird. Der Statuscode wird vom Server durch eine Reihe von Überprüfungen berechnet, um sicherzustellen, dass verschiedene Subsysteme online sind (DB, erforderliche Verzeichnisse sind beschreibbar usw.).

Robbie
quelle
0

Wenn Ihr Server unter normalen Umständen auf Ping antwortet, ist es hilfreich, ihn alle eine Minute zu pingen, um zu überprüfen, ob er antwortet. Dies sagt Ihnen natürlich nur, dass sich an dieser IP-Adresse ein Server befindet und dass es einen Netzwerkpfad von der Quelle des Pings zum Ziel gibt. Durch Festlegen eines Schwellenwerts für die Antwortzeit können Sie auch den Status des Netzwerks überwachen. Wenn Sie einen Server im Internet anpingen, können Sie möglicherweise nur wenig tun, um das Netzwerk zu reparieren. Wenn jedoch ein Kunde anruft, um sich zu beschweren, sind Sie sich des Problems bereits bewusst. Das Pingen von google.com zusätzlich ist auch nützlich. Wenn Sie und Google beide inaktiv sind, passiert etwas.

Wie bereits erwähnt, ist es wichtig zu überwachen, dass der von Ihnen bereitgestellte Dienst reagiert und dass seine Leistung in Ordnung ist. Das heißt, Sie möchten möglicherweise überprüfen, warum ein Webalter, das normalerweise innerhalb einer Sekunde antwortet, jetzt mit 10 Sekunden antwortet.

Wenn Sie also wissen, dass ein Dienst nicht reagiert und der Ping-Vorgang fehlschlägt, erhalten Sie viel mehr Informationen als nur einen Ansatz. Wenn Sie auch die Prozesse überwachen und wissen, dass Ping antwortet, antwortet der Dienst nicht und der Webserver verfügt nicht über die richtige Anzahl von Prozessen, die Ihnen mitteilen, wo Sie zuerst suchen müssen.

Sie können verrückt werden mit der Überwachung, also überwachen Sie nur genug, um zu sagen, wenn etwas Schlimmes passiert ist oder gefährlich wird. Dh zu viel Austausch,> 90% Festplattenauslastung, hohe Festplattenauslastung, 100% CPU für längere Zeit und denken Sie daran, dass die Überwachung nur ein Denial-of-Service-Angriff ist, der sehr langsam ausgeführt wird.

Stuart Woodward
quelle
0

Ping (Packet Internet Groper) gibt an, ob Ihr System mit dem System kommuniziert, mit dem Sie eine Verbindung über das Netzwerk herstellen möchten. Es pingt sogar, bedeutet aber nicht, dass der Dienst zum Beispiel RemoteRegistry ausgeführt wird.

Zum Beheben eines Problems ist jedoch Ping erforderlich. Sie können jedes Problem aus der Ferne beheben. Daher hat Ping seine eigene Bedeutung.

Sairam
quelle
-3

Der beste Weg, den ich in meinen Skripten benutze, ist

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

Anstelle von rsh können auch Alternativen wie remsh verwendet werden. Dies stellt sicher, dass Ihr Remote-System vollständig gebootet ist und Sie Befehle darauf ausführen können. Ein einfacher Ping-Befehl reicht nicht aus, da das System beim Start der Netzwerkdienste auf den Ping-Befehl reagiert.

Amol Sale
quelle
3
rsh? "Ja wirklich?" Warum nicht sshstattdessen verwenden?
Joachim Sauer
5
rshvs sshbeiseite, wie funktioniert die Lage, auszuführen date(vorausgesetzt , Sie sind, zu beginnen) sagt etwas darüber , ob ein Web - Server, SMTP - Server, DNS - Server, lokale Datenbankserver oder Dingsbums ausgeführt wird und in der Lage Anfragen zu bedienen? Besser, Sie fragen nach dem Dienst, dessen Verfügbarkeit Sie überprüfen möchten (dies kann eine Remote-Shell sein, muss es aber nicht sein).
ein Lebenslauf vom
-3

Wenn ich einen Windows-Server neu starte, öffne ich ein Eingabeaufforderungsfeld und gebe ein

ping <box> -t

Zuerst wird es vorschlagen, dass es verfügbar ist - das ist die Kiste, die nach unten geht. Dann bekommst du viel "Anforderungs-Auszeit". Wenn Sie anfangen, Antworten zu erhalten, ist die Box aktiv.

Dave
quelle
7
Das bedeutet nicht, dass es für echte Arbeit verfügbar ist, sondern nur, dass es auf Ping reagiert.
Benutzer9517
Vielleicht. Es ist immer wichtig, dass ich mich beim Server anmelden kann und das ist alles, was ich jemals brauche.
Dave
Es ist durchaus möglich, dass ein Server auf Ping reagiert, aber (noch) keine übergeordneten Netzwerkfunktionen gestartet hat. Das einzige, was Ping-Tests ist Ping. Und vielleicht Namensauflösung, wenn Sie Ping nach Namen anstatt IP
Rob Moir
Es gab viele Fälle, in denen ein Server auf Pings geantwortet hat, aber keine anderen Anforderungen, einschließlich Anmeldungen, bearbeitet hat. Ein Ping kann ein sehr grobes Mittel sein, um festzustellen, wann der Server wieder hochgefahren ist, aber das ist alles. Das setzt natürlich voraus, dass der Server sogar auf Pings reagiert.
John Gardeniers