本文主要介绍zipkin监控dubbo,mysql应用。
zipkin版本:zipkin-server-2.20.1-exec.jar
brave版本: 5.10.0
zipkin-reporter版本: 2.12.0
dubbo版本:2.6.1
mysql版本:5.7.0
架构介绍:https://zipkin.io/pages/architecture.html
git:https://github.com/openzipkin/zipkin
1.下载zipkin-server,去git上下载合适的版本即可。
2.启动zipkin-server
2.1 首先要启动es,因为zipkin默认是存储在内存中,当zipkin宕掉了,数据就没了
2.2 创建日志文件
touch zipkin.log
sudo chmod 777 zikpin.log
2.3 启动zipkin
STORAGE_TYPE=elasticsearch ES_HOSTS=http://127.0.0.1:9200 java -jar zipkin-server-2.20.1-exec.jar --logging.level.zipkin=trace --logging.level.zipkin2=trace --logging.level.com.datastax.driver.core=debug > zipkin.log &
STORAGE_TYPE:指定存储类型
ES_HOSTS:es地址
logging:记录debug级别日志
3. dubbo整合
项目为dubbo-demo或者自己的项目即可。
3.1 引入jar包
pom.xml
<properties>
<brave.version>5.10.0</brave.version>
<zipkin-reporter.version>2.12.0</zipkin-reporter.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- 引入 zipkin brave 的 BOM 文件 -->
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-bom</artifactId>
<version>${brave.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 引入 zipkin repoter 的 BOM 文件 -->
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-reporter-bom</artifactId>
<version>${zipkin-reporter.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Brave 对 Spring MVC 的支持 -->
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-instrumentation-spring-webmvc</artifactId>
</dependency>
<!-- Brave 对 MySQL 的支持 -->
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-instrumentation-mysql</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-instrumentation-dubbo-rpc</artifactId>
</dependency>
<!-- 2. brave 的 spring bean 支持 -->
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-spring-beans</artifactId>
</dependency>
<!-- 3. 在 SLF4J 的 MDC (Mapped Diagnostic Context) 中支持 traceId 和 spanId -->
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-context-slf4j</artifactId>
</dependency>
<!-- 4. 使用 okhttp3 作为 reporter -->
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-sender-okhttp3</artifactId>
</dependency>
</dependencies>
dubbo配置:
在dubbo提供端和消费端都要加上过滤。例如
<dubbo:reference filter="tracing"></dubbo>
这是因为brave利用dubbo的filter进行开发的。TracingFilter类实现trace的传递。
<bean id="sender" class="zipkin2.reporter.beans.OkHttpSenderFactoryBean">
<property name="endpoint" value="http://zikpin-server地址:9411/api/v2/spans"/>
</bean>
<bean id="tracing" class="brave.spring.beans.TracingFactoryBean">
<property name="localServiceName" value="项目自定义名称"/>
<property name="spanReporter">
<bean class="zipkin2.reporter.beans.AsyncReporterFactoryBean">
<property name="sender" ref="sender"/>
<!-- wait up to half a second for any in-flight spans on close -->
<property name="closeTimeout" value="500"/>
</bean>
</property>
<property name="currentTraceContext">
<bean class="brave.spring.beans.CurrentTraceContextFactoryBean">
<property name="scopeDecorators">
<bean class="brave.context.slf4j.MDCScopeDecorator" factory-method="create"/>
</property>
</bean>
</property>
</bean>
消费者提供者配置类似,改下名称。
启动dubbo项目,请求一下。 登陆zipkin:127.0.0.1:9411 查看链路
4. 整合mysql
pom在上面已经引入了。
在datasource.url中加入
statementInterceptors=brave.mysql.TracingStatementInterceptor&zipkinServiceName=名称
例如:
jdbc:mysql://localhost:3306/mysql?statementInterceptors=brave.mysql.TracingStatementInterceptor&zipkinServiceName=xxx
重新启动项目。请求mysql时,就会看到链路了。