Linux搭建Zipkin,实现数据持久化到Mysql、ES
目录
- 1、下载
- 2、编译
- 3、部署、启动
- 4、访问测试
- 5、UI页面介绍
- 6、持久化配置
-
- 6.1 持久化到Mysql
- 6.2 持久化到ES
Zipkin分为两端,一个是 Zipkin服务端,一个是 Zipkin客户端,客户端也就是微服务的应用(java端)。 客户端会配置服务端的 URL 地址,一旦发生服务间的调用的时候,会被配置在微服务里面的 Sleuth 的监听器监听,并生成相应的 Trace 和 Span 信息发送给服务端。
1、下载
下载地址:https://github.com/openzipkin/zipkin/tags
在gitHub
下载对应版本的zipkin,比如:zipkin-2.21.7.zip
2、编译
将下载的zipkin-2.21.7.zip
进行解压得到zipkin-2.21.7
目录:
进入目录,执行mvnw -DskipTests --also-make -pl zipkin-server clean install
命令,开始编译:
编程完成后,在zipkin-server\target
目录下得到zipkin-server-2.21.7-exec.jar
包
3、部署、启动
创建工作目录:
mkdir /opt/zipkin -p
将本地的jar
包拷贝到/opt/zipkin
目录下
建立start.sh脚本:
Zipkin默认端口为9411,在启动时通过--server.port=xxxx
设置指定端口
#!/bin/shexport LANG="en_US.UTF-8"cd /opt/zipkinrunMessage=`ps aux | grep \`cat pidfile.txt\``projectStartCommand="/usr/local/java/jdk1.8.0_131/bin/java -jar zipkin-server-2.21.7-exec.jar"if [[ $runMessage == *$projectStartCommand* ]]thenecho "Application has starting ,restarting..."kill -9 `cat pidfile.txt`nohup /usr/local/java/jdk1.8.0_131/bin/java -jar zipkin-server-2.21.7-exec.jar -java.tmp.dir=/opt/zipkin/temp >/dev/null >zipkin.log 2>&1 & echo $! > pidfile.txt elseecho "Application has stopped ,starting..."nohup /usr/local/java/jdk1.8.0_131/bin/java -jar zipkin-server-2.21.7-exec.jar -java.tmp.dir=/opt/zipkin/temp >/dev/null >zipkin.log 2>&1 & echo $! > pidfile.txtfi
建立stop.sh脚本:
#!/bin/shcd /opt/zipkinPID=$(cat pidfile.txt)if [ ${PID} ]; thenecho 'Application is stpping...'echo kill $PID DONEkill $PIDelseecho 'Application is already stopped...'fi
脚本修改权限:
chmod 777 start.shchmod 777 stop.sh
配置自启:
vim /usr/lib/systemd/system/zipkin.service
内容:
[Unit]Description=zipkin[Service]Type=forkingExecStart=/opt/zipkin/start.shExecStop=/opt/zipkin/stop.shPrivateTmp=true[Install]WantedBy=multi-user.target
操作命令:
# 开启自启systemctl daemon-reloadsystemctl enable zipkin.service# 启动systemctl start zipkin#停止systemctl stop zipkin
4、访问测试
访问地址:162.11.15.114:9411
5、UI页面介绍
6、持久化配置
Zipkin Server默认会将追踪数据信息保存到内存,在重启服务后追踪数据将不存在,Zipkin支持将追踪数据持久化到mysql数据库或elasticsearch中。
持久化需要注意Mysql与ES的版本,在https://github.com/openzipkin/zipkin,可以进行查看,如下:
6.1 持久化到Mysql
1、创建数据库,比如zipkin
2、创建表,语句参考:https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql
3、修改启动命令
在启动时指定Mysql配置,将脚本中的启动命令修改为:
/usr/local/java/jdk1.8.0_131/bin/java -jar zipkin-server-2.21.7-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=111.229.160.175 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=lhzlx -java.tmp.dir=/opt/zipkin/temp >/dev/null >zipkin.log 2>&1 & echo $! > pidfile.txt
4、验证:
启动zipkin-server并且进行请求,再次重启zipkin-server,可以看见依然存在请求链路录记录,并且mysql表中存在记录。
6.2 持久化到ES
持久化到ES
不需要建立什么配置信息,只需要在启动jar
时指定ES
地址即可,将脚本中的启动命令修改为:
/usr/local/java/jdk1.8.0_131/bin/java -jar zipkin-server-2.21.7-exec.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=localhost:9200 -java.tmp.dir=/opt/zipkin/temp >/dev/null >zipkin.log 2>&1 & echo $! > pidfile.txt
如果是连接ES集群,--ES_HOSTS
通过逗号分割,比如:--ES_HOSTS=http://1.1.1.1:9200,http://2.2.2.2:9200
连接ES参数:
环境变量 | 描述 |
---|---|
ES_HOSTS | 连接ES地址,多个由, 分隔。默认为http://localhost:9200 |
ES_PIPELINE | 指定span被索引之前的pipeline |
ES_TIMEOUT | 连接ES的超时时间,单位ms 。默认10000(10S) |
ES_INDEX | Zipkin持久化所使用的索引。默认zipkin |
ES_DATE_SEPARATOR | Zipkin建立索引的日期分隔符。默认为- |
ES_INDEX_SHARDS | 分片(shard)个数,默认5个 |
ES_INDEX_REPLICAS | 副本(replica)个数,默认1个 |
ES_HTTP_LOGGING | ES的日志级别,BASIC, HEADERS, BODY |
ES_USERNAME/ES_PASSWORD | 登录ES的用户名和密码 |