一,基础知识储备
分布式跟踪的目标
一个分布式系统由若干分布式服务构成,每一个请求会经过多个业务系统并留下足迹,但是这些分散的数据对于问题排查,或是流程优化都很有限,要能做到追踪每个请求的完整链路调用,收集链路调用上每个服务的性能数据,计算性能数据和比对性能指标(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. 浅析 Java 内存模型

    文章转载于 飞天小牛肉 的 <「跬步千里」详解 Java 内存模型与原子性.可见性.有序性>.<JMM 最最最核心的概念:Happens-before 原则> 1. 为什么要学 ...

  2. 【死磕NIO】— 阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO,这你真的分的清楚吗?

    通过上篇文章([死磕NIO]- 阻塞.非阻塞.同步.异步,傻傻分不清楚),我想你应该能够区分了什么是阻塞.非阻塞.异步.非异步了,这篇文章我们来彻底弄清楚什么是阻塞IO,非阻塞IO,IO复用,信号驱动 ...

  3. Dapr + .NET Core实战(十二)服务调用之GRPC

    什么是GRPC gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. gRPC 的主要优点是: 高性能轻量级 RPC 框架. 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的 ...

  4. Python简单爬取图书信息及入库

    课堂上老师布置了一个作业,如下图所示: 就是简单写一个借书系统. 大概想了一下流程,登录-->验证登录信息-->登录成功跳转借书界面-->可查看自己的借阅书籍以及数量... 登录可以 ...

  5. Java初步学习——2021.10.10每日总结,第五周周日

    (1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天继续学习菜鸟教程java字符串实例 5.字符串反转--reverse方法 public class Main { pub ...

  6. 解决VS2015安装后stdio.h ucrtd.lib等文件无法识别问题,即include+lib环境变量配置

    转载自:http://blog.csdn.net/carl_qi/article/details/51171280 今天突然想在windows上装个 VS2015 玩玩,结果遇到了如下bug: 安装完 ...

  7. 小白自制Linux开发板 七. USB驱动配置

    本文章基于https://whycan.com/t_3087.htmlhttps://whycan.com/t_6021.html整理 F1c100s芯片支持USB的OTG模式,也就是可以通过更改Us ...

  8. 【UE4 C++】UObject 创建、销毁、内存管理

    UObject 的创建 NewObject 模板类 本例使用 UE 4.26,只剩下 NewObject 用来创建 UObject,提供两个带不同可选参数构造函数的模板类 Outer 表示这个对象的外 ...

  9. 【数据结构与算法Python版学习笔记】图——强连通分支

    互联网 我们关注一下互联网相关的非常巨大图: 由主机通过网线(或无线)连接而形成的图: 以及由网页通过超链接连接而形成的图. 网页形成的图 以网页(URI作为id)为顶点,网页内包含的超链接作为边,可 ...

  10. 搬运3:welpwnctf题目

    记录一道自己做的ctf题目:welpwn --RCTF-2015 1.老生常谈checksec查看: 可以看到只开了nx保护,下面我们进入ida下面看看. 发现是一个想rbp-400,rsp+0h的地 ...