Spring Boot集成zipkin快速入门Demo

news2024/10/1 21:42:59

1.什么zipkin

Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据。Zipkin默认支持Http协议,除此之外,它还支持kafka,rabbitmq以及scribe协议:

2.搭建zipkin环境

1.获取镜像

docker pull openzipkin/zipkin

2.启动

docker run --name zipkin -d -p 9411:9411 openzipkin/zipkin

3.web端查看

浏览器打开 http://127.0.0.1:9411

f85734bff89436b8b524c8787dfe0921.png

3.代码项目

实验目的:实现监控数据上报到zipkin,并分析每个方法的执行时间

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springboot-demo</artifactId>
        <groupId>com.et</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>


    <artifactId>zipkin</artifactId>


    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
    </dependencies>
</project>

application.properties

#zipkin
spring.zipkin.base-url=http://127.0.0.1:9411/
spring.zipkin.enabled=true
spring.sleuth.sampler.probability=1
##
server.port=8088

controller

package com.et.zipkin.controller;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;


import java.net.URI;
import java.util.HashMap;
import java.util.Map;
@RestController
public class HelloWorldController {
    private static Logger log = LoggerFactory.getLogger(HelloWorldController.class);




    @Autowired
    private RestTemplate restTemplate;


    @RequestMapping("ping")
    public Object ping() {
        log.info("进入ping");
        return "pong study";
    }


    @RequestMapping("log")
    public Object log() {
        log.info("this is info log");
        log.error("this is error log");
        log.debug("this is debug log");
        log.warn("this is warn log");
        log.trace("this is trace log");
        return "123";
    }


    @RequestMapping("http")
    public Object httpQuery() {


        String studyUrl = "http://localhost:8088/ping";
        URI studyUri = URI.create(studyUrl);
        String study = restTemplate.getForObject(studyUri, String.class);
        log.info("study:{}", study);


        String floorUrl = "http://localhost:8088/log";
        URI floorUri = URI.create(floorUrl);
        String floor = restTemplate.getForObject(floorUri, String.class);
        log.info("floor:{}", floor);


        String roomUrl = "http://localhost:8088/ping";
        URI roomUri = URI.create(roomUrl);
        String room = restTemplate.getForObject(roomUri, String.class);
        log.info("room:{}", room);
        return study + "-------" + floor + "-------" + room + "-------";
    }




}

config

package com.et.zipkin.config;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;


/**
 * RestTemplate  config
 */
@Configuration
public class RestTemplateConfig {
 
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        return new RestTemplate(factory);
    }
 
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(5000);//unit is ms
        factory.setConnectTimeout(5000);//unit is ms
        return factory;
    }
}

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • https://github.com/Harries/springboot-demo

4.测试

启动Spring Boot应用

访问controller

浏览器输入http://127.0.0.1:8088/http,可以看到控制台生成traceID 和spanid

2024-04-19 10:54:18.353 INFO [,37bf669cd6027ce8,86712cf932e61e5b,true] 31404 --- [nio-8088-exec-2] c.e.z.controller.HelloWorldController : 进入ping
2024-04-19 10:54:18.370 INFO [,37bf669cd6027ce8,37bf669cd6027ce8,true] 31404 --- [nio-8088-exec-1] c.e.z.controller.HelloWorldController : study:pong study
2024-04-19 10:54:18.373 INFO [,37bf669cd6027ce8,eb552e780a6de261,true] 31404 --- [nio-8088-exec-3] c.e.z.controller.HelloWorldController : this is info log
2024-04-19 10:54:18.373 ERROR [,37bf669cd6027ce8,eb552e780a6de261,true] 31404 --- [nio-8088-exec-3] c.e.z.controller.HelloWorldController : this is error log
2024-04-19 10:54:18.374 WARN [,37bf669cd6027ce8,eb552e780a6de261,true] 31404 --- [nio-8088-exec-3] c.e.z.controller.HelloWorldController : this is warn log
2024-04-19 10:54:18.375 INFO [,37bf669cd6027ce8,37bf669cd6027ce8,true] 31404 --- [nio-8088-exec-1] c.e.z.controller.HelloWorldController : floor:123
2024-04-19 10:54:18.377 INFO [,37bf669cd6027ce8,3b1df4558b01739f,true] 31404 --- [nio-8088-exec-4] c.e.z.controller.HelloWorldController : 进入ping
2024-04-19 10:54:18.379 INFO [,37bf669cd6027ce8,37bf669cd6027ce8,true] 31404 --- [nio-8088-exec-1] c.e.z.controller.HelloWorldController : room:pong study

zipkin查看调用链

可以看到刚刚访问trace id,以及调用的3个方法耗时,以及具体的代码位置信息5cd72e71a183ee90a9456dcfefc1bdd1.png

5.参考

  • http://www.liuhaihua.cn/archives/710448.html

  • https://spring.academy/guides/spring-spring-zipkin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1613836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

提取出图像的感兴趣区域

这是我们的原图像 将图像的数值统计后进行条形图展示 import matplotlib.pyplot as plt from PIL import Image import numpy as np# 图像路径 image_path r"D:\My Data\Figure\OIP.jpg"# 打开图像 image Image.open(image_path)# 将图像转换为numpy数组 image_ar…

Redis持久化策略揭秘:如何实现高可用!

【更多精彩内容,欢迎关注小米的微信公众号“软件求生”】 大家好!我是你们的小米,很高兴和大家分享Redis的持久化知识。Redis作为一款强大的内存数据库,经常被用于缓存和存储临时数据。然而,在很多场景中,我们希望Redis的数据能够持久保存,以备不时之需。那么,Redis如…

SpringBoot 操作 Redis

导入对应版本的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>修改配置文件中的信息 spring:redis:host: 127.0.0.1port: 8888注意: 我这里 xsh…

