Netto は、Linux ネットワーク スタックの CPU コストを測定する、Linux 用の eBPF ベースのネットワーク監視ツールです。
NET_RX_SOFTIRQ
エントリ ポイントの基本ネットワーク機能への内訳BPF_MAP_TYPE_TASK_STORAGE
) Netto をスタンドアロン アプリケーションとして構築することは、通常は推奨されません。ユーザーは代わりに、提供されたDockerfile
使用して、ツールのデプロイと管理を簡素化するコンテナー イメージを構築する必要があります。
以下を使用して、Netto をコンテナー イメージ (ここでは「netto」タグ付き) にビルドします。
docker build -t netto https://github.com/miolad/netto.git#perf-event-mmapable-array
結果として得られるイメージにはCAP_BPF
CAP_SYS_ADMIN
機能が必要であることに注意してください。これは、ほとんどのセットアップでは、コンテナーが--privileged
モードで実行される必要があることを意味します。
それでもツールをスタンドアロンで構築したい場合は、以下が必要になります。
以下を使用してコンパイルして実行します。
cargo xtask run [--release]
$ ./netto -h
eBPF-based network diagnosis tool for Linux
Usage: netto [OPTIONS]
Options:
-f, --frequency Perf-event's sampling frequency in Hz for the NET_RX_SOFTIRQ cost breakdown [default: 1000]
-a, --address Bind address for the web frontend [default: 0.0.0.0]
-p, --port Bind port for the web frontend [default: 8080]
--user-period User-space controller update period in ms [default: 500]
-l, --log-file Path to a log file to which measurements are to be saved. If logging is enabled by providing this argument, any other form of web interface will be disabled
-P, --prometheus Enable Prometheus logging in place of the web interface. The Prometheus-compatible endpoint will be available at `http://address:port`
-h, --help Print help
-V, --version Print version
デフォルトでは、Netto はリアルタイムの結果をhttp://address:port
でアクセス可能な Wasm を利用した Web ページとして公開します。このインターフェイスは、作成されたコンテンツを消費するのに理想的ですが、遅延アクセスのために抽出されたメトリクスを保存するためのすぐに使えるサポートは提供しません。ホストのリアルタイム監視が主な関心事ではなく、既存のメトリクス収集スタック (データセンター環境など) とより適切に統合するために、代わりに組み込みのカスタム Web フロントエンドを Prometheus ベースのエクスポーターに置き換えることをお勧めします。 -P
(または--prometheus
) コマンドライン オプションを使用します。
ほとんどの場合、Netto を実行する推奨方法には、次のようなコマンドが含まれます。
docker run --name netto --privileged --restart unless-stopped -d -p 8080:8080 netto -P
または、同等のdocker compose
構成エントリを使用します。
services:
netto:
build: https://github.com/miolad/netto.git#perf-event-mmapable-array
image: netto
container_name: netto
privileged: true
command: -P
restart: unless-stopped
...
-P
オプションを選択すると、Netto を Prometheus スクレイパーのターゲットにし、Grafana で直接参照できます。 Netto によって収集された主要なメトリクスを示すダッシュボードの例は、 grafana_dashboard.json
として入手できます (変数「host」は、Prometheus の設定で構成される Prometheus の「ジョブ」ラベルを通じてさまざまな監視対象ホストを区別するために使用されることを前提としています) 。
フォルダ | コンテンツ |
---|---|
images | このREADME で使用されている画像 |
netto | メイン Rust バイナリ クレート |
netto/src/bpf | BPF-C プログラム |
metrics-common | main およびweb-frontend 用の Bridge Rust ライブラリ クレート |
web-frontend | Rust WebAssembly フロントエンド |
www | Web フロントエンドの静的ファイル |
xtask | 他のクレート間の調整を管理するためのユーティリティ バイナリ クレート |