5个不稳定版本
0.3.1 | 2023年6月23日 |
---|---|
0.3.0 | 2023年6月23日 |
0.2.0 | 2023年6月21日 |
0.1.2 | 2023年6月13日 |
0.1.0 | 2023年5月9日 |
#248 in 性能分析
每月297次下载
在 tracing-actions-otlp 中使用
29KB
596 代码行
tracing-actions
tracing-actions是用于记录服务函数的tracing
扩展。
它为你提供了一个可以提供回调的tracing
订阅者。由于tracing
crate非常通用,这种通用性超出了某些用途的需求。
如果你尝试将opentelemetry行协议跟踪发送到某些服务,你需要将整个跨度实例化以构建OTLP消息。`ActionTraceSubscriber`为你提供了每个完成的跨度的回调。它主要考虑了OTLP,但`ActionTrace`也可以用于任何其他目的地。
如果使用`LazySpanCache`,`ActionTraceSubscriber`使用的跨度可以乐观地缓存。该功能是一个简单的尽力而为的竞态缓存。如果有两个线程在相同的时间需要跨度,一个将获得缓存的跨度,另一个将创建一个新的跨度。他们都会在完成时尝试将新跨度返回到缓存中,如果缓存已满,则直接丢弃跨度。
lib.rs
:
构建跟踪的测量、方便的方法。
tracing-actions
是一个跟踪记录工具箱。它记录你在堆上的实时跨度,并提供一个访问者函数,该函数每次调用跨度时都会使用ActionSpan。
由于动作跟踪是堆分配的,因此它们被保存在一个对象池中,以减轻分配的成本。虽然降低开销是tracing-actions的目标,但0开销不是。这是一个以方便为主、性能为辅的工具。
示例
K-log
use tracing_actions;
use log;
// First, we implement k-logging.
struct KLog {
k: usize,
n: std::sync::atomic::AtomicUsize,
}
impl tracing_actions::TraceSink for KLog {
fn sink_trace(&self, action_span: &mut tracing_actions::ActionSpan) {
if self.n.fetch_add(1, std::sync::atomic::Ordering::Relaxed) % self.k == 0 {
log::info!("trace: {action_span:?}")
}
}
}
// Next, we configure a subscriber.
let level = "debug".parse().unwrap();
let k_logging_subscriber = tracing_actions::ActionTraceSubscriber::new(
level,
KLog { k: 42, n: Default::default() },
tracing_actions::span_constructor::LazySpanCache::default(),
);
// Finally, we install the subscriber.
tracing::subscriber::set_global_default(k_logging_subscriber)
.expect("I should be able to set the global trace subscriber");
// Now the rest of your application will k-log ActionSpans.
依赖项
~0.7–1MB
~14K SLoC