SVD奇异值分解原理及应用

-------------------------------------------------------------------------------------------------------------------------------- 首先说明&#xff1a;本文的内容来自百家号“人工智能遇见磐创”大佬的整理&#xff0c;感谢原作者&#xff08;本文在原作者的基础上按…

影响钕铁硼磁钢性能的因素及方法

钕铁硼永磁材料自问世以来&#xff0c;就以其优越的磁性能而备受关注&#xff0c;被称为“磁王“&#xff0c;在市场需求的不断地增长下&#xff0c;钕铁硼生产工艺及磁体性能也不断发展和提升。我们一般用剩磁、矫顽力和最大磁能积这几个指标来衡量磁性材料的磁性能。 剩磁 B…

三. TensorRT基础入门-TensorRT简介

目录 前言0. 简述1. 什么是TensorRT2. TensorRT的工作流介绍3. TensorRT的一些限制总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习课程第三章—TensorRT 基础入门&#xf…

2024年3月电风扇家电线上电商(京东天猫淘宝)销售数据排行榜

鲸参谋监测的线上电商&#xff08;京东天猫淘宝&#xff09;平台3月份的电风扇家电销售数据已出炉&#xff01; 根据鲸参谋数据显示&#xff0c;今年3月份&#xff0c;电风扇市场呈现出稳步增长态势。在线上电商平台上电风扇总销量累计约226万件&#xff0c;环比上个月上涨了2…

前程贷v6.5系统测试报告

1.引言部分 1&#xff0e;1 项目背景 本测试报告的具体编写目的&#xff0c;指出预期的读者范围。(3-4句) 项目描述 &#xff08;项目内容&#xff0c;用户需求&#xff09; 本测试报告为**&#xff08;系统名称&#xff09;**系统测试报告&#xff1b;本报告目的在于总结测试…

可平滑替代FTP的传输方案,需要具备哪些特质?

随着技术的发展和网络安全需求的提升&#xff0c;传统的FTP受安全性和效率方面的局限性&#xff0c;已经逐渐不能满足现代企业的需求。因此&#xff0c;许多企业和组织开始寻找替代FTP的方案&#xff0c;以提高文件传输的安全性、效率和便捷性。FTP传输存在的弊端及不足主要包括…

洛谷 A+B 问题 python

题目描述 输入两个整数 a,b&#xff0c;输出它们的和 输入格式 两个以空格分开的整数&#xff08;不是输入两个input&#xff08;&#xff09;解决&#xff09;。 输出格式 一个整数。 输入输出样例 输入 20 30 输出 50 这个问题的难点就是在于python当中进行两个输入数字…

JavaScript-3.DOM

通过HTML DOM,可以访问JavaScript HTML文档中的所有元素 DOM(Document Object Model) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。将网页内的元素封装成一个对象,并建立元素的层级关系,形似一棵树,称为DOM树。 通过可编程的对象模型,…

【简单介绍下Faiss原理和使用】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

【软考---系统架构设计师】软件架构

目录 1 一、软件架构的概念 二、软件架构风格 &#xff08;1&#xff09;数据流风格​​​​​​​ &#xff08;2&#xff09;调用/返回风格 &#xff08;3&#xff09;独立构件风格 &#xff08;4&#xff09;虚拟机风格 &#xff08;5&#xff09;仓库风格 三、架构…

知识图谱的起源与发展

文章目录 知识图谱的发展历史知识图谱的重要性知识图谱与Ontology、语义网络之间的区别知识图谱的定义 知识图谱的发展历史 知识图谱始于20世纪50年代&#xff0c;至今大致分为三个发展阶段&#xff1a;第一阶段 &#xff08;1955年—1977年&#xff09;是知识图谱的起源阶段&a…

C++学习————第八天(C/C++内存管理)

目录 1、1.C/C内存分布 2、 C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3、C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 4.operator new与operator delete函数 5. new和delete的实现原理 5.1 内置类型 5.2 自定…

C++ 初识模板

目录 0.前言 1.泛型编程 2.函数模板 2.1概念 2.2格式 2.3原理 2.4函数模板的实例化 2.4.1隐式实例化 2.4.2显式实例化 2.5模板参数的匹配原则 3.类模板 3.1类模板的定义格式 3.2类模板的实例化 4.结语 &#xff08;图像由AI生成&#xff09; 0.前言 在 C 中&a…

密码学 | 承诺:常见的承诺方案

&#x1f951;原文&#xff1a;密码学原语如何应用&#xff1f;解析密码学承诺的妙用 - 知乎 1 简介 密码学承诺 涉及 承诺方、验证方 两个参与方&#xff0c;以及以下两个阶段&#xff1a; 承诺阶段&#xff1a;承诺方选择一个敏感数据 v v v&#xff0c;为它计算出相应…

docker打包部署自己的应用

docker部署应用 当谈及使用 Docker 进行容器化部署应用时&#xff0c;可以想象它是一个能够将整个应用程序及其所有依赖项打包成一个独立、可移植的容器的工具。这个容器不仅包含了应用代码&#xff0c;还包括了操作系统、运行时环境以及所有依赖的库和组件。这样一来&#xf…

Python 全栈安全(二)

原文&#xff1a;annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第二部分&#xff1a;认证与授权 本书的第二部分是最具商业价值的部分。我这样说是因为它充满了大多数系统需要具备的实用工作流示例&#xf…

nginxtomcat笔记

nginx是一个轻量级高性能的http和反向代理web服务器&#xff0c;优点&#xff1a;占用内存少&#xff0c;并发能力强 实验主机&#xff1a;192.168.200.141 192.168.200.142 1.虚拟主机 1.1基于域名&#xff1a;一台服务器&#xff0c;一个端口&#xff0c;部署多个网站 在ng…