Remplacement du ping qui montre en temps réel

9

Existe-t-il un remplacement de ping qui affichera la date / heure du système en plus de l'heure d'aller-retour et du numéro de séquence? Je préférerais un outil qui fonctionne sous Linux, mais s'il y a un outil cli, je peux exécuter sous Windows, ce serait bien aussi.

Il existe un système dont les utilisateurs signalent une pause intermittente . Cela ne semble pas se produire à un moment cohérent. Je n'ai pas été en mesure de faire en sorte que l'utilisateur déclarant dise quand cela s'est produit avec suffisamment de spécificité pour pouvoir corréler la pause à tous les journaux.

L'un des techniciens a laissé un ping s'exécuter contre l'hôte pendant une journée. Le temps d'aller-retour est devenu assez grand à un moment donné. J'essaie de savoir quand cela se produit exactement afin que je puisse restreindre les entrées de journal que je devrais consulter, et éventuellement corréler cette pause avec d'autres données que je pourrais être en mesure de collecter avec les journaux de performances, les journaux de périphériques, 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
la source

Réponses:

12

Vous pouvez ajouter des horodatages en utilisant perl comme ceci:

ping 127.0.0.1 | perl -pe 'BEGIN {use POSIX;} print strftime("%Y-%m-%d %H:%M:%S ", localtime)'
Gleb
la source
1
C'est presque trop facile! :) J'ai cherché cela pendant près de 30 minutes avec peu de bons résultats, merci!
l0c0b0x
12

Voici une solution bash :)

$ ping localhost | pendant la lecture de la ligne; do echo -e "$ (date) \ t $ line"; terminé
Mar 3 nov 04:46:26 MSK 2009 PING localhost (127.0.0.1) 56 (84) octets de données.
Mar 3 nov 04:46:26 MSK 2009 64 octets de localhost (127.0.0.1): icmp_seq = 1 ttl = 64 time = 0,033 ms
Mar 3 novembre 04:46:27 MSK 2009 64 octets de localhost (127.0.0.1): icmp_seq = 2 ttl = 64 time = 0,040 ms
Mar 3 nov 04:46:28 MSK 2009 64 octets de localhost (127.0.0.1): icmp_seq = 3 ttl = 64 time = 0,046 ms
Mar 3 nov 04:46:29 MSK 2009 64 octets de localhost (127.0.0.1): icmp_seq = 4 ttl = 64 time = 0,046 ms

Maintenant, faisons en sorte que la datecommande produise un résultat un peu plus agréable:

$ ping localhost | pendant la lecture de la ligne; do echo -e "$ (date +% H:% I:% S) \ t $ line"; terminé
04:04:13 PING localhost (127.0.0.1) 56 (84) octets de données.
04:04:13 64 octets de localhost (127.0.0.1): icmp_seq = 1 ttl = 64 time = 0,044 ms
04:04:14 64 octets de localhost (127.0.0.1): icmp_seq = 2 ttl = 64 time = 0,039 ms
04:04:15 64 octets de localhost (127.0.0.1): icmp_seq = 3 ttl = 64 time = 0,042 ms

À votre santé!

kolypto
la source
Pedantic: Je ne dirais pas natif car la commande date est une commande externe, et non intégrée à bash. Je le signale seulement parce que si vous n'êtes pas au courant (vous l'êtes peut-être, je ne sais pas), il est important de réaliser qu'il existe des commandes intégrées et non intégrées. Encore une bonne solution :-)
Kyle Brandt
1
Vous n'avez pas non plus besoin de while [ 0 ]:ping google.com | while read line; do echo -e "$(date) $line"; done
Kyle Brandt
5

Une option «plus lourde» que nous utilisons pour vérifier régulièrement la latence et la perte de paquets est Smokeping . Non seulement cela vous donne un peu plus d'informations dans un format plus facile à lire, mais vous pouvez également faire des choses comme les vérifications HTTP et DNS au lieu de compter sur ICMP. De nombreux pare-feu et routeurs ne prioriseront pas ICMP, ce qui entraînera de fausses mesures de latence.

Fumer

Doug Luxem
la source
Excellent outil, bien que plus lourd que les scripts, il peut également être agréable de simplement le configurer pour surveiller divers systèmes.
sclarson
2

Pour Linux, installez moreutilsqui vous donnera 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
la source
0

Utilisons le shell intégré printfavec la %(datefmt)Tspécification de format pour éviter d'appeler des interprètes plus lourds ou de générer un nouveau dateprocessus pour chaque ligne.

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

Comme l'exemple perl, cela peut aussi être fait en canalisant sed et awk. Je pense que tsc'est le plus simple, mais nous ne l'avons pas sur nos serveurs. Idem pour les environnements tels que busybox.

Si votre commande met en mémoire tampon sa sortie, vous pouvez l'utiliser unbuffer.

Amit Naidu
la source