リアルタイムを表示するping置換


9

往復時間とシーケンス番号に加えてシステムの日付/時刻を表示するping置換はありますか?私はLinuxで実行できるツールを好みますが、Windowsで実行できるcliツールがあればそれも良いでしょう。

ユーザーが断続的に一時停止していると報告しているシステムがあります。これは常に発生するとは思われません。レポートのユーザーに、一時停止をログに関連付けることができるほど十分に具体的に発生したことを通知させることができませんでした。

技術者の1人がホストに対してpingを1日実行したままにしました。ある時点で往復時間がかなり長くなりました。これがいつ発生するかを正確に把握するために、どのログエントリを調べるべきかを絞り込み、この一時停止を、パフォーマンスログやデバイスログなどと収集できる他のデータと関連付けることができます。

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

回答:


12

次のようにperlを使用してタイムスタンプを追加できます。

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

1
それはほとんど簡単です!:)私はこれを約30分間検索しましたが、あまり良い結果は得られませんでした、ありがとう!
l0c0b0x 2009年

12

これがbashソリューションです:)

$ ping localhost | 行を読みながら; do echo -e "$(date)\ t $ line"; 終わった
11月3日火曜日04:46:26 MSK 2009 PING localhost(127.0.0.1)56(84)バイトのデータ。
11月3日火曜日04:46:26 MSK 2009ローカルホストからの64バイト(127.0.0.1):icmp_seq = 1 ttl = 64 time = 0.033 ms
11月3日火曜日04:46:27 MSK 2009ローカルホストからの64バイト(127.0.0.1):icmp_seq = 2 ttl = 64 time = 0.040 ms
11月3日火曜日04:46:28 MSK 2009ローカルホストからの64バイト(127.0.0.1):icmp_seq = 3 ttl = 64 time = 0.046 ms
11月3日火曜日04:46:29 MSK 2009ローカルホストからの64バイト(127.0.0.1):icmp_seq = 4 ttl = 64 time = 0.046 ms

ここで、dateコマンドがもう少し良い出力を生成するようにしましょう:

$ ping localhost | 行を読みながら; do echo -e "$(date +%H:%I:%S)\ t $ line"; 終わった
04:04:13 PING localhost(127.0.0.1)56(84)バイトのデータ。
04:04:13ローカルホストからの64バイト(127.0.0.1):icmp_seq = 1 ttl = 64 time = 0.044 ms
04:04:14ローカルホストからの64バイト(127.0.0.1):icmp_seq = 2 ttl = 64 time = 0.039 ms
04:04:15ローカルホストからの64バイト(127.0.0.1):icmp_seq = 3 ttl = 64 time = 0.042 ms

乾杯!


Pedantic:dateコマンドは外部コマンドであり、bashに組み込まれていないため、ネイティブとは言えません。気づいていない場合(気づいているかもしれませんが、わかりません)、組み込みのコマンドがあることとないことを理解することが重要であるため、私はそれを指摘するだけです。それでも良い解決策ですが:-)
カイル・ブラント

1
また、必要ありませんwhile [ 0 ]ping google.com | while read line; do echo -e "$(date) $line"; done
カイルブラント

5

レイテンシとパケット損失の定期的なチェックを行うために使用する「より重い」オプションはSmokepingです。ICMPに依存する代わりに、読みやすい形式でもう少し多くの情報を提供するだけでなく、HTTPやDNSのチェックなどを行うこともできます。多くのファイアウォールとルーターはICMPの優先順位を下げ、誤った遅延測定を引き起こします。

喫煙


優れたツールですが、スクリプトよりも重いですが、さまざまなシステムを監視するためにセットアップするだけでもよいでしょう。
sclarson、2009年

2

Linuxの場合は、インストールmoreutilsしてください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

より重いインタープリターを呼び出したり、すべての行に新しいプロセスを生成したりすることを避けるためにprintf%(datefmt)Tフォーマット仕様を組み込んだシェルを使用してみましょうdate

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

perlの例のように、これはsedとawkにパイプすることでも実行できます。ts最も簡単だと思いますが、サーバーにはありません。busyboxのような環境でも同じです。

コマンドが出力をバッファリングする場合は、を使用できますunbuffer

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.