目前正在基于springCloud(Hoxton.SR8)+spring-boot(2.3.1.RELEASE)+spring-cloud-alibaba(2.2.4.RELEASE)搭建微服务环境,本人玩微服务的时间算是比较长了,过去工作中由于上级要求的工期比较紧张,对于服务治理监控的组件一直没有过多接触,因此在项目规模大到一定程度之后,就吃了不重视微服务监控的亏,因此最近搭建的框架就比较注重这方面内容了,之所以写这边文档是因为在搭建zipkin+sleuth+mysql+rabbitmq的过程中浪费了我整整一天的时间,因为在部署类似中间件过程中,本人比较习惯使用docker,之所以习惯使用docker并不是自己对容器技术多么熟悉,主要是因为方便快捷,而且我特别讨厌在部署程序时配置一堆环境变量,因此部署啥玩意都喜欢用docker部署,但这次部署搞得我很郁闷,调试了很长时间。虽然网上资料不少,但要么是资料过老,要么就是胡乱copy,有用的资料不多,网上搭建zipkin过程中,往往不使用http方式,而是使用消息队列,因为http方式效率太低,但主流的配置一般都集成kafka,kafka是一个很优秀的消息队列框架,高并发还有高可用,但是kafka我很少使用,为什么,这玩意太重,而且它的API也少,我一直认为kafka更偏向于数据处理层面,像我这样偏应用侧开发的人,一般玩消息队列都使用rabbitmq,因为它API多,至于它比kafaka差的那点效率问题,我反正没多少感觉,之所以整理成文档,是因为虽然是搭建看似比较简单服务追踪组件,但在集成的过程中,适配了很久,如果不记录下来,后面就忘了,还有就是分享出来,让计划玩这块的兄弟们少走些弯路,废话不多说,开始搞................
二、Docker安装docker安装比较简单,我不想多说,如果你连docker基本操作都不会,那还是老老实实的看别的资料把,我就把一些命令记录下来,环境是centos7,注意哈,一定要先把 SELINUX关闭,这玩意是搞centos7之前最先应该做的,不然后面会出一些乱起八糟的错误,还有就是防火墙,要么直接管了,要么记着将端口加进去,如3306、15672、5672、9411,总之别忘了!!!!
1、安装命令:
yum install -y docker
2、配置阿里容器加速器,去阿里注册,然后将链接copy下来就行,网上资料很多,我就不啰嗦了
vi /etc/docker/daemon.json{"registry-mirrors": ["这个地方填从阿里官网copy的链接"]}
3、重载阿里镜像加速器配置文件:
systemctl daemon-reload
4、重启下docker:
systemctl restart docker
三、安装RabbitMQ1、拉取rabbitmq镜像:一定要拉取带有管理端的rabbitmq,千万别搞错
docker pull docker.io/macintoshplus/rabbitmq-management
2、启动容器
docker run -d --name rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 3f92e6354d11(这是镜像id,使用“docker images”查查自己刚刚拉取的rabbitmq镜像ID)
3、打开rabbitmq管理端看看能进去吗? http://ip:15672/
三、安装mysql我感觉zipkin对数据库的版本是有要求的,一开始配置时,我直接将zipkin与mysql和rabbitmq一块配置上了,就是不成功,开始以为是rabbitmq集成有问题,后来才发现是mysql版本的问题,我的mysql版本有点高,最后安装了mysql:5,7才搞定的,最可气的是,就算mysql版本不对,zipkin是能正常启动的,反正就是坑死我了
1、拉取mysql5.7镜像
docker pull mysql:5.7
2、启动容器
docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
3、创建数据库,由于zipkin默认使用数据库实例名就是“zipkin”,我担心节外生枝,在创建数据库时直接就是用的这个名字,别的名字没试过,应该问题不大
4、创建数据库表,zipkin对数据库表我感觉也是需要匹配的,我担心这个问题,就从github上的源码里下载了一份
---- Copyright 2015-2019 The OpenZipkin Authors---- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except-- in compliance with the License、You may obtain a copy of the License at---- http://www.apache.org/licenses/LICENSE-2.0---- Unless required by applicable law or agreed to in writing, software distributed under the License-- is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR ConDITIONS OF ANY KIND, either express-- or implied、See the License for the specific language governing permissions and limitations under-- the License.--CREATE TABLE IF NOT EXISTS zipkin_spans ( `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit', `trace_id` BIGINT NOT NULL, `id` BIGINT NOT NULL, `name` VARCHAr(255) NOT NULL, `remote_service_name` VARCHAr(255), `parent_id` BIGINT, `debug` BIT(1), `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL', `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query', PRIMARY KEY (`trace_id_high`, `trace_id`, `id`)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';ALTER TABLE zipkin_spans ADD INDEX(`remote_service_name`) COMMENT 'for getTraces and getRemoteServiceNames';ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range';CREATE TABLE IF NOT EXISTS zipkin_annotations ( `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit', `trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id', `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id', `a_key` VARCHAr(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1', `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB', `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation', `a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp', `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null', `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address', `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null', `endpoint_service_name` VARCHAr(255) COMMENT 'Null when Binary/Annotation.endpoint is null') ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces and autocomplete values';ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces and autocomplete values';ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'for dependencies job';CREATE TABLE IF NOT EXISTS zipkin_dependencies ( `day` DATE NOT NULL, `parent` VARCHAr(255) NOT NULL, `child` VARCHAr(255) NOT NULL, `call_count` BIGINT, `error_count` BIGINT, PRIMARY KEY (`day`, `parent`, `child`)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
四、安装zipkin由于使用docker安装,但网上有很多使用下载jar安装,我嫌麻烦,还要配置jdk,我使用的是docker-compose安装的,但安装docker-compose也挺费事,如果你像按照这篇文档一步一步完成搭建,就按照此方法安装吧,别的方式我不保证不出错误哈
1、安装Docker-Compose
1、yum -y install epel-release2、yum -y install python-pip3、pip install --upgrade pip4、pip install docker-compose5、检查是否安装成功:docker-compose -version
2、创建docker-compose.yml,由于是yml文件,要求格式比较严谨,别多空格也别少空格,仔细检查检查
version: '2'services: zipkin: container_name: zipkin # 这是容器启动之后的名称,不用改它 image: openzipkin/zipkin # 这是zipkin的镜像名称,别写错 environment: - STORAGE_TYPE=mysql - MYSQL_DB=zipkin #数据库名称 - MYSQL_USER=root - MYSQL_PASS=123456 - MYSQL_HOST=192.168.0.112 # 部署数据库的服务器地址 - MYSQL_TCP_PORT=3306 - RABBIT_ADDRESSES=192.168.0.112:5672 #部署rabbitmq服务器地址,可以和数据库的地址一样也可以不一样 - RABBIT_USER=admin - RABBIT_PASSWORD=admin ports: - 9411:9411
3、进入docker-compose.yml所在的目录,启动容器
docker-compose up -d
五、给每个需要监控的微服务配置maven和yml这个环节也挺坑的,网上说的yml配置文件,我看到的版本就不下5种,我真是不明白这些文档真能配置成功吗!反正我没有配置成功
1、配置maven依赖
就这两个包就行,mysql的包我就不贴了,因为我用的是mysql+mysqlplus,自己写配置类挺复杂的,贴上去反而不好,反正你的微服务能连数据库就OK了,记住关于zipkin和rabbitmq的包就这两个,当然前提是你的springcloud和springboot环境我一样,至少得springBoot2.0以上吧
2、配置微服务yml文件,我直接在bootstrap.yml里配的,需要说明的是,zipkin和rabbitmq是同级别,都在spring下边,千万别配错,网上有些别的配法,我都试了,没成功
zipkin: sender: type: rabbit rabbitmq: host: 192.168.0.112 port: 5672 username: admin password: admin listener: direct: retry: enabled: true simple: retry: enabled: true
over!!!!