Есть ли замена 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
Вы можете добавлять метки времени с помощью perl следующим образом:
ping 127.0.0.1 | perl -pe 'BEGIN {use POSIX;} print strftime("%Y-%m-%d %H:%M:%S ", localtime)'
Вот решение bash :)
$ ping localhost | while read line ; do echo -e "$(date)\t $line" ; done Tue Nov 3 04:46:26 MSK 2009 PING localhost (127.0.0.1) 56(84) bytes of data. Tue Nov 3 04:46:26 MSK 2009 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.033 ms Tue Nov 3 04:46:27 MSK 2009 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.040 ms Tue Nov 3 04:46:28 MSK 2009 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.046 ms Tue Nov 3 04:46:29 MSK 2009 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.046 ms
Теперь давайте сделаем date
команда производит немного более приятный результат:
$ ping localhost | while read line ; do echo -e "$(date +%H:%I:%S)\t $line" ; done 04:04:13 PING localhost (127.0.0.1) 56(84) bytes of data. 04:04:13 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.044 ms 04:04:14 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.039 ms 04:04:15 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.042 ms
Ура!
Более «тяжелый» вариант, который мы используем для регулярной проверки задержки и потери пакетов: Копчение. Он не только дает вам немного больше информации в более удобном для чтения формате, но вы также можете выполнять такие вещи, как проверки HTTP и DNS, вместо того, чтобы полагаться на ICMP. Многие брандмауэры и маршрутизаторы отменяют приоритет ICMP, что приводит к ошибочным измерениям задержки.
Для 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
Воспользуемся встроенной оболочкой 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
.