title: “自定义调用链打点” lang: cn ref: customized-tracing permalink: /cn/docs/users/customized-tracing/ excerpt: “自定义调用链打点” last_modified_at: 2017-08-15T15:01:43-04:00 redirect_from:
{% include toc %}
分布式调用链追踪提供了服务间调用的时序信息,但服务内部的链路调用信息对开发者同样重要,如果能将两者合二为一,就能提供更完整的调用链,更容易定位错误和潜在性能问题。
@Span
注释的自定义打点功能只支持和Java Chassis调用请求同一线程的方法调用。@Span
注释的方法必须是Spring管理的Bean,否则需要按这里提到的方法配置。该功能集成了Zipkin,提供@Span
注释为需要追踪的方法自定义打点。Java Chassis将自动追踪所有添加@Span
注释的方法,把每个方法的本地调用信息与服务间调用信息连接起来。
基于 ServiceComb Java Chassis 的微服务只需要添加如下依赖到 pom.xml:
<dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>tracing-zipkin</artifactId> </dependency>
在应用入口或Spring配置类上添加@EnableZipkinTracing
注释:
@SpringBootApplication @EnableZipkinTracing public class ZipkinSpanTestApplication { public static void main(String[] args) { SpringApplication.run(ZipkinSpanTestApplication.class); } }
在需要定制打点的方法上添加@Span
注释:
@Component public class SlowRepoImpl implements SlowRepo { private static final Logger logger = LoggerFactory.getLogger(SlowRepoImpl.class); private final Random random = new Random(); @Span @Override public String crawl() throws InterruptedException { logger.info("in /crawl"); Thread.sleep(random.nextInt(200)); return "crawled"; } }
就这样,通过使用@Span
注释,我们启动了基于 Zipkin 的自定义打点功能。
通过自定义打点上报的调用链包含两条数据:
例如,上述例子SlowRepoImp
里上报的数据如下:
key | value |
---|---|
span name | crawl |
call.path | public abstract java.lang.String org.apache.servicecomb.tests.tracing.SlowRepo.crawl() throws java.lang.InterruptedException |
如果需要定制上报的数据内容,可以传入自定义的参数:
public static class CustomSpanTask { @Span(spanName = "transaction1", callPath = "startA") public String invoke() { return "invoke the method"; } }