微服务全链路跟踪:grpc集成zipkin
< 返回列表时间: 2019-07-29来源:OSCHINA
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>>
微服务全链路跟踪:grpc集成zipkin
微服务全链路跟踪:grpc集成jaeger
微服务全链路跟踪:springcloud集成jaeger
微服务全链路跟踪:jaeger集成istio,并兼容uber-trace-id与b3
微服务全链路跟踪:jaeger集成hystrix
微服务全链路跟踪:jaeger增加tag参数 码云地址: https://gitee.com/lpxs/lp-springcloud.git 有问题可以多沟通:136358344@qq.com。
本章节内容是基于 springboot2集成net.devh.grpc 的拓展
本章介绍grpc集成zipkin
zipkin部署
这里就不列举zipkin代码或者容器部署了,网上很多
grpc-client集成
pom.xml依赖 <dependencyManagement> <dependencies> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-bom</artifactId> <version>4.19.2</version> <type>pom</type> <scope>import</scope> </dependency> <!--核心grpc-spring-boot依赖--> <dependency> <groupId>net.devh</groupId> <artifactId>grpc-client-spring-boot-starter</artifactId> <version>${net-devh-grpc.version}</version> </dependency> <dependency> <groupId>net.devh</groupId> <artifactId>grpc-server-spring-boot-starter</artifactId> <version>${net-devh-grpc.version}</version> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>io.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.6.0</version> </dependency> <dependency> <groupId>io.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version>1.6.0</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-all</artifactId> <version>${grpc.version}</version> </dependency> <!--zipkin--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> <!-- Spring Boot 配置处理 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>net.devh</groupId> <artifactId>grpc-client-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-instrumentation-grpc</artifactId> </dependency> </dependencies>
自动装配 import brave.Tracing; import brave.grpc.GrpcTracing; import io.grpc.ClientInterceptor; import net.devh.boot.grpc.client.interceptor.GlobalClientInterceptorConfigurer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import zipkin2.Span; import zipkin2.reporter.Reporter; /** * @Auther: lipeng * @Date: 2019/1/3 19:34 * @Description: */ @Order(Ordered.LOWEST_PRECEDENCE) @Configuration public class GrpcSleuthConfig { private static final Logger logger = LoggerFactory.getLogger(GrpcSleuthConfig.class); @Bean public GrpcTracing grpcTracing(Tracing tracing) { return GrpcTracing.create(tracing); } //We also create a client-side interceptor and put that in the context, this interceptor can then be injected into gRPC clients and //then applied to the managed channel. @Bean ClientInterceptor grpcClientSleuthInterceptor(GrpcTracing grpcTracing) { return grpcTracing.newClientInterceptor(); } // Use this for debugging (or if there is no Zipkin server running on port 9411) @Bean @ConditionalOnProperty(value = "sample.zipkin.enabled", havingValue = "false") public Reporter<Span> spanReporter() { return new Reporter<Span>() { @Override public void report(Span span) { logger.info("{}",span); } }; } @Bean public GlobalClientInterceptorConfigurer globalInterceptorConfigurerAdapter(ClientInterceptor grpcClientSleuthInterceptor) { return registry -> registry.addClientInterceptors(grpcClientSleuthInterceptor); } }
application.xml配置 spring: zipkin: enable: true base-url: http://zipkin.com sleuth: web: client: enabled: true sampler: probability: 1.0 #zipkin采集率 0.1表示 10%采集率
grpc-server
pom.xml依赖 <dependencies> <dependency> <groupId>io.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.6.0</version> </dependency> <dependency> <groupId>io.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version>1.6.0</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-all</artifactId> <version>${grpc.version}</version> </dependency> <!--zipkin--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> <!-- Spring Boot 配置处理 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>net.devh</groupId> <artifactId>grpc-server-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-instrumentation-grpc</artifactId> </dependency> </dependencies>
自动装配 import brave.Tracing; import brave.grpc.GrpcTracing; import io.grpc.ClientInterceptor; import io.grpc.ServerInterceptor; import net.devh.boot.grpc.server.interceptor.GlobalServerInterceptorConfigurer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import zipkin2.Span; import zipkin2.reporter.Reporter; /** * @Auther: lipeng * @Date: 2019/1/3 19:34 * @Description: */ @Configuration public class GrpcSleuthConfig { private static final Logger logger = LoggerFactory.getLogger(GrpcSleuthConfig.class); @Bean public GrpcTracing grpcTracing(Tracing tracing) { return GrpcTracing.create(tracing); } //grpc-spring-boot-starter provides @GrpcGlobalInterceptor to allow server-side interceptors to be registered with all //server stubs, we are just taking advantage of that to install the server-side gRPC tracer. @Bean ServerInterceptor grpcServerSleuthInterceptor(GrpcTracing grpcTracing) { return grpcTracing.newServerInterceptor(); } //We also create a client-side interceptor and put that in the context, this interceptor can then be injected into gRPC clients and //then applied to the managed channel. @Bean ClientInterceptor grpcClientSleuthInterceptor(GrpcTracing grpcTracing) { return grpcTracing.newClientInterceptor(); } // Use this for debugging (or if there is no Zipkin server running on port 9411) @Bean @ConditionalOnProperty(value = "sample.zipkin.enabled", havingValue = "false") public Reporter<Span> spanReporter() { return new Reporter<Span>() { @Override public void report(Span span) { logger.info("{}",span); } }; } @Bean public GlobalServerInterceptorConfigurer globalInterceptorConfigurerAdapter(ServerInterceptor grpcServerSleuthInterceptor) { return registry -> registry.addServerInterceptors(grpcServerSleuthInterceptor); } }
application.xml配置 spring: zipkin: enable: true base-url: http://zipkin.com sleuth: web: client: enabled: true sampler: probability: 1.0 #zipkin采集率 0.1表示 10%采集率
热门排行