Vraag Is Ping een betrouwbare manier om te controleren of een server beschikbaar is?


In mijn toepassing pings ik een server en wacht op een reactie. Ik gebruik dit om te bepalen of de server beschikbaar is en reageert of niet.

Is dit een betrouwbare manier om de beschikbaarheid te bepalen? Ik neem aan dat een firewall icmp-verkeer kan filteren ... Zijn er nog andere nadelen? Is er een betrouwbaardere methode?


89
2017-09-19 10:00


oorsprong




antwoorden:


De beste manier om te weten of een bepaalde service op afstand in leven is, is door hem te vragen een verzoek te beantwoorden op de manier zoals het bedoeld is - in feite is dit de enige manier om echt te weten dat iets correct werkt.

Als voorbeeld krijg ik altijd mijn load-balancers om een ​​echt 'hoofd'-antwoord terug te krijgen van onze webservers, je zou hetzelfde kunnen doen voor een kleine selectie in een DB-box als je dat zou willen, of wat je huidige server ook is. Als tip kun je een 'online.txt' (of welke naam je het ook wilt) op je webservers maken, laat je LB's proberen dat bestand te krijgen en als het mislukt, dan verwijdert het de server van de VIP, dit is een leuke manier om afzonderlijke servers handmatig van uw VIP's te verwijderen door simpelweg een enkel bestand te hernoemen.

Ping test alleen op de mogelijkheid om te reageren op pings, dus dat is basis-OS, delen van de IP-stack en de fysieke koppelingen - maar dat is alles, al het andere zou kunnen zijn en je zou het niet weten.

Ik weet dat dit hieronder wordt vermeld, maar het draagt ​​opnieuw en opnieuw te herhalen.

ICMP-echoverzoeken (ook bekend als "Pings") (of ICMP Type 8) zijn gebouwd op de IP-stackspecificatie, ja, maar hoeven niet te worden geïmplementeerd of gebruikt. In feite zijn er een groot aantal internetproviders die weigeren deze door te sturen en deze verzoeken stil te laten vallen, omdat ze een vorm van netwerkaanval zijn (een pingflood genaamd).

Zoals hierboven vermeld, wordt dit afgehandeld door het besturingssysteem (met name op het netwerkstapelniveau) en het is dus aan de OS-configuratie om daar al dan niet op te reageren. Als dit is uitgeschakeld (een veiligheidsmaatregel?), Kunt u niets doen aan het ontvangen van ping-antwoorden van de andere kant. Dit is waarom het niet betrouwbaar is.


137
2017-09-19 10:10



Wat zei de man! Ik adviseer klanten altijd dat de beste manier om te weten of een server momenteel service X aanbiedt, is service aanvragen X. - MadHatter
We bouwen eigenlijk een "test" RESTful API in onze apps net voor deze. Dus we weten dat als een app antwoordt op blah / whatever_app / pulse it's up, serviceverzoeken uitvoert en alle tools heeft die het nodig heeft (DB, dependancies, enz.) - tsykoduk
Om aan MadHatter toe te voegen, is het vaak een goed idee om een ​​ping en een verzoek te doen. Op deze manier weet u meteen of u te maken heeft met netwerkconnectiviteit of een storing in de service ... Ofwel heeft u de neiging heel verschillende dingen te maken dan de andere. - user606723
Ping is zelfs geen betrouwbare test dat de server zelf op ping kan reageren - als dat niet zo is, is het enige dat u weet dat er iets tussen u en het ICMP-verkeer filtert - Rob Moir
Ervan uitgaande dat het apparaat onder normale omstandigheden op ping antwoordt, kunt u ping als een soort bloeifilter gebruiken: als de ping mislukt, is de service zeker niet beschikbaar (u hebt een netwerkprobleem, omdat we het ping-werk meestal hebben vastgesteld). Als de ping-functie echter slaagt, kan de service nog steeds niet worden uitgevoerd zoals beschreven in dit antwoord - 3Doubloons


Meestal, ja, echter:

  • sommige servers blokkeren pingaanvragen

  • alleen omdat de server reageert betekent niet automatisch de website (of welke service u ook verwacht te gebruiken) werkt, moet u ook controleren of het antwoord overeenkomt met de verwachte inhoud.


10
2017-09-19 10:08





Het klopt dat ICMP-verkeer vaak wordt uitgefilterd, dus het kan onbetrouwbaar zijn ...

Een betere manier zou kunnen zijn om de server te telnetten bij de servicepoort waarin u bent geïnteresseerd.

d.w.z. telnet 127.0.0.1 8080


5
2017-09-19 10:07





Als de server alleen op pings hoeft te reageren, is dit een goede methode om de beschikbaarheid te bepalen. Als is vereist om bijvoorbeeld een webservice te leveren, moet u een test uitvoeren om te zien of dit op dezelfde manier werkt voor bestandenervices, enz.


5
2017-09-19 10:10





ping heeft 2 nadelen:

  • ping stuurt icmp, die kan worden gefilterd door de firewall
  • de tcp- of udp-poort die door uw toepassing wordt gebruikt, kan bezet zijn of niet open - ping controleert dat niet

een betere oplossing is om direct je udp / tcp-poort te controleren om te zien of de service nog beschikbaar is ... :-)


3
2017-09-19 19:20





Er zijn speciale tools voor testen en monitoren zoals Nagios / icinga.
Met deze hulpmiddelen kunt u (natuurlijk) controles uitvoeren met verschillende ping-tests, maar ook controles uitvoeren op uw services.

Alle controles kunnen de geretourneerde waarde gebruiken om het resultaat te classificeren als "goed", "waarschuwing" en "kritiek" en kunnen in bijna elke programmeertaal worden geschreven.

Natuurlijk niet gemakkelijk in te stellen (zoals klikken en klikken), maar aanpasbaar, betrouwbaar en uitbreidbaar. Draait goed op verschillende Linux- en Unix-distributies.


3
2017-09-19 18:24





Test de services die u zoekt, gewoon een server pingen betekent niet dat de services werken.

Bijvoorbeeld:

Stel je een webserver met tientallen websites voor, dan moet ik weten of de websites UP zijn, ik heb zelf een klein script in php gedaan en het elke 10 minuten uitgevoerd.

Het script doet het volgende ->

<?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





Het gebruik van ping om te bepalen of een server beschikbaar is, lijkt op een ER-arts die controleert of een patiënt ademt. Ja, het is een goede plek om te beginnen, maar er kunnen nog andere problemen zijn.


2
2017-09-19 18:39





Alleen mijn twee cent: We hebben een oude applicatie die deze methode gebruikt en deze moest onderhouden omdat de ping was niet voldoende om de beschikbaarheid van de service te bepalen.

Ping laat alleen zien dat de server in staat is om te luisteren, maar in ons geval kon de service niet starten zonder menselijke tussenkomst.

Dientengevolge trachtten eenheden, waarvan naïef was aangenomen dat de server beschikbaar was, een verbinding tot stand te brengen en een time-out aan te brengen. In plaats van het bericht 'Server is niet beschikbaar' weer te geven.

-

Onze huidige applicatie, die communiceert via XMLHTTPRequests naar een webserver, stuurt een gevormd bericht waarop de server reageert met een statuscode. De statuscode wordt berekend door de server een aantal controles uit te voeren om ervoor te zorgen dat verschillende subsystemen online zijn (DB, noodzakelijke mappen zijn beschrijfbaar, enz.)


0
2017-08-24 23:59