Pregunta ¿Ping es una forma confiable de verificar si un servidor está disponible?


En mi aplicación, hago ping a un servidor y estoy esperando una respuesta. Estoy usando esto para determinar si el servidor está disponible y responde o no.

¿Es esta una forma confiable de determinar la disponibilidad? Supongo que un firewall podría estar filtrando el tráfico icmp ... ¿Hay otros inconvenientes? ¿Hay un método más confiable?


89
2017-09-19 10:00


origen




Respuestas:


La mejor manera de saber si un servicio remoto dado está vivo es pedirle que atienda una solicitud de la forma en que debe hacerlo, de hecho, es la única manera de saber realmente que algo funciona correctamente.

Como ejemplo, siempre obtengo que mis balanceadores de carga obtengan una respuesta de 'cabeza' real de nuestros servidores web, usted podría hacer lo mismo para una pequeña selección en un cuadro de base de datos si quisiera, o lo que sea que sirva su servidor real. Como sugerencia, puede crear un 'online.txt' (o el nombre que quiera darle) en sus servidores web, haga que sus LB intenten obtener ese archivo y, si falla, quita el servidor del VIP, esto es una buena manera de eliminar manualmente servidores individuales de sus VIP simplemente cambiando el nombre de un solo archivo.

Ping solo prueba la capacidad de responder a pings, por lo que es el sistema operativo base, partes de la pila de IP y los enlaces físicos, pero eso es todo, todo lo demás podría estar caído y no lo sabrías.

Sé que esto se menciona a continuación, pero vale la pena repetirlo una y otra vez.

Las solicitudes de eco de ICMP (también conocidas como "Pings") (también conocidas como ICMP Tipo 8) están integradas en la especificación de pila de IP, sí, pero no se requiere que sean implementadas o utilizadas. De hecho, hay una gran cantidad de proveedores de Internet que se niegan a reenviarlos y a descartar esas solicitudes en silencio, ya que son una forma de ataque a la red (llamada pingflood).

Como se mencionó anteriormente, esto es manejado por el sistema operativo (específicamente a nivel de pila de red) y por lo tanto, depende de la configuración del sistema operativo responder a esos o no. Si está desactivado (¿una precaución de seguridad?), No puede hacer nada para recibir respuestas de ping desde el otro extremo. Por eso no es confiable.


137
2017-09-19 10:10



¡Qué dijo el hombre! Siempre aconsejo a los clientes que la mejor manera de saber si un servidor está ofreciendo actualmente el servicio X es solicitar servicio X. - MadHatter
En realidad, construimos una API RESTful de "prueba" en nuestras aplicaciones sólo para esto. Entonces, sabemos que si una aplicación responde a blah / whatever_app / pulse, está habilitada, atiende las solicitudes y tiene todas las herramientas que necesita (DB, dependencias, etc.) - tsykoduk
Para agregar a MadHatter, a menudo es una buena idea hacer un ping y una solicitud. De esta manera, puede saber de inmediato si se trata de conectividad de red o de una interrupción del servicio ... Cualquiera de los dos tiende a crear cosas completamente diferentes a las otras. - user606723
Ping ni siquiera es una prueba confiable de que el servidor mismo puede responder al ping. Si no lo hace, todo lo que sabe es que hay algo entre usted y el filtro de tráfico ICMP. - Rob Moir
Suponiendo que la máquina responde al ping en circunstancias normales, puede usar el ping como una especie de filtro de floración: si el ping falla, el servicio está definitivamente inactivo (tiene un problema de red, ya que hemos establecido que el ping funciona normalmente). Sin embargo, si el ping se realiza correctamente, el servicio aún podría estar inactivo como se describe en esta respuesta - 3Doubloons


La mayoría de las veces, sí, sin embargo:

  • algunos servidores bloquean las solicitudes de ping

  • solo porque el servidor esta respondiendo no significa automáticamente el sitio web (o cualquier servicio que espere utilizar) está trabajando, también debe verificar si la respuesta coincide con los contenidos esperados.


10
2017-09-19 10:08





Es cierto que en muchas ocasiones el tráfico ICMP se filtra, por lo que podría ser poco confiable ...

Quizás una mejor manera podría ser telnet el servidor en el puerto de servicio en el que está interesado.

es decir, telnet 127.0.0.1 8080


