Netto เป็นเครื่องมือตรวจสอบเครือข่ายที่ใช้ eBPF สำหรับ Linux ซึ่งวัดต้นทุน CPU ของสแต็กเครือข่าย Linux
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 แทน ด้วยตัวเลือกบรรทัดคำสั่ง -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) .
โฟลเดอร์ | สารบัญ |
---|---|
images | รูปภาพที่ใช้ใน README นี้ |
netto | ลังไบนารีสนิมหลัก |
netto/src/bpf | โปรแกรม BPF-C |
metrics-common | ลังไลบรารี Bridge Rust สำหรับ main และ web-frontend |
web-frontend | ส่วนหน้าของ Rust WebAssembly |
www | ไฟล์คงที่สำหรับส่วนหน้าของเว็บ |
xtask | ลังไบนารียูทิลิตี้สำหรับจัดการการประสานงานระหว่างลังอื่นๆ |