Jamyy's Weblog

BASH: Timestamp Ping Results

by Jamyy on 三月.19, 2016, under Coding


目的: 於畫面上顯示 ping 時間與結果, 並同時將 latency 值寫成 csv 檔, 俾利產出圖表

#!/bin/bash

# 第一個參數作為 ping 目標
HOST=$1

# .csv 檔案產出路徑
CSVPATH=/home/myaccount

# 檢查有無設定參數 (ping 目標)
if [ -z "$HOST" ]; then

	# 若未給予參數, 提示指令用法
	echo "Usage: `basename $0` [HOST]"
	exit 1

fi

# 無窮迴圈, 直到 Ctrl + C 中斷執行
while :; do

	# ping 目標, 取出 ping 結果的 "bytes from" 字串
	RESULT=$(ping -W 1 -c 1 $HOST | grep "bytes from")

	# 取得當前日期與時間
	DATE=$(date '+%Y-%m-%d')
	TIME=$(date '+%H:%M:%S')

	if [ -n "$RESULT" ]; then

		# ping 成功的處理
		# 顯示現在時間, 並將輸出結果重新組合成 MS Windows 樣式
		echo -n $DATE $TIME Reply from $HOST: bytes=
		echo $RESULT | awk '{print $1,$7"ms",$6}' | sed 's/ttl/TTL/'

		# 將回應時間記錄於指定路徑, 以供試算表軟體產出 ping latency 圖表
		LATENCY=$(echo $RESULT | awk '{print $7}' | sed 's/time=//')
		echo $TIME, $LATENCY >> $CSVPATH/$DATE.csv

	else

		# ping 失敗的處理
		# 顯示現在時間以及 "Request timed out." 字串 (依然是 MS Windows Style)
		echo $DATE $TIME Request timed out.

		# 將回應時間設定為 -1 記錄於指定路徑, 以供試算表軟體產出 ping latency 圖表
		echo $TIME, -1 >> $CSVPATH/$DATE.csv
	fi

	sleep 1

done



csv 檔案繪製 ping latency 圖表範例

註: MS Office Excel 2007 無法繪製超過 32,000 節點的直線圖, 可改用 WPS Office Spreadsheets 讀入 .csv 檔案: 先圈選一小部份產生圖表後, 將圖表移動到獨立 sheet 再調整資料範圍, 即可繪製完整一天的折線圖 (八萬兩千多筆資料)



Ref: networking - Linux Ping: Show time out - Super User



Windows ping 同時顯示時間的作法可參考: 6 Ways to Timestamp Ping Results • Raymond.CC



:,