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 기반 웹 페이지로 실시간 결과를 공개합니다. 이 인터페이스는 콘텐츠가 생성되는 대로 소비하는 데 이상적이지만 지연된 액세스를 위해 추출된 메트릭을 저장하기 위한 기본 지원을 제공하지 않습니다. 호스트의 실시간 모니터링이 주요 관심사가 아니고 기존 측정항목 수집 스택(예: 데이터 센터 환경)과 더 효과적으로 통합하려면 대신 내장된 사용자 지정 웹 프런트엔드를 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
으로 제공됩니다(Prometheus 설정에서 구성할 Prometheus "job" 레이블을 통해 모니터링되는 여러 호스트를 구별하는 데 "host" 변수가 사용된다고 가정함). .
접는 사람 | 내용물 |
---|---|
images | 이 README 에 사용된 이미지 |
netto | 메인 Rust 바이너리 크레이트 |
netto/src/bpf | BPF-C 프로그램 |
metrics-common | main 및 web-frontend 용 Bridge Rust 라이브러리 상자 |
web-frontend | Rust 웹어셈블리 프론트엔드 |
www | 웹 프런트엔드용 정적 파일 |
xtask | 다른 상자 간의 조정을 관리하기 위한 유틸리티 바이너리 상자 |