5
2017-09-19 10:07





Si solo se requiere que el servidor responda a pings, este es un buen método para determinar su disponibilidad. Si es necesario proporcionar, por ejemplo, un servicio web, debe realizar algún tipo de prueba para ver si funciona de manera similar para los servicios de archivos, etc.


5
2017-09-19 10:10





ping tiene 2 inconvenientes:

  • ping envía icmp, que puede ser filtrado por el firewall
  • el puerto tcp o udp que utiliza su aplicación puede estar ocupado o no abierto: ping no comprueba que

una mejor solución es verificar su puerto udp / tcp directamente, para ver si el servicio todavía está disponible ... :-)


3
2017-09-19 19:20





Hay herramientas especiales para pruebas y monitoreo como Nagios / Icinga.
Con estas herramientas puede (por supuesto) realizar comprobaciones con varias pruebas de ping, pero también realizar comprobaciones de sus servicios.

Todas las comprobaciones pueden usar el valor devuelto para clasificar el resultado como "bueno", "advertencia" y "crítico" y se pueden escribir en casi todos los lenguajes de programación.

Por supuesto, no es fácil de configurar (como apuntar y hacer clic), pero es personalizable, confiable y extensible. Funciona bien en varias distribuciones de Linux y Unix.


3
2017-09-19 18:24





Pruebe los servicios que está buscando, solo hacer ping a un servidor no significa que los servicios estén funcionando.

Por ejemplo:

Imagine un servidor web con una docena de sitios web, entonces necesito saber si los sitios web están UP, hice un pequeño script en PHP y lo ejecuté cada 10 minutos.

El script hace lo siguiente ->

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





El uso de ping para determinar si un servidor está disponible es como un médico de urgencias que verifica si un paciente está respirando. Sí, es un buen lugar para comenzar, pero puede haber otros problemas.


2
2017-09-19 18:39





Sólo mis dos centavos: Tenemos una aplicación heredada que usa este método, y tuvimos que darle servicio porque el ping era no suficiente para determinar la disponibilidad del servicio.

Ping simplemente muestra que el servidor es capaz de escuchar, pero en nuestro caso el servicio no pudo iniciarse sin la intervención humana.

Como resultado, las unidades, que asumían ingenuamente que el servidor estaba disponible, estaban intentando conectarse y agotarse. En lugar de mostrar nuestro mensaje "El servidor no está disponible".

-

Nuestra aplicación actual, que se comunica a través de XMLHTTPRequests a un servidor web, envía un mensaje formado que el servidor responderá con un código de estado. El código de estado lo calcula el servidor haciendo varias comprobaciones para asegurarse de que varios subsistemas están en línea (DB, los directorios necesarios se pueden escribir, etc.)


0
2017-08-24 23:59





Si, en circunstancias normales, su servidor responde al ping, es útil hacer ping a intervalos de un minuto para verificar si responde. Esto, por supuesto, solo le dice que hay un servidor en esa dirección IP y que hay una ruta de red desde la fuente del ping al destino. Establecer un umbral para el tiempo de respuesta puede permitirle también monitorear el estado de la red. Si está haciendo ping a un servidor en Internet, es posible que haya poco que pueda hacer para arreglar la red, pero si un cliente llama para quejarse, ya estará al tanto del problema. Hacer ping en google.com además también es útil. Si usted y Google están abajo, algo está sucediendo.

Como han mencionado otros, es importante controlar que el servicio que está brindando esté respondiendo y que su rendimiento sea correcto. Es decir. es posible que desee comprobar por qué una era web que normalmente responde en un segundo ahora responde. Tengo 10 segundos.

Por lo tanto, saber que un servicio no está respondiendo y está fallando el ping le brinda mucha más información que solo un enfoque. Además, si también supervisa los procesos, sabiendo que ping responde, el servicio no responde y el servidor web no tiene la cantidad correcta de procesos que le indican dónde buscar primero.

Puede volverse loco con el monitoreo, así que solo monitoree lo suficiente como para decirle cuándo sucedió algo malo o si se está poniendo peligroso. Es decir. demasiado intercambio,> 90% de uso de disco, alto io de disco, 100% de CPU por períodos prolongados y recuerde que el monitoreo es solo un ataque de denegación de servicio que se lleva a cabo muy lentamente.


0
2017-10-18 02:57