System Activity Reporter (SAR) 、iftop、NetHogsなどのさまざまなユーティリティを使用して、Linuxシステムのネットワークトラフィック負荷を複数のディメンションからクエリおよび分析できます。 このトピックでは、SAR、iftop、およびNetHogsを使用して、Linux Elastic Compute Service (ECS) インスタンスのネットワークトラフィック負荷をクエリおよび分析する方法について説明します。
シナリオ
Linux ECSインスタンスを使用すると、インスタンスの帯域幅が過剰に利用される可能性があります。 次の手順を実行して、問題をトラブルシューティングできます。
高い帯域幅使用率を引き起こすプロセスを見つけます。
SAR、iftop、NetHogsなどのユーティリティを使用してプロセスを検索できます。 詳細については、このトピックの [SARの使用] 、[iftopの使用] 、および [NetHogsの使用] を参照してください。
高帯域幅の使用率を引き起こすプロセスが期待どおりに実行されているかどうかを確認し、プロセスのステータスに基づいて問題を処理します。
プロセスが期待どおりに実行されている場合は、インスタンスの帯域幅をアップグレードできます。 詳細については、「自動割り当てパブリックIPアドレスに関連付けられたインスタンスのパブリック帯域幅設定の変更」または「従量課金インスタンスの帯域幅設定の変更」をご参照ください。
プロセスが期待どおりに実行されていない場合は、手動でプロセスを確認して終了できます。 サードパーティのセキュリティツールを使用して、プロセスをチェックおよび終了することもできます。
SARの使用
SARは、Linuxのシステムパフォーマンス分析のための最も包括的なユーティリティの1つです。 ユーティリティは、複数のディメンションからシステム活動を報告できます。 SARは、送受信されたデータパケットおよびエラーメッセージに関する統計をネットワークインターフェイスレベルで分析できます。
sarコマンド
SARユーティリティを使用してネットワークトラフィックを監視する一般的なコマンドの構文:
sar -n DEV [間隔] [カウント]
[interval] 変数は統計が収集される間隔を指定し、[count] 変数は統計が収集される回数を指定します。
例
次のコマンドを実行して、SARを使用して、5回連続して1秒ごとにネットワークインターフェイスのアクティビティ統計を収集します。
sar -n DEV 1 5
システムは、収集された統計に基づいて、コマンド出力の最後に各ネットワークインターフェイス上のアクティビティの平均値を表示します。 コマンド出力から、帯域幅を完全に利用するネットワークインターフェイスの名前を取得できます。 ECSインスタンスの場合、内部ネットワークのネットワークインターフェイスの名前はeth0、インターネットのネットワークインターフェイスの名前はeth1です。
次のようなコマンド出力が表示され、eth1ネットワークインターフェイスに大量のトラフィックがあることを示します。 次の手順を実行して、問題をトラブルシューティングできます。
コマンド出力のフィールド:
IFACE: ネットワークインターフェイスの名前。
rxpck/sおよびtxpck/s: 1秒あたりに受信または送信されたパケットの数。
rxkB/sおよびtxkB/s: 1秒あたりの受信または送信バイト数 (kB/s) 。
rxcmp/sおよびtxcmp/s: 1秒あたりに受信または送信された圧縮パケットの数。
rxmcst/s: 1秒あたりに受信したマルチキャストパケットの数。
iftopを使う
iftopは、ネットワークインターフェイス上のトラフィックをリアルタイムで監視するためのLinuxの無料ユーティリティです。 iftopは、特定のネットワークインターフェイスのリアルタイムトラフィック、ポート接続情報、およびリバースDNS解決情報を監視できます。
iftopコマンド
一般的なiftopコマンドの構文:
iftop [-i <interface>]
<interface> 変数は、eth0またはeth1などのネットワークインターフェースの名前を指定します。 -iパラメーターを使用してネットワークインターフェイス名を指定しない場合、デフォルトでは最初のネットワークインターフェイスの使用が検出されます。
例
接続先LinuxECSインスタンス。
詳細については、接続方法の概要をご参照ください。
次のコマンドを実行して、iftopユーティリティをインストールします。
yum install iftop -y
次のコマンドを実行して、ポートのトラフィックロードを照会します。
iftop -i eth0 -P
説明接続ポート番号を表示するには,-Pパラメーターを指定します。
次のようなコマンド出力が表示されます。これは、ポート58690のトラフィック量が最も多いことを示します。
次のコマンドを実行して、ポートを使用するプロセスを取得します。
netstat -tunlp | grep [$Port]
説明[$Port] パラメーターを前の手順で取得したポートに設定します。
次のようなコマンド出力が表示されます。
トラフィック量が最も多いポートに対応するサービスを見つけたら、サービスを停止するか、iptablesサービスを使用して関連するアドレスを処理できます。
たとえば、IPアドレスをマスクしたり、IPアドレスのトラフィックをスロットルしたりして、インスタンスの帯域幅を期待どおりに使用できるようにすることができます。
コマンド出力のフィールド:
セクション ①: 帯域幅の使用率。
②: 外部接続: インスタンスに接続されているIPアドレスを記録します。
右側の3つの列は、インスタンスに接続されているIPアドレスの2秒、10秒、および40秒以内のリアルタイムトラフィックの平均量を表しています。
=>
記号はデータ送信を表し、<=
記号はデータ受信を表す。
セクション ③:
最初の列: TXは送信トラフィックを示し、RXは受信トラフィックを示し、TOTALは総トラフィックを示します。
cum: 最初の列の各状況のトラフィックの合計量を示します。
3列目のpeak: 1列目の各状況のトラフィックの最大量を示します。
4列目のレート: 1列目の各状況の2秒、10秒、40秒以内の平均トラフィック量を示します。
共通コマンドパラメーター
iftopインターフェイスでは、次のショートカットキーを使用してコマンド出力をカスタマイズできます。
h: ヘルプを表示するかどうかを指定します。
n: トグルして、ローカルマシンのIPアドレスまたはホスト名を表示します。
s: ローカルマシンのホスト情報を表示するかどうかを指定します。
d: リモート送信先ホストのホスト情報を表示するかどうかを指定します。
t: 表示モードを切り替えます。これは、送信トラフィックと受信トラフィックの2行表示、または送信トラフィックのみまたは受信トラフィックのみの1行表示です。
N: ポート番号またはポートサービス名を表示するように切り替えます。
S: ローカルマシンのポート情報を表示するかどうかを指定します。
D: リモート宛先ホストのポート情報を表示するかどうかを指定します。
p: ポート情報を表示するかどうかを指定します。
P: 表示を一時停止または継続するように切り替えます。
b: 平均交通グラフバーを表示するかどうかを指定します。
B: 2秒、10秒、または40秒以内のトラフィックの平均量を計算するためにトグルします。
T: 各接続のトラフィックの合計量を表示するかどうかを指定します。
L: 画面のフィルタリング機能をオンにし、入力した文字をフィルタ条件として受け入れます。 たとえば、IPアドレスを入力してenterキーを押すと、画面にはIPアドレスに関連するトラフィック情報のみが表示されます。
L: 表示画面上部のスケールを切り替えます。 フローグラフバーは、スケールに基づいて変化する。
Jまたはk: 画面に表示される接続レコードを上下にスクロールします。
1または2または3: 右側に表示されている3つの列に従って交通データをソートします。
<: コマンド出力をローカルホスト名またはIPアドレスでソートします。
>: コマンド出力をリモートの宛先ホストのホスト名またはIPアドレスでソートします。
o: 現在の接続のみを表示するかどうかを指定します。
f: フィルターコードを編集します。
! : シェルコマンドを呼び出します。
q: exit。
NetHogsの使用
NetHogsは、ネットワークトラフィックを監視するオープンソースのユーティリティです。 NetHogsを使用して、各プロセスの帯域幅使用率を表示できます。 これにより、より直感的な方法で異常なトラフィックのソースを見つけることができます。 NetHogsは、IPv4、IPv6、およびローカルネットワークインターフェイスとポイントツーポイントプロトコル (PPP) を介した接続をサポートします。 NetHogsユーティリティのインストール方法の詳細については、公式のヘルプドキュメントを参照してください。 インストールが完了したら、netogsと入力してユーティリティを起動します。 パラメーターを指定しない場合、NetHogsはデフォルトでeth0インターフェイスを監視します。 ifconfigなどのコマンドを使用して、インターネット経由でトラフィックを提供するネットワークインターフェイス (eth1またはeth0) を検索できます。
nethogsコマンド
一般的なnethogsコマンドの構文:
nethogs [-i <interface>]
<interface> 変数は、eth0またはeth1などのネットワークインターフェースの名前を指定します。 -iパラメーターを使用してネットワークインターフェイス名を指定しない場合、デフォルトでは最初のネットワークインターフェイスの使用が検出されます。
例
接続先LinuxECSインスタンス。
詳細については、接続方法の概要をご参照ください。
次のコマンドを実行してNetHogsユーティリティをインストールします。
yum install nethogs -y
次のコマンドを実行して、ネットワークインターフェイスのプロセスレベルのトラフィック統計を照会します。
nethogs eth1
説明NetHogsのデフォルトの監視間隔は1秒です。 -dパラメーターを使用して監視間隔を設定できます。 たとえば、
netogs eth1 -d 5
コマンドを実行して、監視間隔を5秒に設定します。次のようなコマンド出力が表示されます。
プロセスが悪意のあるものであると判断した場合は、次のコマンドを実行してプロセスを終了します。
kill -TERM [$Port1]
説明webサービスプログラムの場合、iftopなどのユーティリティを使用して特定の送信元IPアドレスを照会し、webアクセスログを分析して、IPアドレスからのトラフィックが悪意のあるものであるかどうかを識別できます。 logwatchやawstatsなどのユーティリティを使用して、ログを分析できます。
コマンド出力のフィールド
NetHogsモニタリングインターフェイスでは、sキーを押してSENT列、rキーを押してRECEIVED列でプロセスをソートし、mキーを押して統計を異なる単位で表示できます。 単位は、KB/s、KB、B、およびMBを含む。
PIDカラムは、対応するトラフィックに関連付けられたプログラムのプロセス番号を示す。
USER列は、プロセスの所有者を示す。
PROGRAM列は、プログラムの実行パスを示す。
DEVカラムは、監視対象のネットワークインタフェースの名称を示す。
SENT列は、プロセスによって送信されたデータトラフィックの量を示します。
RECEIVED列は、プロセスによって受信されたデータトラフィックの量を示す。