#tracing-subscriber #tracing #performance #service #cache

tracing-actions

将动作跟踪结构传递给回调的跟踪订阅者

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 性能分析

Download history 49/week @ 2024-03-14 34/week @ 2024-03-21 20/week @ 2024-03-28 26/week @ 2024-04-04 92/week @ 2024-04-11 66/week @ 2024-04-18 81/week @ 2024-04-25 108/week @ 2024-05-02 154/week @ 2024-05-09 62/week @ 2024-05-16 28/week @ 2024-05-23 55/week @ 2024-05-30 77/week @ 2024-06-06 46/week @ 2024-06-13 82/week @ 2024-06-20 76/week @ 2024-06-27

每月297次下载
tracing-actions-otlp 中使用

Apache-2.0

29KB
596 代码行

tracing-actions

tracing-actions是用于记录服务函数的tracing扩展。

它为你提供了一个可以提供回调的tracing订阅者。由于tracingcrate非常通用,这种通用性超出了某些用途的需求。

如果你尝试将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