57. 命名 spans
选择 span name 并不是一项简单的任务。 span name 应该描述一个操作 name。 name 应该是低基数,因此它不应包含标识符。
由于有很多仪器正在进行,一些 span 名称是人为的:
-
当控制器收到方法 name 为
controllerMethodName
时收到controller-method-name
-
async
用于使用包装的Callable
和Runnable
接口完成的异步操作。 -
用
@Scheduled
return 注释 class 的简单 name 的方法。
幸运的是,对于异步处理,您可以提供显式命名。
57.1 @SpanName Annotation
您可以使用@SpanName
annotation 明确 name span,如下面的 example 所示:
@SpanName("calculateTax")
class TaxCountingRunnable implements Runnable {
@Override public void run() {
// perform logic
}
}
在这种情况下,当按以下方式处理时,span 名为calculateTax
:
Runnable runnable = new TraceRunnable(tracing, spanNamer,
new TaxCountingRunnable());
Future<?> future = executorService.submit(runnable);
// ... some additional logic ...
future.get();
57.2 toString()方法
为Runnable
或Callable
创建单独的 classes 非常罕见。通常,一个人创建那些 classes 的匿名实例。你不能注释这样的 classes。要克服该限制,如果不存在@SpanName
annotation,我们检查 class 是否具有toString()
方法的自定义 implementation。
Running 这样的 code 导致 creating 一个名为calculateTax
的 span,如下面的 example 所示:
Runnable runnable = new TraceRunnable(tracing, 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();