Linuxネットワーク監視にntopngを導入:ネットワーク遅延の原因究明で「手探りの調査」はもう卒業

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

ネットワーク遅延と「手探りの調査」で徹夜した日々

先日、私たちのチームはかなり厄介な問題に直面しました。ダッシュボード上でレイテンシが20msから500msに急上昇し、ユーザーからはアプリのレスポンスが遅いという苦情が出始めました。サーバーを確認したところ、CPUやRAMは正常、ディスクI/Oにも異常は見られませんでした。この時、第一容疑者はネットワーク回線のトラブルしか考えられませんでした。

DevOpsエンジニアにとって最も無力感を感じるのは、ネットワークが詰まっているのは明らかなのに、どの通信が帯域を占有しているのか「名指し」できない時です。iftopnloadを使って概要を見ることはできますが、どのIPがどこに接続しているのか、どのプロトコル(Netflix、YouTube、あるいはDDoS攻撃など)を使用しているのかを正確に知りたい場合、単純なコマンドラインツールでは限界があります。

なぜ手動のネットワークデバッグは行き詰まるのか?

トラブル発生時、netstatssを叩いてアクティブな接続を確認するのが習慣になっている方も多いでしょう。しかし、この方法には3つの致命的な欠点があります:

  • 履歴の喪失: コマンドを実行した瞬間の出来事しか見えません。トラフィックスパイク(急増)が10秒間だけ発生して消えてしまった場合、確実に見逃してしまいます。
  • 情報の混乱: ターミナル上を絶え間なく流れる数千行のテキストを目で追うのは非常に困難です。パターンの把握や、紛れ込んでいる不審なIPの特定はほぼ不可能です。
  • アプリケーションの分類が困難: tcpdumpは生データ(Raw Data)を返します。それが通常のWebトラフィックなのか、バックグラウンドで動いているポートスキャンスクリプトなのかを分析するには、膨大な手間がかかります。

問題は、直感的でリアルタイムな統計的視点が欠けていることにあります。

トラフィックを効果的に監視するために、どのツールを選ぶべきか?

ntopngという「解決策」を見つけるまで、私はあらゆるツールを試してきました。Prometheus + Grafanaの組み合わせは非常に強力ですが、セットアップに時間がかかるため、迅速なトラブルシューティングには向きません。SNMPはLinuxでの設定が煩雑なことがあり、得られるデータも送受信バイト数などの生の値が中心で、レイヤー7まで踏み込むことは困難です。

試行錯誤の末、ntopngが最もバランスの取れた選択肢であるという結論に至りました。インストールが簡単で、Web UIは直感的であり、単なる帯域幅の表示だけでなくユーザーの行動まで分析できます。

Ubuntu/Debianへのntopngのインストール

最新バージョンを入手するために、私はいつもntopの公式リポジトリからインストールしています。以下のコマンドを実行してください:

# システムの更新
sudo apt update && sudo apt upgrade -y

# 依存パッケージのインストール
sudo apt install wget gnupg software-properties-common -y

# ntopリポジトリの追加(例:Ubuntu 22.04 - Jammy)
wget https://packages.ntop.org/apt/22.04/all/apt-ntop.deb
sudo dpkg -i apt-ntop.deb

# 更新とインストール
sudo apt update
sudo apt install ntopng nprobe n2disk -y

1分で完了する初期設定

インストール完了後、ntopngがどのネットワークインターフェースを監視すべきかを指定する必要があります。以下のコマンドで設定ファイルを開きます:

sudo nano /etc/ntopng/ntopng.conf

以下の行を追加または修正します:

-i=eth0
-w=3000
--community

注意:-i=eth0はネットワークインターフェース名です(ip addrで確認してください)。-w=3000はWebインターフェースのアクセスポートです。その後、サービスを再起動します:

sudo systemctl restart ntopng
sudo systemctl enable ntopng

実践:ネットワークトラフィックを徹底的に分析する

ブラウザを開き、http://サーバーのIP:3000にアクセスします。デフォルトのユーザー名とパスワードはadmin/adminです。初回ログイン時にパスワードの変更を求められるので、セキュリティのために強力なパスワードを設定してください。

ヒント: 大規模なIP範囲を監視する場合、各部門 host のサブネットを迅速に特定することが非常に重要です。サブネットを素早く計算してntopngのフィルタリングに入力するために、私はよくtoolcraft.app/ja/tools/developer/ip-subnet-calculatorを利用しています。CIDRを入力するだけでネットワーク範囲とホスト数が表示され、ntopng上のデータと実際のインフラ構成を迅速に紐付けることができます。

トラブルシューティングで重宝する主な機能:

  1. Flows: 通信の「正体」を暴く場所です。送信元IP、宛先IP、そして「Application」カラムには SSL/TLSHTTPBitTorrent などが表示されます。データベースサーバーなのに Netflix のトラフィックが発生していたら、誰に対処すべきか一目瞭然です。
  2. Hosts: このタブでは、ネットワークを最も消費しているデバイス(Top Talkers)をランキング表示します。マルウェアに感染してスパムを送り続けているマシンを特定するのに非常に役立ちます。
  3. Alerts: システムへのポートスキャンなど、不審なIPを検知すると、ダッシュボード上に赤い警告を表示します。
  4. GeoIPマップ: 本来のターゲット以外の国からトラフィックが大量に押し寄せている場合、攻撃を受けている可能性が高いと判断できます。

パフォーマンスとセキュリティに関する注意点

ntopngはプロミスキャスモードでパケットをキャプチャするため、トラフィックが数Gbpsに達するとCPU負荷が高くなります。低スペックのサーバーでは、RAM不足やディスクフルを避けるために履歴の保存期間を制限することをお勧めします。

セキュリティ面では、ファイアウォールの背後で運用する場合、ポート3000は自分のPCのIPからのみアクセスを許可するようにしてください。内部ネットワーク構成に関する機密情報が漏洩する恐れがあるため、インターネット全体(0.0.0.0/0)にこのポートを開放することは絶対に避けてください。

このツールが、ネットワーク遅延による徹夜の調査を減らす助けになれば幸いです。ntopngがあれば、プロバイダーへの問い合わせや、勤務中に帯域を浪費しているユーザーへの適切な対応を行うための決定的な証拠を手に入れることができます。

Share: