Заміна Ping, яка відображається в режимі реального часу


9

Чи є заміна ping, яка відображатиме дату / час системи на додаток до часу подорожі та порядкового номера? Я б віддав перевагу інструменту, який працює на Linux, але якщо є інструмент cli, я можу запустити і в Windows, що було б добре.

Є система, про яку користувачі повідомляють, періодично призупиняється . Здається, це не відбувається в будь-який послідовний час. Мені не вдалося змусити користувача, який звітує, повідомити, коли це сталося з достатньою специфікою, щоб мати можливість співвіднести паузу з будь-якими журналами.

Один із техніків залишив пінг, який біг проти господаря на добу. Час кругової поїздки в один момент часу став досить великим. Я намагаюся з’ясувати, коли саме це відбувається, щоб я міг звузити записи журналу, які мені слід дивитись, і, можливо, співвіднести цю паузу з іншими даними, які я міг би зібрати за допомогою журналів продуктивності, журналів пристроїв тощо.

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

12

Ось баш-рішення :)

$ ping localhost | під час читання рядка; do echo -e "$ (дата) \ t $ рядок"; зроблено
Чт 3 листопада 04:46:26 MSK 2009 PING localhost (127.0.0.1) 56 (84) байт даних.
Чт 3 листопада 04:46:26 MSK 2009 64 байти з localhost (127.0.0.1): icmp_seq = 1 ttl = 64 час = 0,033 мс
Чт 3 листопада 04:46:27 MSK 2009 64 байти з localhost (127.0.0.1): icmp_seq = 2 ttl = 64 час = 0,040 мс
Чт 3 листопада 04:46:28 MSK 2009 64 байти з localhost (127.0.0.1): icmp_seq = 3 ttl = 64 час = 0,046 мс
Чт 3 листопада 04:46:29 MSK 2009 64 байти з localhost (127.0.0.1): icmp_seq = 4 ttl = 64 час = 0,046 мс

Тепер давайте зробимо dateкоманду продукувати трохи приємніший результат:

$ ping localhost | під час читання рядка; do echo -e "$ (дата +% H:% I:% S) \ t $ рядок"; зроблено
04:04:13 PING localhost (127.0.0.1) 56 (84) байт даних.
04:04:13 64 байти з localhost (127.0.0.1): icmp_seq = 1 ttl = 64 час = 0,044 мс
04:04:14 64 байти з localhost (127.0.0.1): icmp_seq = 2 ttl = 64 час = 0,039 мс
04:04:15 64 байти з localhost (127.0.0.1): icmp_seq = 3 ttl = 64 час = 0,042 мс

Ура!


Педантичний: Я б не сказав рідним, тому що команда дата є зовнішньою командою, а не вбудованою в баш. Я лише зазначаю це, тому що якщо ви не знаєте (можливо, ви не знаю), важливо розуміти, що є вбудовані та не вбудовані команди. Але все-таки хороше рішення :-)
Кайл Брандт

1
Також не потрібно while [ 0 ]:ping google.com | while read line; do echo -e "$(date) $line"; done
Кайл Брандт

5

"Важчий" варіант, який ми використовуємо для регулярної перевірки затримки та втрати пакетів, - це куріння . Це не тільки дає вам трохи більше інформації у легшому для читання форматі, але ви також можете робити такі речі, як перевірка HTTP та DNS, замість того, щоб покладатися на ICMP. Багато брандмауерів та маршрутизаторів знецінюють пріоритетність ICMP, що призводить до помилкових вимірювань затримки.

Куріння


Чудовий інструмент, хоча важчий за сценарії, але також може бути приємним просто налаштування для моніторингу різних систем.
sclaron

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це найпростіше, але у нас цього немає на наших серверах. Те саме для середовищ, як зайнятий.

Якщо ваша команда буферизує вихід, ви можете використовувати unbuffer.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.