命名spans
优质
小牛编辑
143浏览
2023-12-01
选择一个跨度名称不是一件小事。Span名称应该描述一个操作名称。名称应该是低基数(例如不包括标识符)。
由于有很多仪器仪表在一些跨度名称将是人为的:
controller-method-name
当控制器以方法名conrollerMethodName
接收时async
通过包装Callable
和Runnable
完成异步操作。@Scheduled
注释方法将返回类的简单名称。
幸运的是,对于异步处理,您可以提供明确的命名。
@SpanName注释
您可以通过@SpanName
注释显式指定该跨度。
@SpanName("calculateTax")
class TaxCountingRunnable implements Runnable {
@Override public void run() {
// perform logic
}
}
在这种情况下,以下列方式处理时:
Runnable runnable = new TraceRunnable(tracer, spanNamer, new TaxCountingRunnable());
Future<?> future = executorService.submit(runnable);
// ... some additional logic ...
future.get();
该范围将被命名为calculateTax
。
toString()方法
为Runnable
或Callable
创建单独的课程很少见。通常,创建这些类的匿名实例。如果没有@SpanName
注释,我们将检查该类是否具有toString()
方法的自定义实现。
所以执行这样的代码:
Runnable runnable = new TraceRunnable(tracer, spanNamer, new Runnable() {
@Override public void run() {
// perform logic
}
@Override public String toString() {
return "calculateTax";
}
});
Future<?> future = executorService.submit(runnable);
// ... some additional logic ...
future.get();
将导致创建一个名为calculateTax
的跨度。