iftopを使ってサーバーネットワークの送受信速度を監視したいと思います。これは私にとって効果的です。
iftop -t -s 1 -n -N | grep 'Total send and receive rate: ' | awk '{print $8}'
結果には、次のようにMacアドレスとIPが含まれます。
interface: eth0
IP address is: 192.254.78.90
MAC address is: 00:26:9e:b5:81:de
14.7Mb
最後の行だけが必要です。だからスクリプトを作成しました。
iftop -t -s 1 -n -N >> result.txt
cat result.txt | grep 'Total send and receive rate: ' | awk '{print $8}'
コマンドラインで使用すると正常に動作し、最後の行である「14.7Mb」のみが表示されます。一方、.shスクリプトとして使用すると、MACアドレスとIPがまだ含まれます。
問題を解決する方法をご存知ですか? sedを使用するより良い解決策が必要だと思いますか?
答え1
- インターフェイス名とMACアドレスはstderrに印刷されるため、grepで接続されません。 stderrを/ dev / nullにリダイレクトすることで削除できます。
iftop -t -s 1 -n -N 2>/dev/null
- awkを使用しているので、grepも必要ありません。
iftop -t -s 1 -n -N 2>/dev/null | awk '/send and receive/ {print $8}'
答え2
一度だけ呼び出すと、iftopは最後の40秒間のトラフィックを受信します。オプションなしで呼び出すと、終了した期間を受け取ります。実行時に実行されたポーリングは、時間の経過とともにサーバーの実際の使用量を反映しません。
iftopを使用してトラフィックをスニッフィングすることもシステムに負担をかけます。これは、ネットワークデータがpcap APIに供給され処理される必要があるため、トラフィックのサイズによっては多少重要です。
ネットワーク問題のデバッグ、特に特定のトランスポートストリームに注意を払うのには優れたツールですが、長期間の使用には優れたツールではありません。
トラフィックや帯域幅の場合、より専門的な環境ではSNMPを使用するか、より簡単な環境ではifconfigを使用することをお勧めします。
もう少し詳しく説明したかったのですが、思ったよりもトラフィックと速度のモニタリングについて詳しく説明した前の記事を見つけました。
リンク速度を決定するためにifconfig出力をどのように処理しますか?
最後の詳細を理解したら、iftopに反対することはありません。
1)スクリプトを実行するたびに(5分ごとに?)瞬間速度を測定するだけです。
2) 高負荷システムには適していません。