Penggantian ping yang menunjukkan waktu nyata

9

Apakah ada penggantian ping yang akan menampilkan tanggal / waktu sistem selain waktu perjalanan dan nomor urut? Saya lebih suka alat yang berjalan di Linux, tetapi jika ada alat cli saya bisa berjalan di Windows itu juga bagus.

Ada sistem yang pengguna laporkan sebentar-sebentar berhenti . Ini sepertinya tidak terjadi pada waktu yang konsisten. Saya belum bisa meminta pengguna pelaporan untuk mengetahui kapan hal itu terjadi dengan kekhususan yang cukup untuk dapat menghubungkan jeda dengan log apa pun.

Salah satu teknisi meninggalkan ping berlari melawan tuan rumah selama sehari. Waktu pulang pergi cukup besar pada satu titik waktu. Saya mencoba mencari tahu kapan tepatnya hal ini terjadi sehingga saya dapat mempersempit entri log mana yang harus saya lihat, dan mungkin menghubungkan jeda ini dengan data lain yang mungkin dapat saya kumpulkan dengan log kinerja, log perangkat dan sebagainya.

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
Sakit kepala
sumber

Jawaban:

12

Anda dapat menambahkan cap waktu menggunakan perl seperti ini:

ping 127.0.0.1 | perl -pe 'BEGIN {use POSIX;} print strftime("%Y-%m-%d %H:%M:%S ", localtime)'
Gleb
sumber
1
Itu hampir terlalu mudah! :) Saya mencari ini selama hampir 30 menit dengan hasil yang tidak banyak, terima kasih!
l0c0b0x
12

Inilah solusi bash :)

$ ping localhost | saat membaca baris; do echo -e "$ (date) \ t $ line"; selesai
Sel 3 Nov 04:46:26 MSK 2009 PING localhost (127.0.0.1) 56 (84) byte data.
Sel 3 Nov 04:46:26 MSK 2009 64 byte dari localhost (127.0.0.1): icmp_seq = 1 ttl = 64 waktu = 0,033 ms
Sel 3 Nov 04:46:27 MSK 2009 64 byte dari localhost (127.0.0.1): icmp_seq = 2 ttl = 64 waktu = 0,040 ms
Sel 3 Nov 04:46:28 MSK 2009 64 byte dari localhost (127.0.0.1): icmp_seq = 3 ttl = 64 waktu = 0,046 ms
Sel 3 Nov 04:46:29 MSK 2009 64 byte dari localhost (127.0.0.1): icmp_seq = 4 ttl = 64 waktu = 0,046 ms

Sekarang, mari kita membuat dateperintah menghasilkan output yang lebih bagus:

$ ping localhost | saat membaca baris; do echo -e "$ (tanggal +% H:% I:% S) \ t $ line"; selesai
04:04:13 PING localhost (127.0.0.1) 56 (84) byte data.
04:04:13 64 byte dari localhost (127.0.0.1): icmp_seq = 1 ttl = 64 waktu = 0,044 ms
04:04:14 64 byte dari localhost (127.0.0.1): icmp_seq = 2 ttl = 64 waktu = 0,039 ms
04:04:15 64 byte dari localhost (127.0.0.1): icmp_seq = 3 ttl = 64 waktu = 0,042 ms

Bersulang!

kolypto
sumber
Pedantic: Saya tidak akan mengatakan asli karena perintah tanggal adalah perintah eksternal, dan tidak dibangun untuk bash. Saya hanya menunjukkannya karena jika Anda tidak sadar (Anda mungkin, saya tidak tahu), menyadari bahwa ada perintah built-in dan tidak built-in adalah penting. Masih solusi yang baik meskipun :-)
Kyle Brandt
1
Juga tidak perlu while [ 0 ]:ping google.com | while read line; do echo -e "$(date) $line"; done
Kyle Brandt
5

Opsi "lebih berat" yang kami gunakan untuk melakukan pengecekan rutin latensi dan paket loss adalah Smokeping . Tidak hanya memberi Anda sedikit lebih banyak informasi dalam format yang lebih mudah dibaca, tetapi Anda juga dapat melakukan hal-hal seperti pemeriksaan HTTP dan DNS alih-alih mengandalkan ICMP. Banyak firewall dan router akan memprioritaskan ICMP yang menghasilkan pengukuran latensi palsu.

Perokok

Doug Luxem
sumber
Alat yang hebat, walaupun lebih berat dari skrip, itu juga bagus untuk pengaturan untuk memonitor berbagai sistem.
sclarson
2

Untuk Linux, instal moreutilsyang akan memberi Anda 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
sumber
0

Mari kita gunakan shell built-in printfdengan %(datefmt)Tspesifikasi format untuk menghindari memanggil penerjemah yang lebih berat atau menelurkan dateproses baru untuk setiap baris.

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

Seperti contoh perl, ini bisa dilakukan dengan mem-pip ke sed dan awk juga. Saya pikir tsitu yang termudah, tetapi kami tidak memilikinya di server kami. Sama untuk lingkungan seperti busybox.

Jika perintah Anda mendukung hasilnya, Anda dapat menggunakan unbuffer.

Amit Naidu
sumber