我们知道一些 linux 命令可以获取 tcp 统计信息,例如“netstat -s --tcp”,“ss -s -t”,但是如何获取特定接口(interface)的统计信息?
最佳答案
您可以使用 tcpstat
:
tcpstat - report network interface statistics
tcpstat -i <interface>
如果你想在界面启动时启动它,你可以使用post-up
在 /etc/network/interfaces
:
auto enp4s0f1
iface enp4s0f1 inet dhcp
post-up /etc/init.d/tcpstat start enp4s0f1
/etc/init.d/tcpstat
是一个 init.d
脚本,我创建了包含:
#!/bin/bash
#title :tcpstat
#description :start/stop/restart tcpstat
#########################################
### install : cp tcpstat /etc/init.d/
# update-rc.d tcpstat defaults
### uninstall : update-rc.d -f tcpstat remove
usage(){
echo "Usage: service tcpstat {start|stop|restart} <interface>"
}
DEFAULT_LOCATION="/tmp/dump"
EXEC="/bin/tcpstat_run"
if [ ! -z "$2" ]; then
if [ ! -z "$3" ]; then
STORAGE_FILE="$3"
else
STORAGE_FILE="${DEFAULT_LOCATION}_$2"
fi
if [ -f $PID_FILE ]; then
echo "file exist"
fi
case "$1" in
start)
echo "Starting tcpstat service on inteface $2..."
daemonize -E INTERFACE=$2 -E DUMP_FILE=$STORAGE_FILE $EXEC
echo -e "\E[31;33m[ OK ]\E[0m"
;;
stop)
echo "Stopping tcpstat service..."
pkill -f "tcpstat -i $2"
echo -e "\E[31;33m[ OK ]\E[0m"
;;
restart|reload)
"$0" stop "$2"
"$0" start "$2"
;;
*)
usage
exit 1
esac
else
usage
fi
exit $?
请注意,我使用了 daemonize
而不是 start-stop-dameon
用于 RHEL 兼容性。
daemonize
启动位于 /bin/tcpstat_run
中的以下执行程序:
#!/bin/bash
tcpstat -i "$INTERFACE" > "$DUMP_FILE"&
您可以根据自己的喜好修改这些脚本,特别是如果您想在特定位置保存转储并在 post-down
中调用特殊处理.
例如,如果您按原样尝试,您将得到以下输出:
user@user:~$ tail -f /tmp/dump_enp4s0f1
Time:1468847225 n=9 avg=66.56 stddev=35.76 bps=958.40
Time:1468847230 n=9 avg=87.33 stddev=40.17 bps=1257.60
Time:1468847235 n=14 avg=130.50 stddev=66.08 bps=2923.20
Time:1468847240 n=3 avg=46.00 stddev=0.00 bps=220.80
Time:1468847245 n=12 avg=58.50 stddev=11.26 bps=1123.20
Time:1468847250 n=9 avg=115.78 stddev=78.32 bps=1667.20
Time:1468847255 n=169 avg=135.22 stddev=188.26 bps=36564.80
关于linux - 如何通过linux命令获取某个接口(interface)的统计信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38386939/