zipkin的mysql配置

如何配置zipkin使用mysql数据库

最近因为项目需要在看zipkin(关于应用程序性能监控的话题本文不展开讨论,只是介绍zipkin的数据存储配置)。
zipkin默认使用内存模式存储数据,一旦系统重启或者关闭就再也找不到数据库,这对于学习和演示系统比较方便,但是对生产环境显然是不可接受的,zipkin提供了多种数据持久存储方式,例如cassandra、cassandra3、elasticsearch、mysql。由于本人比较了解mysql同时项目中大多使用mysql数据库,就选择使用mysql数据库。
参考https://github.com/openzipkin/zipkin/tree/master/zipkin-storage/mysql 和https://github.com/openzipkin/zipkin/blob/master/zipkin-server/src/main/resources/zipkin-server-shared.yml 以及https://github.com/openzipkin/zipkin/blob/master/zipkin-server/src/main/java/zipkin/server/ZipkinServerConfiguration.java

第一步
我们需要在数据创建zipkin使用的数据库, zipkin默认连接数据库zipkin, 所以我们可以直接创建name为zipkin的数据库。然后在该数据库创建表https://github.com/openzipkin/zipkin/tree/master/zipkin-storage/mysql 中有详细内容,最主要的是到导入https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql/src/main/resources/mysql.sql 文件 (mysql中如何使用sql文件创建表格,不在本文介绍中,可百度或者谷歌).

第二步
根据https://github.com/openzipkin/zipkin/blob/master/zipkin-server/src/main/resources/zipkin-server-shared.yml 以及https://github.com/openzipkin/zipkin/blob/master/zipkin-server/src/main/java/zipkin/server/ZipkinServerConfiguration.java

创建对应的环境变量,例如根据ZipkinServerConfiguration.java, 我们可以知道环境变量zipkin.storage.type是获取存储类型的, 因此我们可以在启动zipkin的shell或者windows中设置环境变量zipkin.storage.type=mysql, 实际设置环境变量STORAGE_TYPE=mysql也是可以的

  static final class StorageTypeMemAbsentOrEmpty implements Condition {
    @Override public boolean matches(ConditionContext condition, AnnotatedTypeMetadata ignored) {
      String storageType = condition.getEnvironment().getProperty("zipkin.storage.type");
      if (storageType == null) return true;
      storageType = storageType.trim();
      if (storageType.isEmpty()) return true;
      return storageType.equals("mem");
    }
}

根据zipkin.storage.type我们知道mysql host和port都有默认值,user和pass需要设置,根据实际情况我们设置了MYSQL_USER=yang MYSQL_PASS=xxxx(密码设置为自己的实际密码,此处用xxx代替)

mysql:
      host: ${MYSQL_HOST:localhost}
      port: ${MYSQL_TCP_PORT:3306}
      username: ${MYSQL_USER:}
      password: ${MYSQL_PASS:}
      db: ${MYSQL_DB:zipkin}
      max-active: ${MYSQL_MAX_CONNECTIONS:10}
use-ssl: ${MYSQL_USE_SSL:false}

第三步
在设置了第二部环境变量的shell中或者windows的cmd中启动zipkin。
java -jar zipkin-server-2.4.3-exec.jar > out.txt

因为zipkin是springboot程序也可以通过启动命令行设置环境变量
java -jar zipkin-server-2.4.3-exec.jar –STORAGE_TYPE=mysql –MYSQL_DB=zipkin –MYSQL_USER=yang –MYSQL_PASS=xxx

这里写图片描述

日志中可以发现
2018-01-24 10:53:42.511 INFO 4360 — [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2018-01-24 10:53:42.521 INFO 4360 — [ main] o.s.j.e.a.AnnotationMBeanExporter : Bean with name ‘mysqlDataSource’ has been autodetected for JMX exposure
2018-01-24 10:53:42.521 INFO 4360 — [ main] o.s.j.e.a.AnnotationMBeanExporter : Located MBean ‘mysqlDataSource’: registering with JMX server as MBean [com.zaxxer.hikari:name=mysqlDataSource,type=HikariDataSource]
2018-01-24 10:53:42.531 INFO 4360 — [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0
2018-01-24 10:53:42.701 INFO 4360 — [ main] b.c.e.u.UndertowEmbeddedServletContainer : Undertow started on port(s) 9411 (http)
2018-01-24 10:53:42.711 INFO 4360 — [ main] zipkin.server.ZipkinServer : Started ZipkinServer in 10.232 seconds (JVM running for 11.114)
2018-01-24 10:54:22.104 INFO 4360 — [ XNIO-2 I/O-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting…
2018-01-24 10:54:22.296 INFO 4360 — [ XNIO-2 I/O-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.

检查数据库和 zipkin web ui http://localhost:9411/zipkin/

这里写图片描述

web UI

这里写图片描述

简要说明一下服务调用背景:有四个服务server1,到service4, 其中service1一方面直接调用了service4,同时又调用了service2, service2调用了service3和server4. 所以就如截图所示的,service1直接到service4, service1直接到service2, service2直接到service3和service4.

关于这个例子可以参考zipkin官方的https://github.com/openzipkin/brave-webmvc-example 以及https://github.com/liaokailin/zipkin

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值