加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

打造立体化监控体系与APM最佳实践系列 –Zipkin部署与使用

发布时间:2021-01-17 12:33:59 所属栏目:安全 来源:网络整理
导读:副标题#e# 《打造立体化监控体系与APM最佳实践系列 Zipkin部署与使用》要点: 本文介绍了打造立体化监控体系与APM最佳实践系列 Zipkin部署与使用,希望对您有用。如果有疑问,可以联系我们。 一、背景 年来在云计算、大数据等快速发展的时代下,产生了很多新
副标题[/!--empirenews.page--]

《打造立体化监控体系与APM最佳实践系列 –Zipkin部署与使用》要点:
本文介绍了打造立体化监控体系与APM最佳实践系列 –Zipkin部署与使用,希望对您有用。如果有疑问,可以联系我们。

一、背景

年来在云计算、大数据等快速发展的时代下,产生了很多新的业务场景,同时很多企业传统业务开始向互联网的转移.随着企业业务的发展,规模扩大,业务越来越多,所采用的组件也越来越多开始走向分布式化,如微服务、消息收发、分布式数据库、分布式对象存储、分布式缓存、跨域调用等,这些组件共同构成了繁杂的分布式网络,一个业务请求可能会涉及到几个、几十个服务的协同处理,如何动态展示服务的链路?如何分析服务链路的瓶颈并对其进行调优?如何快速进行服务链路的故障发现?如何保障产品服务的用户体验?企业需要一个从代码端的视角来监控自己的应用进而确保自身的IT支撑系统得到高效的运行,同时需要一个强大的IT运维管理体系时刻监督IT环境各组件的性能质量,通过多维度实时分析异常并进行诊断以解决产品的问题.因此,应用性能管理(APM)将逐渐成为推广中国IT技术进步与用户体验提升的标配.

当前大的互联网公司都有自己的分布式跟踪系统,比如Google的Dapper,Twitter的zipkin,Naver的pinpoint,淘宝的鹰眼,新浪的Watchman,京东的Hydra等,本文主要介绍zipkin的设计、安装部署,并以一个简单的案例演示zipkin的使用方法.

二、概述

zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于?Google Dapper的论文设计而来,由 Twitter 公司开发贡献.其主要功能是聚集来自各个异构系统的实时监控数据.

三、使用场景

3.1 故障快速定位

通过分析调用链,可以将一次请求的逻辑轨迹完整清晰的展示出来,通过在开发中在业务日志中添加调用链ID,可以通过调用链结合业务日志快速定位错误信息.

3.2 性能分析

在调用链的各个环节分别添加调用时延,可以分析系统的性能瓶颈,进行有针对性的优化.

3.3?服务可用性

通过分析各个环节的平均时延,QPS等信息,可以找到系统的薄弱环节,对一些模块做调整,例如数据冗余、链路可用等.

四、zipkin架构

4.1 架构

如上图所示,zipkin主要包括四个模块

??Collector接收各service传输的数据

??Storage存储收集过来的数据,当前支持Cassandra,Redis,HBase,MySQL,PostgreSQL,?SQLite等,默认存储在内存中.

??API(Query)负责查询Storage中存储的数据,提供简单的JSON API获取数据,主要提供给web UI使用

??Web?提供简单的web界面

各个异构的服务向zipkin报告数据的架构如下图:

上图中的S表示发送跟踪数据的客户端SDK或者Scribe客户端(twitter内部采用scirbe来采集跟踪数据).

4.2 Span

Zipkin 以 Trace 结构表示对一次请求的追踪,又把每个 Trace 拆分为若干个有依赖关系的 Span.在微服务架构中,一次用户请求可能会由后台若干个服务负责处理,那么每个处理请求的服务就可以理解为一个 Span(可以包括 API 服务,缓存服务,数据库服务以及报表服务等).当然这个服务也可能继续请求其他的服务,因此 Span 是一个树形结构,以体现服务之间的调用关系.

Zipkin的Span模型几乎完全仿造了Dapper中Span模型的设计,我们知道,Span用来描述一次RPC调用,所以一个RPC调用只应该关联一个spanId,Zipkin中的Span主要包含三个数据部分:

??基础数据,包括traceId、spanId、parentId、name、timestamp和duration,主要用于跟踪树中节点的关联和界面展示.

u?traceId:全局跟踪ID,用它来标记一次完整服务调用,所以和一次服务调用相关的span中的traceId都是相同的,Zipkin将具有相同traceId的span组装成跟踪树来直观的将调用链路图展现在我们面前.

u?spanid:span的id,理论上来说,span的id只要做到一个traceId下唯一就可以.

u?parentId:父span的id,调用有层级关系,所以span作为调用节点的存储结构,也有层级关系,跟踪链是采用跟踪树的形式来展现的,树的根节点就是调用的顶点,其中parentId为null的Span将成为跟踪树的根节点来展示,当然它也是调用链的起点.

u?name:span的名称,主要用于在界面上展示,一般是接口方法名,name的作用是让人知道它是哪里采集的span.

u?timestamp:span创建时的时间戳,用来记录采集的时刻.

u?duration:持续时间,即span的创建到span完成最终的采集所经历的时间,除去span自己逻辑处理的时间,该时间段可以理解成对于该跟踪埋点来说服务调用的总耗时,timestamp+duration将表示成调用的结束时间.

??Annotation,注解,用来记录请求特定事件相关信息(例如时间),通常包含四个注解信息

cs – Client Start,表示客户端发起请求

sr – Server Receive,表示服务端收到请求

ss – Server Send,表示服务端完成处理,并将结果发送给客户端

cr – Client Received,表示客户端获取到服务端返回信息

??BinaryAnnotation,提供一些额外信息,一般以key-value对出现.

如下图是一个调用链路示例:

在本文后续章节中将会对该实例进行详细介绍.

4.3?客户端SDK

在上一节中我们知道对于一个APM来说,提供多种类型的客户端SDK(instrument)是很重要的,支持的客户端SDK越多,推广起来也越方便,使用人群也会越多.

跟踪信息是使用instrument库进行收集并发送给zipkin,截止目前,zipkin官方支持的客户端SDK如下:

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读