107 votes

Le Ping est-il un moyen fiable de vérifier si un serveur est disponible ?

Dans mon application, j'envoie un ping à un serveur et j'attends une réponse. Je l'utilise pour déterminer si le serveur est disponible et réactif ou non.

Est-ce un moyen fiable de déterminer la disponibilité ? Je suppose qu'un pare-feu pourrait filtrer le trafic icmp... Y a-t-il d'autres inconvénients ? Existe-t-il une méthode plus fiable ?

150voto

Chopper3 Points 99341

La meilleure façon de savoir si un service distant donné est en vie est de lui demander de traiter une requête comme il est censé le faire - en fait, c'est la seule façon de savoir si quelque chose fonctionne correctement.

À titre d'exemple, je demande toujours à mes équilibreurs de charge de renvoyer une réponse "head" réelle de nos serveurs web. Vous pourriez faire de même pour une petite sélection sur une boîte DB si vous le souhaitez, ou pour tout ce que votre serveur actuel sert. Une astuce consiste à créer un fichier 'online.txt' (ou tout autre nom que vous souhaitez lui donner) sur vos serveurs web, à demander à vos LB d'essayer de récupérer ce fichier et, en cas d'échec, de retirer le serveur du VIP. C'est une bonne façon de retirer manuellement des serveurs individuels de vos VIP en renommant simplement un fichier.

Ping ne teste que la capacité à répondre aux pings, c'est-à-dire le système d'exploitation de base, certaines parties de la pile IP et les liaisons physiques, mais c'est tout, tout le reste pourrait être en panne et vous ne le sauriez pas.

Je sais que cela est mentionné ci-dessous, mais cela mérite d'être répété encore et encore.

Les requêtes d'écho ICMP (alias "Pings") (alias ICMP Type 8) sont intégrées dans la spécification de la pile IP, oui, mais il n'est pas nécessaire de les implémenter ou de les utiliser. En fait, un grand nombre de fournisseurs d'accès à Internet refusent de transmettre ces requêtes et les abandonnent en silence, car elles constituent une forme d'attaque du réseau (appelée "pingflood").

Comme mentionné ci-dessus, ceci est géré par le système d'exploitation (spécifiquement au niveau de la pile réseau) et c'est donc à la configuration du système d'exploitation de répondre ou non à ces messages. Si cette fonction est désactivée (une précaution de sécurité ?), vous ne pouvez rien faire contre la réception de réponses ping de l'autre extrémité. C'est pourquoi il n'est pas fiable.

35 votes

Ce que l'homme a dit ! Je conseille toujours aux clients que la meilleure façon de savoir si un serveur offre actuellement le service X est de demander le service X .

5 votes

Nous intégrons en fait une API RESTful "de test" dans nos applications. juste pour cela. Ainsi, nous savons que si une application répond à blah/quelque_app/pulse, elle est en place, répond aux demandes et dispose de tous les outils dont elle a besoin (BD, dépendances, etc.).

5 votes

Pour ajouter à MadHatter, c'est souvent une bonne idée de faire un ping et une requête. De cette façon, vous pouvez savoir immédiatement si vous avez affaire à une connectivité réseau ou à une interruption de service... L'un ou l'autre a tendance à créer des choses complètement différentes de l'autre.

11voto

Harikrishnan Points 329

La plupart du temps, oui, cependant :

  • certains serveurs bloquent les demandes de ping

  • juste parce que le serveur répond ne signifie pas automatiquement que le site web (ou tout autre service que vous pensez utiliser) fonctionne vous devez également vérifier si la réponse correspond au contenu attendu.

6voto

sdmythos_gr Points 195

Il est vrai qu'en de nombreuses occasions, le trafic ICMP est filtré et qu'il peut donc être peu fiable...

Une meilleure façon de procéder serait peut-être de mettre le serveur sur le port de service qui vous intéresse.

i.e. telnet 127.0.0.1 8080

5voto

user9517 Points 113163

Si le serveur doit uniquement répondre aux pings, c'est une bonne méthode pour déterminer sa disponibilité. S'il doit fournir, par exemple, un service web, vous devez effectuer une forme de test pour voir si cela fonctionne de la même manière pour les services de fichiers, etc.

3voto

john Points 11

Ping présente deux inconvénients :

  • ping envoie icmp, qui peut être filtré par le firewall
  • le port tcp ou udp utilisé par votre application peut être occupé ou non ouvert - ping ne le vérifie pas.

une meilleure solution est de vérifier directement votre port udp/tcp, pour voir si le service est toujours disponible... :-)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X