一,基础知识储备
分布式跟踪的目标
一个分布式系统由若干分布式服务构成,每一个请求会经过多个业务系统并留下足迹,但是这些分散的数据对于问题排查,或是流程优化都很有限,要能做到追踪每个请求的完整链路调用,收集链路调用上每个服务的性能数据,计算性能数据和比对性能指标(SLA),甚至能够再反馈到服务治理中,那么这就是分布式跟踪的目标。

分布式跟踪的目的
zipkin分布式跟踪系统的目的:

zipkin为分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪;
zipkin通过采集跟踪数据可以帮助开发者深入了解在分布式系统中某一个特定的请求时如何执行的;
假如我们现在有一个用户请求超时,我们就可以将这个超时的请求调用链展示在UI当中;我们可以很快度的定位到导致响应很慢的服务究竟是什么。如果对这个服务细节也很很清晰,那么我们还可以定位是服务中的哪个问题导致超时;
zipkin系统让开发者可通过一个Web前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。
ZipKin介绍
Zipkin是一个致力于收集分布式服务的时间数据的分布式跟踪系统。

Zipkin 主要涉及四个组件:collector(数据采集),storage(数据存储),search(数据查询),UI(数据展示)。

github源码地址: https://github.com/openzipkin/zipkin。

Zipkin提供了可插拔数据存储方式:In-Memory,MySql, Cassandra, Elasticsearch

brave 介绍
Brave 是用来装备 Java 程序的类库,提供了面向标准Servlet、Spring MVC、Http Client、JAX RS、Jersey、Resteasy 和 MySQL 等接口的装备能力,可以通过编写简单的配置和代码,让基于这些框架构建的应用可以向 Zipkin 报告数据。同时 Brave 也提供了非常简单且标准化的接口,在以上封装无法满足要求的时候可以方便扩展与定制。

本文主要介绍springmvc+dubbo下的brave使用。

二,dubbo项目下快速搭建
Zipkin+brave追踪

1、zipkin安装使用
此处主要介绍linux下的安装使用,zipkin官网地址 http://zipkin.io/pages/quickstart.html

wget -O zipkin.jar 'https://search.maven.org/remote\_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec'

说明:zipkin是springboot项目,该jar包可直接通过java -jar zipkin.jar启动。启动完成后可访问 http://ip:9411查看。

2、zipkin存储与启动
详情参考官网: https://github.com/openzipkin/zipkin/tree/master/zipkin-server

(1)In-Memory方式
nohup java -jar zipkin.jar &

注意:内存存储,zipkin重启后数据会丢失, 建议测试环境使用

(2)MySql方式
目前只与MySQL的5.6-7。它的设计是易于理解,使用简单。但是,当数据量大时,查询很慢。性能不是很好。

创建数据库zipkin
建表
CREATETABLEIFNOTEXISTS zipkin_spans (

trace_id_highBIGINTNOTNULLDEFAULT0COMMENT'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',

trace_idBIGINTNOTNULL,

idBIGINTNOTNULL,

nameVARCHAR(255) NOTNULL,

parent_idBIGINT,

debugBIT(1),

start_tsBIGINTCOMMENT'Span.timestamp(): epoch micros used for endTs query and to implement TTL',

durationBIGINTCOMMENT'Span.duration(): micros used for minDuration and maxDuration query'

) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTERSET=utf8 COLLATE utf8_general_ci;

ALTERTABLE zipkin_spans ADDUNIQUEKEY(trace_id_high, trace_id, id) COMMENT'ignore insert on duplicate';

ALTERTABLE zipkin_spans ADDINDEX(trace_id_high, trace_id, id) COMMENT'for joining with zipkin_annotations';

ALTERTABLE zipkin_spans ADDINDEX(trace_id_high, trace_id) COMMENT'for getTracesByIds';

ALTERTABLE zipkin_spans ADDINDEX(name) COMMENT'for getTraces and getSpanNames';

ALTERTABLE zipkin_spans ADDINDEX(start_ts) COMMENT'for getTraces ordering and range';

