Linux帯域幅モニタリング:NethogsとIftopでネットワークを占有する「真犯人」を特定する

Network tutorial - IT technology blog
Network tutorial - IT technology blog

深夜の帯域幅トラブル:なぜNethogsとIftopが救世主なのか?

午前2時、私の電話が鳴り止みませんでした。Zabbixシステムが赤色のアラートを出しています。データベースクラスターの送信トラフィック(Outbound Traffic)が1Gbpsに急増し、ネットワークカードの限界値に達していました。奇妙なことに、この時間帯のユーザーアクセスはほぼゼロだったのです。

このような時、tophtopは役に立ちません。それらはCPUやRAMの状態が正常であることを示すだけで、ネットワークカードが「悲鳴」を上げている原因は教えてくれません。vnstatnloadのようなコマンドも、総トラフィック量は分かりますが、どのプロセスがデータを送信しているのかまでは特定できません。このようなケースでは、ネットワーク監視ツールのntopngを導入して詳細なフローを追跡するのも一つの手ですが、今すぐコマンドラインで状況を確認したい時には不向きです。

50人規模のオフィスと小規模なデータセンターのネットワーク管理経験から、私は一つの教訓を得ました。それは、各プロセスID(PID)やIP接続を深く掘り下げて観察できるツールが必要だということです。高度なネットワーク診断を行う準備が整っていれば、原因究明は大幅にスピードアップします。そこで真価を発揮するのが、nethogsiftopです。

主要なLinuxディストリビューションへのクイックインストール

これら2つのツールは非常に軽量で、合計サイズは2MBにも満たしません。トラブル発生時にすぐ使えるよう、サーバーのテンプレートにインストールしておくことをお勧めします。

Ubuntu/Debian系:

sudo apt update && sudo apt install nethogs iftop -y

CentOS/RHEL/AlmaLinux系 (EPELリポジトリが必要):

sudo yum install epel-release -y
sudo yum install nethogs iftop -y

Nethogs – 帯域幅を「爆食い」しているプロセスを追跡する

nethogsの最大の特徴は、プロトコルごとではなく、プロセス(Process)ごとにトラフィックをグループ化することです。これにより、「どのスクリプトやユーザーがネットワークを占有しているのか?」という問いに正確に答えてくれます。

実際の使い方

root権限でコマンドを実行します:

sudo nethogs

インターフェースには重要な列が表示されます:

  • PID: 必要に応じて即座にkillするためのプロセスID。
  • USER: どのプロセスを実行しているアカウントかを特定(ハッキングされたユーザーの発見に役立ちます)。
  • PROGRAM: 実行ファイルへのパス(例:/usr/sbin/nginx)。
  • SENT/RECEIVED: KB/s単位の実際のアップロード/ダウンロード速度。

本番環境では、特定のインターフェースを監視するためにパラメータを追加することが多いです:

sudo nethogs eth0

小技: 実行中に ‘c’ キーを押すと、累積(Cumulative)モードに切り替わります。ツールを起動してから各プロセスが消費した総トラフィック量を確認できるため、断続的にバックグラウンドで動作するスクリプトを見つけるのに非常に便利です。

Iftop – IPとポートによるトラフィック分析

nethogsが「何が」動いているかを見つけるものなら、iftopは「どこへ送っているか」を教えてくれます。iftopは、自サーバーと外部IPの間の接続詳細を表示します。

sudo iftop -i eth0 -n -P

ここで、-nフラグはDNS解決を無効にして表示を速め、-Pはポート番号を表示させます。

覚えておくべきショートカットキー:

  • n: ドメイン名解決のオン/オフ。DNSクエリ待ちによるフリーズを防ぐため、通常はオフにします。
  • p: ポートの表示。Webトラフィック(443)とマルウェアによる不審なポートを区別するのに役立ちます。
  • L: トラフィック量を視覚的に示すバーを表示します。

連携ワークフロー:いつどのツールを使うべきか?

実際の運用では、以下の3ステップのシナリオで両方を組み合わせて使用しています:

  1. ステップ 1: nethogsを開く。rsyncプロセスが50MB/sを占有しているのを発見。
  2. ステップ 2: iftopを開く。宛先IPが内部のバックアップサーバーではなく、海外の未知のサーバーであることを特定。
  3. ステップ 3: lsof -p [PID]を使用して、そのプロセスがどのファイルを読み取っているかを確認し、IPのブロックやプロセスの停止などの処置を行う。

オフィスでの実例

ある時、社内ネットワークが急激に遅くなり、pingが500msに達しました。普段からSmokePingで遅延を監視していれば異常の予兆を掴めますが、具体的な犯人探しにはリアルタイムツールが必要です。ゲートウェイにSSHで入り、nethogsを起動したところ、あるワークステーションがDropboxに10MB/sでアップロードしているのを即座に発見しました。複雑なファイアウォールのログを漁ることなく、わずか20秒で該当する社員のIPを特定できました。

定期的な監視に関する注意点

後で検証するために履歴を保存したい場合は、トレースモードでnethogsを実行できます:

sudo nethogs -t > network_debug.log

長期的な分析にはNetFlowとIPFIXによる帯域診断が適していますが、このログファイルは非常に早く肥大化するため、注意してください。特定のトラブルシューティングを行っている間だけ有効にすることをお勧めします。

nethogsiftopをマスターすることは、ネットワークカードを覗き込む顕微鏡を手に入れるようなものです。これらの深夜の「実戦」から得られた知見が、皆さんのシステムの安定稼働に役立つことを願っています。また、サーバーの処理能力自体を向上させたい場合は、Linux TCPスタックの最適化も非常に有効なアプローチです。

Share: