Você pode adicionar timestamps usando perl assim:
ping 127.0.0.1 | perl -pe 'BEGIN {use POSIX;} print strftime("%Y-%m-%d %H:%M:%S ", localtime)'
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 fosse executada no Linux, mas se houvesse uma ferramenta cli, eu poderia rodar no Windows, isso também seria bom.
Existe um sistema que os usuários estão relatando intermitentemente pausando . Isso não parece acontecer em nenhum momento consistente. Não consegui fazer com que o usuário do relatório informasse quando aconteceu com especificidade suficiente para poder correlacionar a pausa a qualquer registro.
Um dos técnicos deixou um ping correndo contra o host por um dia. O tempo de ida e volta ficou muito grande em um ponto no tempo. Eu estou tentando descobrir quando exatamente isso acontece para que eu possa limitar quais entradas de log eu deveria estar olhando e possivelmente correlacionar essa pausa com outros dados que eu possa coletar com logs de desempenho, dispositivo logs 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
Aqui está uma solução bash:)
$ ping localhost | while read line ; do echo -e "$(date)\t $line" ; done Tue Nov 3 04:46:26 MSK 2009 PING localhost (127.0.0.1) 56(84) bytes of data. Tue Nov 3 04:46:26 MSK 2009 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.033 ms Tue Nov 3 04:46:27 MSK 2009 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.040 ms Tue Nov 3 04:46:28 MSK 2009 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.046 ms Tue Nov 3 04:46:29 MSK 2009 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.046 ms
Agora, vamos fazer com que o comando date
produza uma saída um pouco mais legal:
$ ping localhost | while read line ; do echo -e "$(date +%H:%I:%S)\t $line" ; done 04:04:13 PING localhost (127.0.0.1) 56(84) bytes of data. 04:04:13 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.044 ms 04:04:14 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.039 ms 04:04:15 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.042 ms
Felicidades!
Uma opção "mais pesada" que usamos para verificar regularmente a latência e a perda de pacotes é Smokeping . Ele não apenas fornece um pouco mais de informações em um formato mais fácil de ler, mas também pode fazer coisas como verificações de HTTP e DNS em vez de confiar no ICMP. Muitos firewalls e roteadores irão priorizar o ICMP, resultando em falsas medições de latência.
Para Linux, instale moreutils
, que 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
Vamos usar o shell printf
incorporado com a especificação do formato %(datefmt)T
para evitar chamar intérpretes mais pesados ou criar um novo processo date
para cada linha.
ping -c4 localhost | while read line; do printf "%([%Y-%m-%dT%H:%M:%S])T %s\n" "-1" "$line"; done
Como o exemplo 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
.
Tags ping