Reemplazo de ping que muestra en tiempo real

9

¿Existe un reemplazo de ping que muestre la fecha / hora del sistema además del tiempo de ida y vuelta y el número de secuencia? Preferiría una herramienta que se ejecute en Linux, pero si hay una herramienta cli que puedo ejecutar en Windows, eso también sería bueno.

Hay un sistema que los usuarios informan está pausando intermitentemente . Esto no parece suceder en ningún momento constante. No he podido hacer que el usuario informante diga cuándo sucedió con suficiente especificidad para poder correlacionar la pausa con los registros.

Uno de los técnicos dejó un ping en ejecución contra el host durante un día. El tiempo de ida y vuelta se hizo bastante grande en un momento dado. Estoy tratando de averiguar cuándo sucede exactamente esto para poder reducir las entradas de registro que debería mirar, y posiblemente correlacionar esta pausa con otros datos que pueda recopilar con registros de rendimiento, registros de dispositivos, etc.

64 bytes from 10.2.4.241: icmp_seq=1825 ttl=64 time=0.321 ms
64 bytes from 10.2.4.241: icmp_seq=1826 ttl=64 time=0.371 ms
64 bytes from 10.2.4.241: icmp_seq=1827 ttl=64 time=13937.638 ms
64 bytes from 10.2.4.241: icmp_seq=1828 ttl=64 time=12937.526 ms
64 bytes from 10.2.4.241: icmp_seq=1829 ttl=64 time=11937.392 ms
64 bytes from 10.2.4.241: icmp_seq=1830 ttl=64 time=10937.275 ms
...
64 bytes from 10.2.4.241: icmp_seq=1840 ttl=64 time=936.073 ms
64 bytes from 10.2.4.241: icmp_seq=1841 ttl=64 time=0.410 ms
Zoredache
fuente

Respuestas:

12

Puede agregar marcas de tiempo usando perl como este:

ping 127.0.0.1 | perl -pe 'BEGIN {use POSIX;} print strftime("%Y-%m-%d %H:%M:%S ", localtime)'
Gleb
fuente
1
Eso es casi demasiado fácil! :) Busqué esto por casi 30 minutos con pocos buenos resultados, ¡gracias!
l0c0b0x
12

Aquí hay una solución bash :)

$ ping localhost | mientras lee la línea; do echo -e "$ (fecha) \ t $ línea"; hecho
Martes 3 de noviembre 04:46:26 MSK 2009 PING localhost (127.0.0.1) 56 (84) bytes de datos.
Martes 3 de noviembre 04:46:26 MSK 2009 64 bytes de localhost (127.0.0.1): icmp_seq = 1 ttl = 64 tiempo = 0.033 ms
Martes 3 de noviembre 04:46:27 MSK 2009 64 bytes desde localhost (127.0.0.1): icmp_seq = 2 ttl = 64 tiempo = 0.040 ms
Mar 3 de noviembre 04:46:28 MSK 2009 64 bytes desde localhost (127.0.0.1): icmp_seq = 3 ttl = 64 tiempo = 0.046 ms
Mar 03 de noviembre 04:46:29 MSK 2009 64 bytes de localhost (127.0.0.1): icmp_seq = 4 ttl = 64 tiempo = 0.046 ms

Ahora, hagamos que el datecomando produzca un resultado un poco más agradable:

$ ping localhost | mientras lee la línea; do echo -e "$ (fecha +% H:% I:% S) \ t $ línea"; hecho
04:04:13 PING localhost (127.0.0.1) 56 (84) bytes de datos.
04:04:13 64 bytes de localhost (127.0.0.1): icmp_seq = 1 ttl = 64 tiempo = 0.044 ms
04:04:14 64 bytes de localhost (127.0.0.1): icmp_seq = 2 ttl = 64 tiempo = 0.039 ms
04:04:15 64 bytes de localhost (127.0.0.1): icmp_seq = 3 ttl = 64 tiempo = 0.042 ms

¡Salud!

Kolypto
fuente
Pedantic: No diría nativo porque el comando date es un comando externo y no está integrado en bash. Solo lo señalo porque si no está al tanto (puede que lo esté, no lo sé), es importante darse cuenta de que hay comandos incorporados y no incorporados. Sin embargo, sigue siendo una buena solución :-)
Kyle Brandt
1
Tampoco necesito while [ 0 ]:ping google.com | while read line; do echo -e "$(date) $line"; done
Kyle Brandt el
5

Una opción "más pesada" que utilizamos para realizar comprobaciones periódicas de latencia y pérdida de paquetes es Smokeping . No solo le brinda un poco más de información en un formato más fácil de leer, sino que también puede hacer cosas como verificaciones HTTP y DNS en lugar de confiar en ICMP. Muchos firewalls y enrutadores eliminarán la prioridad de ICMP, lo que dará como resultado mediciones de latencia falsas.

Fumar

Doug Luxem
fuente
Gran herramienta, aunque es más pesada que las secuencias de comandos, también puede ser agradable configurarla para monitorear varios sistemas.
sclarson el
2

Para Linux, instale lo moreutilsque le dará ts.

$ ping nu.nl | ts
jan 29 14:39:51 PING nu.nl (62.69.166.254) 56(84) bytes of data.
jan 29 14:39:51 64 bytes from 62-69-166-254.ptr.as24646.net (62.69.166.254): icmp_seq=1 ttl=247 time=29.8 ms
jan 29 14:39:52 64 bytes from 62-69-166-254.ptr.as24646.net (62.69.166.254): icmp_seq=2 ttl=247 time=29.4 ms
Willem
fuente
0

Usemos el shell incorporado printfcon la %(datefmt)Tespecificación de formato para evitar llamar a intérpretes más pesados ​​o generar un nuevo dateproceso para cada línea.

ping -c4 localhost | while read line; do printf "%([%Y-%m-%dT%H:%M:%S])T %s\n" "-1" "$line"; done

Al igual que en el ejemplo de Perl, esto se puede hacer canalizando a sed y awk también. Creo que tses lo más fácil, pero no tenemos eso en nuestros servidores. Lo mismo para entornos como busybox.

Si su comando amortigua su salida, puede usar unbuffer.

Amit Naidu
fuente