4个版本 (重大变更)
0.5.0 | 2021年1月31日 |
---|---|
0.4.0 | 2021年1月27日 |
0.3.0 | 2020年7月17日 |
0.1.1 | 2020年6月28日 |
0.1.0 |
|
#406 in Unix API
20KB
119 行
tide-trace
最小开销的USDT中间件,用于动态跟踪tide,支持BPF或DTrace。
$ cargo run --example histogram
$ sudo bpftrace -p $(pgrep histogram) tools/route-histogram.bt
Attaching 2 probes...
$ curl https://127.0.0.1:8080/route1 && curl https://127.0.0.1:8080/route2
^C
@us[GET, /favicon.ico]:
[32, 64) 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
@us[GET, /route1]:
[32, 64) 2 |@@@@@@@@@@@@@@@@@ |
[64, 128) 6 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[128, 256) 2 |@@@@@@@@@@@@@@@@@ |
@us[GET, /route2]:
[32, 64) 2 |@@@@@@@@@@@@@@@@@@@@ |
[64, 128) 5 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[128, 256) 4 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
先决条件
linux
ubuntu
$ sudo apt-get install systemtap-sdt-dev bpftrace
fedora
$ sudo dnf install systemtap-sdt-devel bpftrace
mac
此中间件旨在在mac上运行,但尚未完全测试
$ brew install make
示例用法
有关预构建应用程序,请参阅示例文件夹
创建项目
$ cargo init sample-project
Cargo.toml
tide = "0.16"
async-std = { version = "1.8.0", features = ["attributes"] }
tide-trace = { version = "0.4.0" }
main.rs
#[async_std::main]
async fn main() -> Result<(), std::io::Error> {
tide::log::start();
let mut app = tide::new();
app.middleware(tide_trace::USDTMiddleware::new(0));
app.at("/").get(|_| async { Ok("Hello, world!") });
app.listen("127.0.0.1:8080").await?;
Ok(())
}
跟踪请求
$ sudo bpftrace -p $(pgrep sample-project) tools/routes.bt
$ curl https://127.0.0.1:8080/
测试
$ cargo build --examples
$ sudo ./tests/test-all.sh
依赖项
~10–20MB
~318K SLoC