Netto 是一款基於 eBPF 的 Linux 網路監控工具,可測量 Linux 網路堆疊的 CPU 成本。
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 將即時結果公開為由 Wasm 支援的網頁,可透過http://address:port
存取。此介面非常適合在生成內容時使用它,但不提供開箱即用的支援來儲存提取的延遲存取指標。當主機的即時監控不是主要關注點時,並且為了更好地與現有指標收集堆疊整合(例如在資料中心環境中),建議使用基於 Prometheus 的導出器替換內建的自訂 Web 前端使用-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 scraper 定位並直接在 Grafana 中引用。展示 Netto 收集的主要指標的範例儀表板可在grafana_dashboard.json
中找到(假設變數「host」用於透過 Prometheus「job」標籤區分不同的受監控主機,並在 Prometheus 設定中進行設定) 。
資料夾 | 內容 |
---|---|
images | 本README 中使用的圖像 |
netto | 主要 Rust 二進位箱 |
netto/src/bpf | BPF-C 程式 |
metrics-common | 用於main 和web-frontend Bridge Rust 庫箱 |
web-frontend | Rust WebAssembly 前端 |
www | Web 前端的靜態文件 |
xtask | 用於管理其他套件之間協調的實用程式二進位套件 |