Замена пинга, показывающая в реальном времени

9

Существует ли замена пинга, которая будет отображать дату / время системы в дополнение к времени прохождения туда-обратно и порядковому номеру? Я бы предпочел инструмент, работающий в 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
Zoredache
источник

Ответы:

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

Вот решение Bash :)

$ ping localhost | во время чтения строки; do echo -e "$ (date) \ t $ line"; сделанный
Вт 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 $ line"; сделанный
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 мс

Ура!

kolypto
источник
Pedantic: Я бы не сказал «родной», потому что команда date - это внешняя команда, а не встроенная в bash. Я только указываю на это, потому что, если вы не знаете (возможно, я не знаю), важно понимать, что есть встроенные, а не встроенные команды. Тем не менее, хорошее решение :-)
Кайл Брандт
1
Также не нужно while [ 0 ]:ping google.com | while read line; do echo -e "$(date) $line"; done
Кайл Брандт
5

«Более тяжелая» опция, которую мы используем для регулярной проверки задержки и потери пакетов, - это Smokeping . Мало того, что он дает вам немного больше информации в более удобном для чтения формате, но вы также можете выполнять такие вещи, как проверки HTTP и DNS вместо того, чтобы полагаться на ICMP. Многие межсетевые экраны и маршрутизаторы будут расставлять приоритеты ICMP, что приведет к ошибочным измерениям задержки.

Smokeping

Дуг Люксем
источник
Отличный инструмент, хотя он тяжелее сценариев, но его также можно просто настроить для мониторинга различных систем.
Sclarson
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
Willem
источник
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.

Амит Найду
источник