linux - 如何通过linux命令获取某个接口(interface)的统计信息?

标签 linux tcp statistics

我们知道一些 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/

相关文章:

Linux:环回接口(interface)上的传入数据包

linux - 如何以定义的延迟复制文件集

mysql - 将 Linux 命令转换为 Windows (mysql)

c# - 为什么套接字被阻止接收,而我在另一个线程上 sleep ?

java - Java 中的 TCP 传输非常慢

python - 时间序列预测: need help using series with different periods of days

r - 如何在 R 中读取 .sav SPSS 文件?

linux - 在 bash 脚本中合并 csv 列

AppFog 上的 Node.js TCP 套接字服务器

r - 如何不从 R 中的数据中选择观察结果