Ping-Ersatz, der Echtzeit anzeigt

9

Gibt es einen Ping-Ersatz, der zusätzlich zur Umlaufzeit und der Sequenznummer das Datum und die Uhrzeit des Systems anzeigt? Ich würde ein Tool bevorzugen, das unter Linux läuft, aber wenn es ein CLI-Tool gibt, das ich unter Windows ausführen kann, wäre das auch gut.

Es gibt ein System, von dem Benutzer berichten, dass es zeitweise pausiert . Dies scheint zu keinem konsistenten Zeitpunkt zu geschehen. Ich konnte den berichtenden Benutzer nicht dazu bringen, genau genug zu sagen, wann es passiert ist, um die Pause mit Protokollen zu korrelieren .

Einer der Techniker ließ einen Tag lang einen Ping gegen den Gastgeber laufen. Die Umlaufzeit wurde zu einem bestimmten Zeitpunkt ziemlich groß. Ich versuche herauszufinden, wann genau dies geschieht, damit ich eingrenzen kann, welche Protokolleinträge ich betrachten sollte, und diese Pause möglicherweise mit anderen Daten korrelieren kann, die ich möglicherweise mit Leistungsprotokollen, Geräteprotokollen usw. erfassen kann.

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
quelle

Antworten:

12

Sie können Zeitstempel mit Perl wie folgt hinzufügen:

ping 127.0.0.1 | perl -pe 'BEGIN {use POSIX;} print strftime("%Y-%m-%d %H:%M:%S ", localtime)'
Gleb
quelle
1
Das ist fast zu einfach! :) Ich habe fast 30 Minuten lang danach gesucht, mit nicht vielen guten Ergebnissen, danke!
l0c0b0x
12

Hier ist eine Bash-Lösung :)

$ ping localhost | während Zeile lesen; Echo -e "$ (Datum) \ t $ Zeile"; getan
Di 3. November 04:46:26 MSK 2009 PING localhost (127.0.0.1) 56 (84) Datenbytes.
Di Nov 3 04:46:26 MSK 2009 64 Bytes von localhost (127.0.0.1): icmp_seq = 1 ttl = 64 time = 0,033 ms
Di Nov 3 04:46:27 MSK 2009 64 Bytes von localhost (127.0.0.1): icmp_seq = 2 ttl = 64 time = 0.040 ms
Di Nov 3 04:46:28 MSK 2009 64 Bytes von localhost (127.0.0.1): icmp_seq = 3 ttl = 64 time = 0.046 ms
Di Nov 3 04:46:29 MSK 2009 64 Bytes von localhost (127.0.0.1): icmp_seq = 4 ttl = 64 time = 0,046 ms

Lassen Sie den dateBefehl nun eine etwas schönere Ausgabe erzeugen:

$ ping localhost | während Zeile lesen; echo -e "$ (Datum +% H:% I:% S) \ t $ line"; getan
04:04:13 PING localhost (127.0.0.1) 56 (84) Datenbytes.
04:04:13 64 Bytes von localhost (127.0.0.1): icmp_seq = 1 ttl = 64 time = 0,044 ms
04:04:14 64 Bytes von localhost (127.0.0.1): icmp_seq = 2 ttl = 64 time = 0,039 ms
04:04:15 64 Bytes von localhost (127.0.0.1): icmp_seq = 3 ttl = 64 time = 0,042 ms

Prost!

kolypto
quelle
Pedantic: Ich würde nicht native sagen, da der Date-Befehl ein externer Befehl ist und nicht in Bash integriert ist. Ich weise nur darauf hin, denn wenn Sie sich nicht bewusst sind (Sie könnten es sein, ich weiß es nicht), ist es wichtig zu erkennen, dass es eingebaute und nicht eingebaute Befehle gibt. Trotzdem eine gute Lösung :-)
Kyle Brandt
1
Benötigen Sie auch nicht die while [ 0 ]:ping google.com | while read line; do echo -e "$(date) $line"; done
Kyle Brandt
5

Eine "schwerere" Option, mit der wir regelmäßig die Latenz und den Paketverlust überprüfen, ist Smokeping . Sie erhalten nicht nur ein wenig mehr Informationen in einem besser lesbaren Format, sondern können auch HTTP- und DNS-Überprüfungen durchführen, anstatt sich auf ICMP zu verlassen. Viele Firewalls und Router setzen die Priorisierung von ICMP außer Kraft, was zu falschen Latenzmessungen führt.

Rauchen

Doug Luxem
quelle
Tolles Tool, das zwar schwerer als die Skripte ist, aber auch für die Überwachung verschiedener Systeme eingerichtet werden kann.
Sclarson
2

Installieren Sie unter Linux das, moreutilswas Sie erhalten 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
quelle
0

Lassen Sie sich verwenden Sie die Shell built-in printfmit der %(datefmt)TFormatspezifikation Aufruf schwere Dolmetscher zu vermeiden oder neuen dateLaichprozess für jede Zeile.

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

Wie im Perl-Beispiel kann dies auch durch Piping zu sed und awk erfolgen. Ich denke, das tsist am einfachsten, aber das haben wir nicht auf unseren Servern. Gleiches gilt für Umgebungen wie Busybox.

Wenn Ihr Befehl seine Ausgabe puffert, können Sie verwenden unbuffer.

Amit Naidu
quelle