Sostituzione del ping che mostra in tempo reale


9

Esiste un sostituto del ping che visualizzerà la data / ora del sistema oltre al tempo di andata e ritorno e al numero di sequenza? Preferirei uno strumento che funziona su Linux, ma se esiste uno strumento di cli che posso eseguire su Windows sarebbe anche buono.

Esiste un sistema in cui gli utenti segnalano una pausa intermittente . Questo non sembra accadere in qualsiasi momento coerente. Non sono stato in grado di indurre l'utente di reporting a dire quando è successo con una specificità sufficiente per poter correlare la pausa a qualsiasi registro.

Uno dei tecnici ha lasciato un ping in esecuzione contro l'host per un giorno. Il tempo di andata e ritorno è diventato piuttosto grande ad un certo punto nel tempo. Sto cercando di capire esattamente quando ciò accade, in modo da poter restringere le voci di registro che dovrei guardare e possibilmente correlare questa pausa con altri dati che potrei essere in grado di raccogliere con registri delle prestazioni, registri dei dispositivi e così via.

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

Risposte:


12

Puoi aggiungere i timestamp usando perl in questo modo:

ping 127.0.0.1 | perl -pe 'BEGIN {use POSIX;} print strftime("%Y-%m-%d %H:%M:%S ", localtime)'

1
È quasi troppo facile! :) Ho cercato questo per quasi 30 minuti con non molti buoni risultati, grazie!
l0c0b0x,

12

Ecco una soluzione bash :)

$ ping localhost | mentre leggi la riga; do echo -e "$ (data) \ t $ linea"; fatto
Mar 3 nov 04:46:26 MSK 2009 PING localhost (127.0.0.1) 56 (84) byte di dati.
Mar 3 nov 04:46:26 MSK 2009 64 byte da localhost (127.0.0.1): icmp_seq = 1 ttl = 64 tempo = 0.033 ms
Mar 3 nov 04:46:27 MSK 2009 64 byte da localhost (127.0.0.1): icmp_seq = 2 ttl = 64 tempo = 0.040 ms
Mar 3 nov 04:46:28 MSK 2009 64 byte da localhost (127.0.0.1): icmp_seq = 3 ttl = 64 tempo = 0.046 ms
Mar 3 nov 04:46:29 MSK 2009 64 byte da localhost (127.0.0.1): icmp_seq = 4 ttl = 64 tempo = 0.046 ms

Ora, facciamo in modo che il datecomando produca un output un po 'più piacevole:

$ ping localhost | mentre leggi la riga; do echo -e "$ (data +% H:% I:% S) \ t $ linea"; fatto
04:04:13 PING localhost (127.0.0.1) 56 (84) byte di dati.
04:04:13 64 byte da localhost (127.0.0.1): icmp_seq = 1 ttl = 64 tempo = 0.044 ms
04:04:14 64 byte da localhost (127.0.0.1): icmp_seq = 2 ttl = 64 tempo = 0.039 ms
04:04:15 64 byte da localhost (127.0.0.1): icmp_seq = 3 ttl = 64 tempo = 0.042 ms

Saluti!


Pedante: non direi nativo perché il comando date è un comando esterno e non integrato in bash. Lo sottolineo solo perché se non si è consapevoli (si potrebbe essere, non lo so), rendersi conto che ci sono comandi integrati e non integrati è importante. Comunque una buona soluzione :-)
Kyle Brandt,

1
Inoltre, non è necessario while [ 0 ]:ping google.com | while read line; do echo -e "$(date) $line"; done
Kyle Brandt,

5

Un'opzione "più pesante" che utilizziamo per effettuare controlli regolari della latenza e della perdita di pacchetti è Smokeping . Non solo ti dà un po 'più di informazioni in un formato più facile da leggere, ma puoi anche fare cose come i controlli HTTP e DNS invece di fare affidamento su ICMP. Molti firewall e router declasseranno le priorità dell'ICMP con conseguenti misurazioni della latenza errata.

Smokeping


Ottimo strumento, sebbene più pesante degli script, può anche essere bello da configurare per il monitoraggio di vari sistemi.
Sclarson,

2

Per Linux, installa moreutilsquale ti 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

0

Usiamo la shell integrata printfcon le %(datefmt)Tspecifiche del formato per evitare di chiamare interpreti più pesanti o generare un nuovo dateprocesso per ogni linea.

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

Come nell'esempio perl, questo può essere fatto anche tramite il piping su sed e awk. Penso che tssia il più semplice, ma non lo abbiamo sui nostri server. Lo stesso vale per ambienti come busybox.

Se il tuo comando bufferizza il suo output, puoi usarlo unbuffer.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.