CREATETABLEIFNOTEXISTS zipkin_annotations (

trace_id_highBIGINTNOTNULLDEFAULT0COMMENT'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',

trace_idBIGINTNOTNULLCOMMENT'coincides with zipkin_spans.trace_id',

span_idBIGINTNOTNULLCOMMENT'coincides with zipkin_spans.id',

a_keyVARCHAR(255) NOTNULLCOMMENT'BinaryAnnotation.key or Annotation.value if type == -1',

a_valueBLOBCOMMENT'BinaryAnnotation.value(), which must be smaller than 64KB',

a_typeINTNOTNULLCOMMENT'BinaryAnnotation.type() or -1 if Annotation',

a_timestampBIGINTCOMMENT'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',

endpoint_ipv4INTCOMMENT'Null when Binary/Annotation.endpoint is null',

endpoint_ipv6BINARY(16) COMMENT'Null when Binary/Annotation.endpoint is null, or no IPv6 address',

endpoint_portSMALLINTCOMMENT'Null when Binary/Annotation.endpoint is null',

endpoint_service_nameVARCHAR(255) COMMENT'Null when Binary/Annotation.endpoint is null'

) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTERSET=utf8 COLLATE utf8_general_ci;

ALTERTABLE zipkin_annotations ADDUNIQUEKEY(trace_id_high, trace_id, span_id, a_key, a_timestamp) COMMENT'Ignore insert on duplicate';

ALTERTABLE zipkin_annotations ADDINDEX(trace_id_high, trace_id, span_id) COMMENT'for joining with zipkin_spans';

ALTERTABLE zipkin_annotations ADDINDEX(trace_id_high, trace_id) COMMENT'for getTraces/ByIds';

ALTERTABLE zipkin_annotations ADDINDEX(endpoint_service_name) COMMENT'for getTraces and getServiceNames';

ALTERTABLE zipkin_annotations ADDINDEX(a_type) COMMENT'for getTraces';

ALTERTABLE zipkin_annotations ADDINDEX(a_key) COMMENT'for getTraces';

ALTERTABLE zipkin_annotations ADDINDEX(trace_id, span_id, a_key) COMMENT'for dependencies job';

CREATETABLEIFNOTEXISTS zipkin_dependencies (

dayDATENOTNULL,

parentVARCHAR(255) NOTNULL,

childVARCHAR(255) NOTNULL,

call_countBIGINT

) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTERSET=utf8 COLLATE utf8_general_ci;

ALTERTABLE zipkin_dependencies ADDUNIQUEKEY(day, parent, child);

启动zipkin命令
$ STORAGE_TYPE=mysql MYSQL_HOST= IP MYSQL_TCP_PORT=3306 MYSQL_DB= zipkin MYSQL_USER= username MYSQL_PASS= password nohup java -jar zipkin.jar &

(3)Elasticsearch方式
本文建议使用此方法。

Elasticsearch官网
创建elasticsearch用户,安装启动Elasticsearch服务
官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
zipkin启动命令
$ STORAGE_TYPE=elasticsearch ES_HOSTS=http:// IP :9200 nohup java -jar zipkin.jar &

3、dubbo项目快速接入
(1)pom
项目pom中添加brave-dubbo.jar的依赖, brave-dubbo简化dubbo项目接入zipkin的步骤。

<dependency>

<groupId>io.zipkin.brave</groupId>
<artifactId>brave-dubbo</artifactId>

<version>1.0.0-SNAPSHOT</version>
</dependency>
(2)配置brave
在spring-application.xml中配置brave

<beanid="brave"class="com.github.kristofa.brave.dubbo.BraveFactoryBean"p:serviceName="serviceName"p:zipkinHost="http://zipkin-server-ip:9411/"p:rate="1.0" />
说明:

zipkin-server-ip 是zipkin服务器ip地址。
p:serviceName 项目名称。
只要是dubbo项目,无论是普通服务,还是web项目,都需要添加此包,并配置brave Bean。
大功告成

---------------------
版权声明:本文为CSDN博主「许恕」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xvshu/article/details/79714491

https://github.com/openzipkin/zipkin/tree/master/zipkin-server

https://github.com/openzipkin/zipkin/tree/master/zipkin-server

