https://intoraw.xyz/blog/feed.xml

Instrument metrics for third partiy libraries

2024-08-16

如果第三方 crate 并没有提供 metrics,但是想捕获 crate 运行时发生的实践同时生成该事件的 metrics,例如在访问s3 的时候,s3会自动 retry,但是 s3 的 librarty 并没有提供 retry 对应的 metrics。我们应该怎么办?

一种办法是,看第三方 library,是否提供了 tracing 能力,如果有,那么每个 tracing 都会生成一个 event,例如

tracing::info!("retry happend");

会在接入 opentelemetry 的时候,在 span 内生成一个 event,如果我们可以捕获这个 event,就可以在我们自己的程序中进行 metrics 统计。

如何捕获? 这个 event 会在 tracing_subscriber中收到,我们可以定义 tracing_subscriber 的一个 layer,重写 on_event 的逻辑 。 https://docs.rs/tracing-subscriber/latest/tracing_subscriber/layer/trait.Layer.html#method.on_event

问题来了,如何精确的捕获 retry 的 event? 可以使用tracing_subscriber的Filter过滤掉无关的 event