2

感谢 Dennis Williamson 的出色工作,我现在能够通过 ethtool -S 输出计算无限数量的 NIC 的平均吞吐量。可在此处找到其详细信息:

计算滚动总数的吞吐量

现在,平均吞吐量是一个非常有用的调整工具,但是我还需要确定同一时间段内的最大流量突发。占流量的 95% 一切都很好,但是如果我无法对每个 NIC 看到的最大突发量进行简单/准确的测量,我就无法占其他 5% 的时间。

Dennis 都是用 awk 写的,很遗憾我不太精通。我无法修改他现有的代码来做我想做的事。是否可以在 bash 中执行此操作?

作为参考,您可以在此处找到我们需要解析的示例日志文件:http: //pastebin.com/p1pwZeBN

丹尼斯的代码在这里:

awk '
BEGIN {
    OFMT = "%.4f"
}

/^[[:blank:]]*$/ { next }

! ($1 in prevrx) {
    prevrx[$1] = $2
    prevtx[$1] = $3
    next
}
{
    count[$1]++
    drx = $2 - prevrx[$1]
    dtx = $3 - prevtx[$1]
    rx[$1] += drx
    tx[$1] += dtx
    prevrx[$1] = $2
    prevtx[$1] = $3
}
END {
    for (iface in rx) {
        print iface, rx[iface] / count[iface], tx[iface] / count[iface]
    }
}'

感谢您的所有帮助!:)

编辑:: 作为一个例子来帮助详细说明我想看到的内容。如果新脚本可以解析日志文件(例如,对于 DMZ 入站),它应该确定最大的 delta 在 IE 的第 121 行和第 113 行之间:

DMZ      36195731362 vs DMZ      36195255177
= 668659 / 131072 = 5.1~mbps
4

2 回答 2

1

这是未经测试的,但一些小的更改应该可以工作:

awk '
BEGIN {
    OFMT = "%.4f"
}

/^[[:blank:]]*$/ { next }

! ($1 in prevrx) {
    prevrx[$1] = $2
    prevtx[$1] = $3
    next
}
{
    count[$1]++
    drx = $2 - prevrx[$1]
    dtx = $3 - prevtx[$1]
    rx[$1] += drx
    tx[$1] += dtx
    prevrx[$1] = $2
    prevtx[$1] = $3
    if (drx > maxdrx[$1]) {
        maxdrx[$1] = drx
    }
    if (dtx > maxdtx[$1]) {
        maxdtx[$1] = dtx
    }
}
END {
    for (iface in rx) {
        print iface, rx[iface] / count[iface], tx[iface] / count[iface], maxdrx[iface], maxdtx[iface]
    }
}'
于 2012-06-14T16:24:09.147 回答
0

为什么不将数据收集与处理分开。使用 bash 工具等获取数据。然后使用更适合数据可视化/处理等的工具进行分析。Matlab、Mathematica、Octave、R、Scipy,甚至 JMP。

并不是说这里的awk 不给力,只是当出现问题时你会怎么做,你必须调试那个脚本。如果/当您处于这种情况下,为数据处理和分析量身定制的语言将有更多工具来帮助您。

于 2012-06-16T22:02:15.637 回答