ネットワークモニタリングのためのツール集
概要
プレゼンテーションの準備をどこから始めればよいかわからない方のために簡単にまとめたセッションです。ネットワークモニタリングや実験に使用できる様々なツールを紹介し、その使用方法について説明します。
環境
ネットワークを学ぶためにはどのような環境を準備すべきでしょうか?もちろん、学びたいトピックによって異なりますが、よく使用される方法をいくつか見てみましょう。
1. EC2インスタンスの作成とパブリックIPの公開
メリット
- 最も一般的な方法
- 物理的に異なる機器であるため、ローカル環境の影響を受けず、最も正確なテストが可能
デメリット
- 有料のため、リソースの管理に注意が必要
- ネットワーク設定が必要で、インフラに関する理解が必要
2. Dockerで特定のOSコンテナを実行
メリット
- dockerさえインストールされていれば簡単にセットアップ可能
- 無料
デメリット
- docker execを通じてコンテナに直接アクセスする必要があり、この体験はあまり良くない
- dockerコンテナで異なるOSを起動するのは、コンテナの目的に合致した方法ではない
- ホストマシンのリソースを借りて使用するため、完全に分離されたテストではない
3. VM
メリット
- ホストマシンのOSと異なるOSを使用する必要がある場合に有用
- 物理的に分離された環境構築が可能
デメリット
- Macでのセットアップが複雑
- 別のOSを実行するためのリソースが多く必要
パフォーマンステストツール
Apache Bench
ab - Apache HTTP server benchmarking tool - Apache HTTP Server Version 2.4
ターミナルで使用できる非常にシンプルなベンチマークツール
K6
Load testing for engineering teams | Grafana k6
Grafana Labsが開発しているパフォーマンステストツール。モダンなインターフェース、使用方法、様々なユースケースをサポートしています。
この記事でもK6を使用しました。一般的にパフォーマンステストが必要な場合は、K6を最も推奨します
nGrinder
Naverが開発しているパフォーマンステストツール。分散環境テストに適しています。多くの使用事例があり、日本語のドキュメントも豊富で、日本の開発者にとってアクセスしやすいツールです。
JMeter
Apache JMeter - Apache JMeter™
Locust
Locust - A modern load testing framework
Pythonで作成されたパフォーマンステストツール。環境がPythonに特化している場合、他のツールと比べて利点があります。
従来のネットワークモニタリングツール
- ネットワーク関連の実験には、結果を比較するためにネットワークモニタリング関連ツールの使用法が必要です
lsof
lsof path/to/file # ファイルを開いているプロセスを表示
lsof -i :8080 # ローカルインターネットポートを通じて開かれているプロセスを表示
lsof -p PID # 指定されたPIDが開いているファイルの一覧を表示
- lsof = Lists open files(開いているファイルを一覧表示)
- どのファイルがどのプロセスによって開かれているかを表示するコマンド = ファイルディスクリプタの確認が可能
- アプリケーション開発中にポートが既に使用されているというエラーを見たときに、一度は使用したことがあるコマンド
- killコマンドと組み合わせて、8080ポートを占有しているIntelliJを強制終了するのに最もよく使用されているのではないでしょうか...
ifconfig
ifconfig
- ネットワーク機器確認の基本コマンド
- net-toolsに含まれています
netstat
- ネットワーク接続、ルーティングテーブル、ネットワークインターフェースの統計情報を表示するために使用されるツール
netstat -p tcp -van
モダンなネットワークモニタリングツール
やや古くなったNet-tools
- かなり古いnet-tools = 約26年
- 最後のコミットが14年前
- 最近ではiproute2というプロジェクトの新しいコマンドが使用されています
- ubuntu 18.04からはnet-toolsは含まれなくなりました
- Macの場合は
brew install iproute2mac
コマンドで新しいツールを使用できます
ip
ifconfigに代わるコマンド
ip address show # ネットワークインターフェース情報
ip route show # ルーティング要素
ip neighbor show # ARPテーブルに登録された既知のホスト = サブネットワークに含まれるもの
ss
- ソケットの状態を確認するユーティリティ
- netstatの改良版
- 最近のLinuxディストリビューションではnetstatよりもssの使用を推奨
ss -a # すべてのソケットを表示
ss -t # TCPソケットを表示
ss -u # UDPソケットを表示
ss -lt src :80 # 80ポートのリスニングソケットを表示
Bandwhich
- ネットワーク帯域幅モニタリングツール
- どのようなリクエストが行き来しているかリアルタイムでモニタリング可能
bandwhich
実践
目的は、nginxサーバーを素早く起動し、ネットワークテスト用途として使用できるかどうかを確認することです。
- VMの作成にはOrbstackを使用
- orbstackはVMを便利に扱うための機能を提供
まず、ubuntuマシンを作成
orb create ubuntu
仮想マシンが正常に作成されたか確認
orb list
sshを通じて作成した仮想マシンにアクセス
ssh orb
# または
ssh machine@orb
現在接続している仮想マシンのアーキテクチャを確認
uname -a
arch
準備完了。
簡単なネットワークリクエストテストのためにNginXをインストール
sudo apt update
sudo apt install nginx
localhost または http://ubuntu.orb.local/ にアクセスしてみましょう
以下のコマンドでTCP接続が作成されるのをモニタリングできます:
watch ss -taonp
curlやhttpieでリクエストを送信すると、すぐにtime_wait状態に変わります。これは、リクエストに対する応答を受け取った場合に即座に接続を切断するメカニズムが内部に存在するためです。
まとめ
ネットワーク状態をモニタリングするための方法と使用できるツールについて見てきました。各ツールには特化した分野があり、用途も様々です。複数のツールを知っておくことがデバッグに有利でしょう。すべてのツールを詳しく知る必要はなく、「こういうものもあるんだ」程度で見ておき、必要なときに詳しく調べれば十分役立つと考えられます。