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

    目录 简介 聊聊Doug Cutting ES&Solr&Lucene ES的安装 安装可视化界面ES head插件 了解ELK 安装Kibana ES核心概念 文档 类型 索引 倒排 ...

  2. 从零入门 Serverless | SAE 的极致应用部署效率

    作者 | 文俊 阿里巴巴云原生团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...

  3. The type name or alias SqlServer could not be resolved.Please check your configuration

    The type name or alias SqlServer could not be resolved.Please check your configuration file.... 检查一下 ...

  4. 枚举类型(enum)

    关于枚举 枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性.安全 ...

  5. 12. 亿级流量电商系统JVM模型参数二次优化

    亿级流量电商系统JVM模型参数预估方案,在原来的基础上采用ParNew+CMS垃圾收集器 一.亿级流量分析及jvm参数设置 1. 需求分析 大促在即,拥有亿级流量的电商平台开发了一个订单系统,我们应该 ...

  6. 【UE4】类的继承层级关系

  7. JDBC:(java database Connection) java数据库连接。

    JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. JDBC连接步骤: 1.先导入jar包,把jar放入到工程下并 ...

  8. JBOSS未授权访问漏洞利用

    1. 环境搭建 https://www.cnblogs.com/chengNo1/p/14297387.html 搭建好vulhub平台后 进入对应漏洞目录 cd vulhub/jboss/CVE-2 ...

  9. MarkDown之Typora使用

    Typora:所见即所得 常用快捷键 加粗:ctrl + B 标题:ctrl + 16,对于与16级标题 插入公式:ctrl + Shift + m 插入代码:ctrl + Shift + K 插入图 ...

  10. 【二食堂】Beta - Scrum Meeting 2

    Scrum Meeting 2 例会时间:5.14 18:30~18:50 进度情况 组员 当前进度 今日任务 李健 1. 还在进行摸索,目前做出了一个demo可以进行简单的划词 issue 1. 继 ...