2

Dennis Williamsonの壮大な作業のおかげで、ethtool-S出力を介して無限の数のNICの平均スループットを計算できるようになりました。詳細はこちらをご覧ください:

ローリングトータルでスループットを計算する

現在、平均スループットは非常に便利なサイジングツールですが、同じ期間のトラフィックの最大バーストも決定する必要があります。トラフィックの95%を占めることはすべてうまくいっていますが、各NICが確認する最大バーストの簡単で正確な測定値を取得できない場合、残りの5%を占めることはできません。

デニスはそれをすべて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インバウンドの場合)、最大のデルタが121行目と113行目のIEの間にあると判断する必要があります。

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 に答える