10. 命名跨度
选择跨度名称不是一项微不足道的任务。span 名称应描述作名称。 名称应为低基数,因此不应包含标识符。
由于有很多仪器正在进行,因此一些跨度名称是人为的:
-
controller-method-name
当方法名称为controllerMethodName
-
async
对于使用 wrapped 完成的异步作Callable
和Runnable
接口。 -
用
@Scheduled
返回类的简单名称。
幸运的是,对于异步处理,可以提供显式命名。
10.1.@SpanName
注解
您可以使用@SpanName
注释,如以下示例所示:
@SpanName("calculateTax")
class TaxCountingRunnable implements Runnable {
@Override
public void run() {
// perform logic
}
}
在这种情况下,当以以下方式处理时,span 将命名为calculateTax
:
Runnable runnable = new TraceRunnable(this.tracing, spanNamer,
new TaxCountingRunnable());
Future<?> future = executorService.submit(runnable);
// ... some additional logic ...
future.get();
10.2.toString()
方法
为Runnable
或Callable
.
通常,创建这些类的匿名实例。
您不能注释此类类。
为了克服这个限制,如果没有@SpanName
注解存在,我们检查该类是否具有toString()
方法。
运行此类代码会导致创建一个名为calculateTax
,如以下示例所示:
Runnable runnable = new TraceRunnable(this.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();