操作场景
KMSE 微服务管理平台提供调用链查询功能,主要包括链路追踪、动态拓扑两部分。
链路追踪用来查询和定位具体某一次调用的情况,提供了 Spring Cloud 全链路跟踪功能,包括服务监控、mysql、redis、mongo、kafka、rabbitmq。使用者可以通过具体的服务、接口定位、IP 等查询具体的调用过程,包括调用过程所需要的时间和运行情况。还可以根据 TraceID 查询调用链的详细信息。调用链详情是为了定位在分布式链路调用过程中每个环节的耗时、日志和异常。
动态拓扑包含了查询服务之间相互依赖调用的拓扑关系,查询特定集群特定命名空间下服务之间调用的统计结果等功能。
前提条件
向工程中添加依赖,在 pom.xml 中添加以下依赖:
<dependency>
<groupId>com.ksyun.kmse</groupId>
<artifactId>spring-cloud-kmse-starter-jaeger</artifactId>
<version>${version}</version>
</dependency>
bootstrap.yaml 中添加链路相关配置(本地开发自测配置,线上无需配置):
opentracing:
jaeger:
log-spans: true
# 是否开启 Zipkin 兼容模式
enable-b3-propagation: true
# 概率采样
# probabilistic-sampler:
# sampling-rate: 0.1
#常量采样
const-sampler:
decision: true
# trace 上报接口
http-sender:
url: http://0.0.0.0:14268/api/traces
# 启用 trace
enabled: true
# trace 上报服务的版本
tags.svc-version: v4
调用链查询
动态拓扑图查询
查询依赖详情
鼠标放置到图上特定位置可以显示调用依赖详情。
单击服务圈内(白色底),可以展示被调用次数,单击弹出框上的“查看调用链”可以进入到调用链查询界面。
附:微服务对下游组件访问的链路支持
微服务对 JDBC、 Redis、Memcached、MongoDB、消息队列 RabbitMQ、Kafka 等的访问操作会产生跟踪日志, KMSE 会对该日志进行采集、分析、统计,这些组件的调用会展现在 KMSE 平台的链路追踪中。
JDBC 链路使用说明
支持各种实现 JDBC 规范的 MySQL / SQL Server / Oracle 等关系型数据库驱动器和各类连接池(如 Tomcat-JDBC、DBCP、Hikari、Druid),在使用时需引入 SpringBoot 相关依赖和 相关的 db 驱动依赖即可,如:
<!-- JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
引入依赖后,根据需要添加相关数据库连接池依赖或直接使用 SpringBoot 默认选项。
配置启用 JDBC tracing:
Redis 链路使用说明
考虑到 Redis 库的多样性,以及 spring-data-redis 库的易用性,目前只对spring-boot-starter-data-redis进行支持,在引用 spring-boot-starter-data-redis 时不要指定版本,只需要整个工程依赖 parent pom 即可:
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
spring-boot-starter-data-redis的版本为 parent pom 文件管理的 Redis Starter 的版本。在代码中具体使用时,引入 RedisTemplate,然后使用其方法即可。不建议直接引用 Jedis 和 Lettuce 相关的依赖,spring-boot-starter-data-redis 会自动引用相关的依赖,并做适配。
配置启用 Redis tracing:
opentracing.spring.cloud.redis.enabled=true
如果通过其他方式引入 Redis 客户端(例如直接 new Jedis),则将无法在 KMSE 的链路中查看到相应的信息。
Memcached 链路使用说明
考虑到 Spring Data 暂未提供 Memcached 操作依赖库,我们可以使用 spymemcached 第三方依赖,示例如下:
<!-- Memcached -->
<dependency>
<groupId>net.spy</groupId>
<artifactId>spymemcached</artifactId>
<version>2.12.2</version>
</dependency>
我们需要创建一个 Tracing 增强的 Memcached Client:
MemcachedClient memcachedClient = new TracingMemcachedClient(tracer, false,
new InetSocketAddress("10.69.70.68", 9011));
memcachedClient.set("testkey", 1000, "888888");
此处的 tracer 需要我们将 io.opentracing.Tracer 实例化后进行依赖注入,如:
@ConditionalOnProperty(value = "opentracing.jaeger.enabled", havingValue = "true", matchIfMissing = true)
@Configuration
public class MyTracerConfiguration {
@Bean
public io.opentracing.Tracer jaegerTracer() {
io.jaegertracing.Configuration config = new io.jaegertracing.Configuration("jaeger-mem");
io.jaegertracing.Configuration.SenderConfiguration sender = new io.jaegertracing.Configuration.SenderConfiguration();
sender.withEndpoint("http://jaeger-collector.kmse-system:14268/api/traces");
config.withSampler(new io.jaegertracing.Configuration.SamplerConfiguration().withType("const").withParam(1));
config.withReporter(new io.jaegertracing.Configuration.ReporterConfiguration().withLogSpans(true).withSender(sender).withMaxQueueSize(10000));
return config.getTracer();
}
}
MongoDB 链路使用说明
考虑到 spring-data-mongodb 库的易用性,目前只对spring-boot-starter-data-mongodb进行支持,在引用 spring-boot-starter-data-mongodb 时不要指定版本,只需要整个工程依赖 parent pom 即可,示例如下:
<!-- MongoDB -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
spring-boot-starter-data-mongodb的版本即是 parent pom 文件管理的 mongoldb starter 的版本。在代码中具体使用时,引入MongoTemplate,然后使用其方法即可。
配置启用 MongoDB tracing:
opentracing.spring.cloud.mongo.enabled=true
消息队列 RabbitMQ 链路使用说明
RabbitMQ 组件目前通过 Spring Cloud Stream 方式接入Spring Cloud 体系,对于 RabbitMQ 组件的全链路追踪目前基于spring-cloud-stream-rabbit扩展实现,使用时需在上下游服务中添加spring-cloud-stream-rabbit依赖并按照规范进行 RabbitMQ 配置。
<!-- Stream -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
</dependency>
<!-- RabbitMQ -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
配置启用 JMS tracing:
opentracing.spring.cloud.jms.enabled=true
消息队列 Kafaka 链路使用说明
Kafaka 组件目前通过 Spring Cloud Stream 方式接入Spring Cloud 体系,对于 Kafaka 组件的全链路追踪目前基于spring-cloud-stream-kafka 扩展实现,使用时需在上下游服务中添加spring-cloud-stream-rabbit依赖并按照规范进行 Kafaka 配置。
<!-- Stream -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
</dependency>
<!-- RabbitMQ -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-kafka</artifactId>
</dependency>
配置启用 Kafaka tracing:
opentracing.spring.cloud.kafka.enabled=true
Kafka 配置参考:
spring:
cloud:
stream:
kafka:
binder:
brokers: localhost:9092
auto-create-topics: true
configuration:
auto.offset.reset: latest
bindings:
greetings-in:
destination: greetings-sample
group: greetings-in-group
contentType: application/json
greetings-out:
destination: greetings-sample
contentType: application/json
文档内容是否对您有帮助?
评价建议不能为空
非常感谢您的反馈,我们会继续努力做到更好!