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 | 用于管理其他包之间协调的实用程序二进制包 |