tl;dr

ping の平均値(avg の部分)を取得して growthforecast で可視化したかったのでメモ。


ja.stackoverflow.com

ping の平均値を取得する

ping -c 5 8.8.8.8 | tail -1 | tee >(cut -d/ -f5) > /dev/null

実際に試してみると以下のような感じ。(通信環境が良くないところで実施したのでパケロスしている)

#
# まずは普通に ping
#
% ping -c 5 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=53 time=636.704 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=53 time=622.515 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=53 time=617.948 ms
Request timeout for icmp_seq 3

--- 8.8.8.8 ping statistics ---
5 packets transmitted, 3 packets received, 40.0% packet loss
round-trip min/avg/max/stddev = 617.948/625.722/636.704/7.986 ms

#
# 平均だけ取得
#
% ping -c 5 8.8.8.8 | tail -1 | tee >(cut -d/ -f5) > /dev/null
1963.132

ホントに平均値(avg)の値が取れているかも確認。

% ping -c 5 8.8.8.8 | tail -1  > ping.txt
% cat ping.txt| tee  >(cut -d/ -f5)
round-trip min/avg/max/stddev = 53.375/71.600/79.712/9.390 ms
71.600

可視化

以下のようなシェルスクリプトを書いて cron か何かで定期的によしなに…

#!/usr/bin/env bash

sec=`ping -c 5 8.8.8.8 | tail -1 | tee >(cut -d/ -f5) > /dev/null`
curl -s -F number=$(echo $sec | sed 's/.[0-9,]*$//g') http://xxxxxxxxxxxxxxxx:5125/api/ping/response_time/average

以上、メモでした。

元記事はこちら

ワンライナーで ping の平均値を取得するメモ