Substituição de ping que mostra em tempo real

9

Existe uma substituição de ping que exibirá a data / hora do sistema, além do tempo de ida e volta e do número de sequência? Eu preferiria uma ferramenta que roda no Linux, mas se houver uma ferramenta CLI, eu também posso rodar no Windows.

Existe um sistema que os usuários estão relatando fazendo uma pausa intermitente . Isso não parece acontecer em nenhum momento consistente. Não consegui que o usuário de relatórios soubesse quando isso aconteceu com especificidade suficiente para poder correlacionar a pausa a qualquer log.

Um dos técnicos deixou um ping rodando contra o host por um dia. O tempo de ida e volta ficou bastante grande em um ponto no tempo. Estou tentando descobrir quando exatamente isso acontece, para poder restringir as entradas de log que devo observar e possivelmente correlacionar essa pausa com outros dados que talvez eu possa coletar com logs de desempenho, logs de dispositivos e assim por diante.

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
fonte

Respostas:

12

Você pode adicionar registros de data e hora usando perl como este:

ping 127.0.0.1 | perl -pe 'BEGIN {use POSIX;} print strftime("%Y-%m-%d %H:%M:%S ", localtime)'
Gleb
fonte
1
Isso é fácil demais! :) Procurei por quase 30 minutos sem muitos bons resultados, obrigado!
L0c0b0x 03/11/2009
12

Aqui está uma solução bash :)

$ ping localhost | enquanto lê linha; echo -e "$ (date) \ t $ line"; feito
Ter 3 de novembro 04:46:26 MSK 2009 PING localhost (127.0.0.1) 56 (84) bytes de dados.
Ter 3 de novembro 04:46:26 MSK 2009 64 bytes do host local (127.0.0.1): icmp_seq = 1 ttl = 64 time = 0.033 ms
Ter 3 de novembro 04:46:27 MSK 2009 64 bytes do host local (127.0.0.1): icmp_seq = 2 ttl = 64 time = 0.040 ms
Ter 3 de novembro 04:46:28 MSK 2009 64 bytes do host local (127.0.0.1): icmp_seq = 3 ttl = 64 time = 0.046 ms
Ter 3 de novembro 04:46:29 MSK 2009 64 bytes do host local (127.0.0.1): icmp_seq = 4 ttl = 64 time = 0.046 ms

Agora, vamos fazer com que o datecomando produza uma saída um pouco mais agradável:

$ ping localhost | enquanto lê linha; echo -e "$ (data +% H:% I:% S) \ t $ line"; feito
04:04:13 PING localhost (127.0.0.1) 56 (84) bytes de dados.
04:04:13 64 bytes do host local (127.0.0.1): icmp_seq = 1 ttl = 64 time = 0.044 ms
04:04:14 64 bytes do host local (127.0.0.1): icmp_seq = 2 ttl = 64 time = 0.039 ms
04:04:15 64 bytes do host local (127.0.0.1): icmp_seq = 3 ttl = 64 time = 0.042 ms

Felicidades!

Kolypto
fonte
Pedantic: Eu não diria nativo, porque o comando date é um comando externo e não está embutido no bash. Apenas aponto porque, se você não está ciente (talvez não saiba), é importante perceber que há comandos internos e não internos. Ainda é uma boa solução, embora :-)
Kyle Brandt
1
Também não precisa do while [ 0 ]:ping google.com | while read line; do echo -e "$(date) $line"; done
Kyle Brandt
5

Uma opção "mais pesada" que usamos para verificar regularmente a latência e a perda de pacotes é o Smokeping . Além de fornecer um pouco mais de informações em um formato mais fácil de ler, você também pode fazer coisas como verificações HTTP e DNS, em vez de confiar no ICMP. Muitos firewalls e roteadores não priorizam o ICMP, resultando em medições de latência falsa.

Fumar

Doug Luxem
fonte
Ótima ferramenta, embora mais pesada que os scripts, também pode ser interessante configurar apenas para monitorar vários sistemas.
Sclarson
2

Para Linux, instale o moreutilsque lhe 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
fonte
0

Vamos usar o shell embutido printfcom a %(datefmt)Tespecificação de formato para evitar chamar intérpretes mais pesados ​​ou gerar um novo dateprocesso para cada linha.

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

Como no exemplo do perl, isso pode ser feito canalizando para sed e awk também. Eu acho que tsé o mais fácil, mas não temos isso em nossos servidores. O mesmo para ambientes como o busybox.

Se o seu comando armazenar em buffer sua saída, você poderá usar unbuffer.

Amit Naidu
fonte