APM监控--(三)zipkin部署手册的更多相关文章

  1. 大众点评cat实时监控简介及部署

    简介 背景 CAT(Central Application Tracking)是由吴其敏(前大众点评首席架构师,现携程架构负责人)主导设计基于Java开发打造的实时应用监控平台,为大众点评网提供了全面 ...

  2. LVS+MYCAT+读写分离+MYSQL主备同步部署手册

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  3. 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  4. Nacos系列:Nacos的三种部署模式

    三种部署模式 Nacos支持三种部署模式 1.单机模式:可用于测试和单机使用,生产环境切忌使用单机模式(满足不了高可用) 2.集群模式:可用于生产环境,确保高可用 3.多集群模式:可用于多数据中心场景 ...

  5. kafka集群监控之kafka-manager部署(kafka-manager的进程为:ProdServerStart)

    kafka集群监控之kafka-manager部署(ProdServerStart) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 雅虎官网GitHub项目:https://git ...

  6. OpenStack Kilo版加CEPH部署手册

    OpenStack Kilo版加CEPH部署手册 作者: yz联系方式: QQ: 949587200日期: 2015-7-13版本: Kilo 转载地址: http://mp.weixin.qq.co ...

  7. Javamelody部署手册

    Javamelody部署手册 1.  Javamelody下载 下载地址:http://code.google.com/p/javamelody/downloads/list(注:需要FQ才能打开下载 ...

  8. Kubernetes 1.13 的完整部署手册

    前言: 非常详细的K8s的完整部署手册,由于Kubernetes版本和操作系统的版本关系非常敏感,部署前请查阅版本关系对应表 地址:https://github.com/kubernetes/kube ...

  9. 容器编排系统K8s之Prometheus监控系统+Grafana部署

    前文我们聊到了k8s的apiservice资源结合自定义apiserver扩展原生apiserver功能的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/ ...

随机推荐

  1. Feed 流系统杂谈

    什么是 Feed 流 Feed 流是社交和资讯类应用中常见的一种形态, 比如微博知乎的关注页.微信的订阅号和朋友圈等.Feed 流源于 RSS 订阅, 用户将自己感兴趣的网站的 RSS 地址登记到 R ...

  2. 洛谷 P7541 DOBRA 题解

    hhh... 我又来写题解了 solution 题意简化 一个字符串,将所有的 _ 替换成大写字母,使结果字符串符合要求: 1.不包含三个连续 元音 或 辅音 字母: 2.字符串中至少有一个 L . ...

  3. 演员 Or 开发者的自我修养

    演员 Or 开发者的自我修养 时至今日,我都还是很怀念小时候与一群玩伴编写剧本.拍摄,那时候的我还有一个远大的"白日梦"--成为一名导演.很可惜,终究是"白日梦" ...

  4. SpringBoot入门03-转发到Thymeleaf

    前言 Spring Boot不提倡使用jsp和用View层,而是使用Thymeleaf代替jsp,因为性能可以得到提升. 使用Thymeleaf要加入依赖 Thymeleaf不能直接被访问,它严格遵守 ...

  5. FastAPI 学习之路(九)请求体有多个参数如何处理?

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  6. 学了ES6,还不会Promise的链式调用?🧐

    前言 本文主要讲解promise的链式调用的方法及其最终方案 应用场景 假如开发有个需求是先要请求到第一个数据,然后根据第一个数据再去请求第二个数据,再根据第二个数据去请求第三个数据...一直到最后得 ...

  7. C/C++ 数据类型 表示最大 最小数值 探讨

    C/C++中存储数字格式有整型和浮点型 字符型数据本质上也是以整型存储 整型 对于整型数据,最大值最小值很好计算 先确定对应数据型在本地所占用的字节数,同一数据型由于系统或者编译器的不同,所占字节不同 ...

  8. httpclient 登录成功后返回的cookie值访问下一页面

    HttpClient4.x可以自带维持会话功能,只要使用同一个HttpClient且未关闭连接,则可以使用相同会话来访问其他要求登录验证的服务(见TestLogin()方法中的"执行get请 ...

  9. 万里阳光号Srcum Metting博客汇总

    Srcum Meeting 一.Alpha阶段 第一次Scrum Meeting 第二次Scrum Meeting 第三次Scrum Meeting 第四次Scrum Meeting 第五次Scrum ...

  10. Beta版本发布计划

    Beta版本新功能 小程序v2.0新功能 新功能列表 页面 新功能描述 图片涂鸦页 增加了马赛克方块形式的涂鸦,同样支持撤销和保存 图片裁切页 增加了图片裁切功能,实现对目标图片的尺寸进行裁切 编辑图 ...