springcloud集成zipkin
2023-02-06 18:29:43 0 举报
springcloud集成zipkin,持久化
作者其他创作
大纲/内容
简介
zipkin是twitter开源的分布式跟踪系统,主要用来收集系统的实时数据,从而追踪系统的调用问题。<br>
官网
https://zipkin.io/
spring 文档
https://docs.spring.io/spring-cloud-sleuth/docs/current/reference/html/integrations.html#sleuth-openfeign-integration
安装zipkin<br>
docker-compose.yml代码 <br>
version: '3'<br>services:<br> zipkin:<br> image: openzipkin/zipkin<br> container_name: zipkin<br> ports: <br> - 9411:9411
启动命令 docker-compose up -d
服务项目代码
项目导入pom依赖
<dependency><br> <groupId>org.springframework.cloud</groupId><br> <artifactId>spring-cloud-sleuth-zipkin</artifactId><br> </dependency>
application.yml配置
spring <br> zipkin:<br> base-url: http://192.168.56.1:9411<br> discovery-client-enabled: false #关闭服务发现,否则springcloud 会把zipkin的服务url当做服务名称<br> sender:<br> type: web #使用http的方式传输数据<br> sleuth:<br> trace-id128: true<br> sampler:<br> probability: 1 #抽样采集率为100% 默认为0.1即10%<br> baggage:<br> tag-fields: tag_name
HelloController.java代码
<br>@Slf4j<br>@RestController<br>public class HelloController {<br><br> @Autowired<br> ZipkinService zipkinService;<br> @SentinelResource(value="hello")<br> @RequestMapping(value = "/hello",produces = "text/json")<br> public String hello(){<br> log.info("say hello word!");<br> //远程调用<br> String s = zipkinService.helloWord();<br> return s;<br> }<br><br>}<br>
验证
浏览器输入请求地址:http://localhost:9000/hello
浏览器访问zipkin地址查看效果:http://192.168.56.10:9411/zipkin/
nginx配置
upstream zipkin{<br> server 192.168.56.10:9411;<br>}<br>server {<br> listen 9411;<br> server_name localhost;<br><br> location / {<br> proxy_pass http://zipkin;<br> }<br>}
错误
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties
解决方案:将pom.xml的依赖替换<br><br><dependency><br> <groupId>org.springframework.boot</groupId><br> <artifactId>spring-boot-actuator</artifactId><br> </dependency><br>替换为<br><dependency><br> <groupId>org.springframework.boot</groupId><br> <artifactId>spring-boot-starter-actuator</artifactId><br> </dependency><br><br>
直接持久化到mysql
优点:简单,无需添加额外的中间件,缺点:服务性能消耗较大
创建数据库
<br>
create DATABASE zipkin;<br>
建表
CREATE TABLE IF NOT EXISTS zipkin_spans (<br> `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',<br> `trace_id` BIGINT NOT NULL,<br> `id` BIGINT NOT NULL,<br> `name` VARCHAR(255) NOT NULL,<br> `remote_service_name` VARCHAR(255),<br> `parent_id` BIGINT,<br> `debug` BIT(1),<br> `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',<br> `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query',<br> PRIMARY KEY (`trace_id_high`, `trace_id`, `id`)<br>) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;<br> <br>ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';<br>ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';<br>ALTER TABLE zipkin_spans ADD INDEX(`remote_service_name`) COMMENT 'for getTraces and getRemoteServiceNames';<br>ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range';<br> <br>CREATE TABLE IF NOT EXISTS zipkin_annotations (<br> `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',<br> `trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',<br> `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',<br> `a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',<br> `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',<br> `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',<br> `a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',<br> `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',<br> `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',<br> `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',<br> `endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null'<br>) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;<br> <br>ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';<br>ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';<br>ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';<br>ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';<br>ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces and autocomplete values';<br>ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces and autocomplete values';<br>ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'for dependencies job';<br> <br>CREATE TABLE IF NOT EXISTS zipkin_dependencies (<br> `day` DATE NOT NULL,<br> `parent` VARCHAR(255) NOT NULL,<br> `child` VARCHAR(255) NOT NULL,<br> `call_count` BIGINT,<br> `error_count` BIGINT,<br> PRIMARY KEY (`day`, `parent`, `child`)<br>) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;<br>
调整zipkin的docker-compose.yml新增mysql相关配置
docker-compose.yml文件
version: '3'<br>services:<br> zipkin:<br> image: openzipkin/zipkin<br> environment:<br> - TZ=Asia/Shanghai<br> - JAVA_OPTS=-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms100m -Xmx1024m -Xmn256m <br> - STORAGE_TYPE=mysql<br> - MYSQL_DB=zipkin<br> - MYSQL_USER=root<br> - MYSQL_PASS=root<br> - MYSQL_HOST=192.168.56.10<br> - MSYQL_TCP_PORT=3306<br> container_name: zipkin<br> ports: <br> - 9411:9411
重新启动zipkin
docker-compose down &&docker-compose up -d&&dopcker-compose logs -f
通过rabbitmq持久化到mysql
基于以上直接持久化到mysql的数据库脚本
安装rabbitmq,docker方式启动,根据实际情况修改启动脚本
docker run -d --restart=always --name rabbitmq -p 5672:5672 \<br> -p 15672:15672 -e RABBITMQ_DEFAULT_USER='admin' \<br>-e RABBITMQ_DEFAULT_PASS='admin' \<br>-e RABBITMQ_NODENAME='MYNODE@localhost' \<br>-v /home/rabbitmq/data:/var/lib/rabbitmq \<br>-v /home/rabbitmq/definitions.json:/opt/definitions.json \<br>-v /home/rabbitmq/rabbitmq.config:/etc/rabbitmq/rabbitmq.config \<br>-v /etc/localtime:/etc/localtime rabbitmq:management-alpine<br>
服务项目application.yml配置
子主题
添加rabbitmq配置项
version: '3'<br>services:<br> zipkin:<br> image: openzipkin/zipkin<br> environment:<br> - TZ=Asia/Shanghai<br> - JAVA_OPTS=-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms100m -Xmx1024m -Xmn256m <br> - STORAGE_TYPE=mysql<br> #数据库链接信息<br> - MYSQL_DB=zipkin<br> - MYSQL_USER=root<br> - MYSQL_PASS=root<br> - MYSQL_HOST=192.168.56.10<br> - MSYQL_TCP_PORT=3306<br> #rabitmq链接信息<br> - RABBIT_ADDRESSES=192.168.56.10:5672<br> - RABBIT_USER=admin<br> - RABBIT_PASSWORD=admin<br> - RABBIT_QUEUE=zipkin<br> - RABBIT_VIRTUAL_HOST=/<br> container_name: zipkin<br> ports: <br> - 9411:9411<br>
项目启动报错
Parameter 2 of method reporter in org.springframework.cloud.sleuth.zipkin2.ZipkinAutoConfiguration required a bean of type 'zipkin2.reporter.Sender' that could not be found.<br>
需要注入Sender与ConnectFactory
@Configuration<br>public class ZipkinConfig {<br> @Autowired<br> private RabbitProperties rabbitProperties;<br> @Bean<br> Sender rabbitSender2(){<br> ConnectionFactory connectionFactory=new ConnectionFactory();<br> connectionFactory.setHost(rabbitProperties.getHost());<br> connectionFactory.setPort(rabbitProperties.getPort());<br> connectionFactory.setUsername(rabbitProperties.getUsername());<br> connectionFactory.setPassword(rabbitProperties.getPassword());<br> return RabbitMQSender.newBuilder()<br> .connectionFactory(connectionFactory)<br> .queue("zipkin")<br> .addresses(rabbitProperties.getHost()+":"+rabbitProperties.getPort())<br> .build();<br> }<br><br>}<br>
浏览器访问验证
持久化到elasticsearch
待完善。。。。
0 条评论
下一页