Frage Ist Ping eine zuverlässige Möglichkeit, um zu prüfen, ob ein Server verfügbar ist?


In meiner Anwendung pinge ich einen Server an und warte auf eine Antwort. Ich benutze dies um festzustellen, ob der Server verfügbar und anpassungsfähig ist oder nicht.

Ist dies eine zuverlässige Möglichkeit, die Verfügbarkeit zu bestimmen? Ich nehme an, eine Firewall könnte ICMP-Traffic filtern ... Gibt es irgendwelche anderen Nachteile? Gibt es eine zuverlässigere Methode?


89
2017-09-19 10:00


Ursprung




Antworten:


Der beste Weg, um festzustellen, ob ein bestimmter Remote-Dienst am Leben ist, besteht darin, ihn zu bitten, eine Anfrage so zu bedienen, wie sie eigentlich sein soll - in der Tat ist dies die einzige Möglichkeit, wirklich zu wissen, dass etwas funktioniert.

Als ein Beispiel bekomme ich immer meine Load-Balancer, um eine tatsächliche "Kopf" -Rückantwort von unseren Webservern zu erhalten, Sie könnten dasselbe für eine kleine Auswahl in 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 welchen Namen auch immer Sie wollen) auf Ihren Webservern erstellen lassen, Ihre LBs versuchen, diese Datei zu bekommen und wenn es schief geht, dann entfernt sie den Server vom VIP, das ist Eine nette Möglichkeit, einzelne Server manuell aus Ihren VIPs zu entfernen, indem einfach eine einzelne Datei umbenannt wird.

Ping testet nur auf die Fähigkeit, auf Pings zu antworten, also auf das Basisbetriebssystem, Teile des IP-Stacks und die physischen Verbindungen - aber das ist alles, alles andere könnte ausfallen und du würdest es nicht wissen.

Ich weiß, dass das unten erwähnt wird, aber es wiederholt sich immer wieder.

ICMP-Echoanforderungen (auch bekannt als "Pings") (auch als ICMP-Typ 8 bezeichnet) sind in die IP-Stack-Spezifikation integriert, ja, 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 Anfragen stillschweigend fallen zu lassen, da sie eine Form von Netzwerkangriff sind (genannt Pingflood).

Wie oben erwähnt, wird dies vom Betriebssystem gehandhabt (speziell auf der Ebene des Netzwerk-Stacks) und es liegt daher an der OS-Konfiguration, darauf zu antworten oder nicht. Wenn dies ausgeschaltet ist (eine Sicherheitsmaßnahme?), Können Sie nichts dagegen tun, Ping-Antworten vom anderen Ende zu empfangen. Deshalb ist es nicht zuverlässig.


137
2017-09-19 10:10



Was der Mann gesagt hat! Ich rate Klienten immer, dass der beste Weg, zu sagen, ob ein Server Service X anbietet, ist Service anfordern X. - MadHatter
Wir erstellen in unseren Apps eine "Test" -REST-API gerade dafür. Wir wissen also, wenn eine App auf blah / whatever_app / pulse reagiert, geht es weiter, bedient Anfragen und verfügt über alle benötigten Tools (DB, Dependencies etc.) - tsykoduk
Um MadHatter hinzuzufügen, ist es oft eine gute Idee, einen Ping und eine Anfrage zu machen. Auf diese Weise können Sie sofort erkennen, ob Sie mit Netzwerkkonnektivität oder einem Dienstausfall zu tun haben ... Entweder neigt man dazu, völlig andere Dinge als die anderen zu schaffen. - user606723
Ping ist nicht einmal ein zuverlässiger Test, dass der Server selbst auf Ping reagieren kann - wenn es dann nicht alles ist, weißt du, dass etwas zwischen dir und ihm den ICMP-Verkehr filtert - Rob Moir
Unter der Annahme, dass der Computer unter normalen Umständen auf Ping reagiert, können Sie ping als eine Art Bloomfilter verwenden: Wenn der Ping fehlschlägt, ist der Dienst definitiv ausgefallen (Sie haben ein Netzwerkproblem, da wir den Ping normalerweise eingerichtet haben). Wenn der Ping jedoch erfolgreich war, konnte der Dienst immer noch nicht funktionieren, wie in dieser Antwort beschrieben - 3Doubloons


Die meiste Zeit, ja, jedoch:

  • Einige Server blockieren Ping-Anfragen

  • nur weil der Server antwortet bedeutet nicht automatisch die Website (oder welche Dienstleistung Sie auch erwarten) funktioniert, sollten Sie auch prüfen, ob die Antwort dem erwarteten Inhalt entspricht.


10
2017-09-19 10:08





Es ist wahr, dass ICMP-Verkehr oft herausgefiltert wird, so dass es unzuverlässig sein könnte ...

Ein besserer Weg wäre vielleicht, den Server an dem Dienstport zu telnet, an dem Sie interessiert sind.

d.h. Telnet 127.0.0.1 8080


5
2017-09-19 10:07





Wenn der Server nur auf Pings antworten muss, ist dies eine gute Methode, die Verfügbarkeit zu bestimmen. Wenn es erforderlich ist, beispielsweise einen Web-Service bereitzustellen, sollten Sie eine Art von Test durchführen, um zu sehen, ob das ähnlich für Fileservices usw. funktioniert.


5
2017-09-19 10:10





Ping hat 2 Nachteile:

  • ping sendet icmp, das von der Firewall gefiltert werden kann
  • Der tcp- oder udp-Port, den Ihre Anwendung verwendet, könnte besetzt oder nicht geöffnet sein - ping überprüft das nicht

Eine bessere Lösung ist es, den udp / tcp-Port direkt zu überprüfen, um zu sehen, ob der Dienst noch verfügbar ist ... :-)


3
2017-09-19 19:20





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 und können in fast jeder Programmiersprache geschrieben werden.

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


3
2017-09-19 18:24





Testen Sie die Dienste, die Sie suchen, nur einen Server Ping bedeutet nicht, dass die Dienste funktionieren.

Zum Beispiel:

Stellen Sie sich einen Webserver mit Dutzenden von Webseiten vor, dann muss ich wissen, ob die Webseiten UP sind, ich habe selbst ein kleines 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('mail@server.com', 'Website is DOWN', $message);
?>

2
2017-11-28 15:42





Wenn Ping verwendet wird, um festzustellen, ob ein Server verfügbar ist, ist dies wie bei einem Notarzt, der überprüft, ob ein Patient atmet. Ja, es ist ein guter Anfang, aber es könnte andere Probleme geben.


2
2017-09-19 18:39





Nur meine zwei Cent: Wir haben eine Legacy-Anwendung, die diese Methode verwendet, und mussten sie warten, weil der Ping war nicht ausreichend für die Ermittlung der Serviceverfügbarkeit.

Ping zeigt lediglich, dass der Server zuhören kann, aber in unserem Fall konnte der Dienst nicht ohne menschliches Eingreifen starten.

Als Ergebnis versuchten Einheiten, die naiv annahmen, dass der Server verfügbar war, eine Verbindung herzustellen und eine Zeitüberschreitung zu erreichen. Anstatt unsere Meldung "Server ist nicht verfügbar" anzuzeigen.

-

Unsere aktuelle Anwendung, die über XMLHTTPRequests mit einem Webserver kommuniziert, sendet eine formatierte Nachricht, auf die der Server mit einem Statuscode antwortet. Der Statuscode wird berechnet, indem der Server eine Anzahl von Prüfungen durchführt, um sicherzustellen, dass verschiedene Subsysteme online sind (DB, notwendige Verzeichnisse sind beschreibbar usw.).


0
2017-08-24 23:59