财讯网|中国财讯网
中国领先的财经新闻门户

医药 科技 地产 汽车 旅游 时尚 文化 大数据

首页 > 财经要闻 > 正文

天旦,互联数据VS探针埋点,APM数据采集孰更优?

导读:随着移动互联网、云计算、大数据、物联网等技术的迅猛发展,各种业务应用不断出现,IT应用复杂度呈现爆炸式增长,数据获取的高实时化、业务需求的快速迭代、以及产品和服务的即刻落地,这些高要求使运维团队

随着移动互联网、云计算、大数据、物联网等技术的迅猛发展,各种业务应用不断出现,IT应用复杂度呈现爆炸式增长,数据获取的高实时化、业务需求的快速迭代、以及产品和服务的即刻落地,这些高要求使运维团队所承受的责任更加沉重。运维工程师既要保证服务和产品的可靠性、稳定性,优化服务、快速定位故障、提升用户体验等,同时还要为业务决策提供数据支撑,引领业务创新。应对上述挑战关键在于业务监控时能否获取全量、实时、精确的数据。获取数据有多种方式,本文对目前主流的两种获取数据方式——探针埋点与互联数据,进行深入对比分析。

Agent获取数据实现

Agent也就是常说的探针埋点,通过对生产服务器上的应用部署或者嵌入探针进行应用性能数据采集。这种方式能够提供非常完整与细粒度的监控数据采集,提供代码级的问题定位。但此方式对应用有侵入性,如果埋点代码异常,会对应用本身的性能和稳定性产生影响。

探针埋点的方式主要分为两类:

以Zipkin为代表的代码侵入式埋点;

以PinPoint为代表的字节码增强式埋点。

代码入侵式埋点

简介

代码侵入式埋点是指提供应用开发的SDK,或者提供集成埋点代码的框架供应用开发者调用。像Google这类具备框架研发能力的企业将植入点选在开发框架或通信框架中,确保基于统一框架开发或通信的应用天然具备埋点能力,开发团队除框架外无需关注埋点实现和调用方式。这种埋点方式优势在于使用框架后无需额外关注埋点能力,变相降低了埋点的成本,Twitter的Zipkin、淘宝的鹰眼、大众点评的CAT等都属于这类埋点方式。

代码侵入式埋点具有较好的扩展性,方便用户自定义采集的数据类型与层次。但无论提供框架埋点还是提供装备库、SDK的方式都需要侵入代码,在应用开发及框架升级等场景下,应用需要重新修改代码。同时,对于应用开发人员来说,精准地识别埋点位置也有难度,且基于代码侵入的埋点跟踪级别较低,无法获取足够详细的运行动态信息。

典型产品分析——Zipkin

Zipkin 是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper 的论文设计,由 Twitter公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据,用来追踪微服务架构下的系统延时问题。应用系统需要进行装备(instrument)以向 Zipkin 报告数据。Zipkin 的用户界面可以呈现一幅关联图表,以显示有多少被追踪的请求通过了每一层应用。Zipkin 以 Trace 结构表示对一次请求的追踪,又把每个 Trace 拆分为若干个有依赖关系的 Span。在微服务架构中,一次用户请求可能会由若干个后台服务负责处理,那么每个处理请求的服务就可以理解为一个 Span(可以包括 API 服务、缓存服务、数据库服务以及报表服务等)。当然这个服务也可能继续请求其他的服务,因此 Span 是一个树形结构,以体现服务之间的调用关系。Zipkin 的用户界面除了可以查看 Span 的依赖关系之外,还以瀑布图的形式显示了每个 Span 的耗时情况,可以一目了然地看到各个服务的性能状况。打开每个 Span,还有更详细的数据以键值对的形式呈现,而且这些数据可以在装备应用的时候自行添加。

\

- Zipkin架构图 -

根据上述架构图可以看到,Zipkin内部主要分为:Transport、Collector、Storage、API、UI五个部分。

Collector:负责接收各系统报告过来的追踪数据。

Storage:默认使用Cassandra存储数据,也可以替换为其他存储,例如mysql5.6-5.7,ElasticSearch 2.x和5.x,以及一些第三方的存储。

API:查询服务用来向其他服务提供数据查询的接口,以json api格式提供。

UI:Web服务是官方默认提供的一个图形用户界面。

Transport:负责运输从Service收集来的Spans,并把这些Spans转化为Zipkin的通用Span,并将其传递到存储层。这种方法是模块化的,允许任何生产者接收任何类型的数据,Zipkin配有HTTP、Kafka、Scribe三种类型的Transport。Instrumentations负责和Transport进行交互。

\

- Zipkin UI界面 -

Zipkin UI以依赖图表展示有多少跟踪请求经过了每个应用程序;如需解决延迟问题,可以过滤或者排序所有的跟踪请求,并且可以查看每个跟踪请求占总跟踪时间的百分比,一目了然地看到各个服务的性能状况。Zipkin的缺点是采用侵入式的埋点方式,需要提供多种类型的客户端SDK,会对应用性能和稳定性产生影响。要减少或消除这种影响就需要在探针监测技术的研究和优化上投入较多研发成本,后续使用维护上也需要较多的人力成本。

字节码增强式埋点

简介

字节码增强式埋点方式无需修改代码,不同的编程语言通过不同的技术在语言运行环境或基础库上植入。利用字节码增强技术,Java应用在启动JVM时通过不同的埋点插件覆盖不同的通信协议、中间件和开发框架,对Java基础调用代码进行函数级埋点。这种埋点方式的优势在于能够采集到堆栈级的调用信息及其他更多运行态信息,帮助使用者无需日志等辅助手段即可快速完成问题定位。代表性的开源产品PinPoint及大部分商业化产品都采用这类方式。

使用字节码增强技术进行APM数据采集时,通过在应用启动时配置Java Agent探针的方式主动干预应用代码行为,应用开发者无需进行代码修改,由APM产品来决定在哪些API进行数据埋点。理论上来说字节码增强技术能够在任意位置进行埋点。

典型产品分析——PinPoint

Pinpoint是一个分布式事务跟踪系统的平台,其思路基于Google Dapper,用于基于Java的大规模分布式系统,通过跟踪分布式应用之间的调用,帮助分析系统总体结构和内部模块之间如何相互联系,并提供清晰的可视化视图来定位问题区域和潜在瓶颈。Pinpoint 由三个主要组件组成:Collector、Web和Agent,采用HBase进行存储。PinPoint可以实现如下功能:

服务器地图:通过分布式系统的模块和他们之间的相互联系可视化来理解系统拓扑。点击某个节点会展示该模块的详情,如该节点当前的状态和请求数量等。

实时活动线程图表:可以实时监控应用内部的活动线程。

请求/响应分布图:在图表上拖拽查看被选中请求的更多详情。通过可视化的长期请求数量和响应模式来定位潜在问题。

\

调用栈:在分布式环境中为每个调用生成代码级别的可视图,在单个视图中定位瓶颈和故障点。

\

巡检:查看应用的其他信息,如主机CPU使用率、内存/垃圾回收、JVM参数等。

\

相比Zipkin,PinPoint可以收集更丰富的数据,但PinPoint是和被监控应用一起运行的额外应用,这增加了bug发生的可能性。虽然使用字节码增强使得PinPoint看上去不需要修改应用代码,但如果Pinpoint发生问题就会给应用造成风险。另外,PinPoint作为额外应用跑在系统上也会消耗部分系统资源,官网上给出的损耗在百分之几,但在实际的压力测试环境中发现,使用Pinpoint的性能损失可达30%以上。另外,作为开源项目的PinPoint还有待完善和改进,这也需要投入研发及后续使用维护的人力成本。

商业产品分析——Dynatrace

国内外知名的字节码增强埋点商业产品不少,本文以国外非常具有代表性的产品Dynatrace进行介绍。

Dynatrace通过轻量级的、在生产环境中可部署的架构组件,对进入应用的所有交易进行端到端的监控和分析,从单个用户点击浏览器开始,一直追踪到该点击动作在后台的代码执行流,贯穿整个应用,最终可以跟踪到此用户点击导致的数据库访问动作。

\

- Dynatrace架构示意图 -

如上图所示,Dynatrace由七个主要组件构成:

1. dynaTrace Agents:一个库文件( .so 或 .dll),安装在运行JVMs/CLRs/原生(Native)进程的应用服务器上;

2. dynaTrace Browser Agents:以浏览器插件的方式安装在浏览器上 (Internet Explorer 6/7/8);

3. dynaTrace Server:独立的 JAVA 进程,dynaTrace环境的核心组件,提供集中的配置和管理。它接收来自监控插件和代理的信息并进行关联处理;

4. dynaTrace Analysis Server:独立的 JAVA 进程,负责离线分析高资源消耗的分析任务(如内存转储的分析)。在POC环境中,常将它和dynaTrace Server安装在同一台机器上;

5. dynaTrace Collector:独立的 JAVA 进程,负责管理dynaTrace Agents的插桩和接收到事件后的处理;

6. dynaTrace Repository :数据库,一般使用内嵌的数据库(dynaTrace Server 安装时自带),也支持使用Oracle/SQL Server/DB2/PostgeSQL;

7. dynaTrace Client:表现层(基于 Eclipse),所有的配置任务或数据操作都要通过它完成。既可以安装在用户的本地机器上,也可以通过Java Web Start从dynaTrace Server启动。

Dynatrace的核心功能

1. 交易分析。可以跨越WEB/Web Server/Java/.Net/C/CICS边界跟踪交易,同时记录和捕捉上下文环境,例如用户会话信息、方法参数、 返回值、日志消息、异常详细信息等。

\

2. WEB请求性能分析。分析哪些 Web 请求入口存在性能瓶颈。

3. 数据库使用分析。分析执行时间长的 SQL 语句。

4. 交易热点分析。分析交易时间主要花费在哪些系统部件或 API 层上。

5. 应用CPU使用情况分析。找出应用耗用CPU时间多的部件。

6. 线程问题分析。通过线程转储快速发现和定位多线程故障,线程死锁,以及由资源竞争导致的线程挂起。

7. 内存问题诊断。可视化显示应用的内存使用情况,确定应用每一层内存的内存需求以及分析垃圾回收对交易响应时间的影响。

Dynatrace的性能消耗

Dynatrace使用自动传感器(auto sensor)来定位任何运行缓慢的节点,它的工作原理是对CPU运行时长进行采样。采样频率设置越低,自动传感器的CPU采样间隔越长,Dynatrace的系统开销也就越小,最低为1%,非生产版本最高可达50%。

\

Dynatrace Agent部署前提条件和系统要求

1. 一般情况下,需要用户提供部署dynaTrace Agents 所需的访问操作系统、应用服务器启动脚本和应用服务管理控制台的权限。

2. JAVA应用:需要在JVM启动选项中添加"-Xrun"或"-agentpath"选项。

3. NET应用:dynaTrace安装工具会设置环境变量COR_PROFILER将dynaTrace Agent 加载到.net环境中,运行应用的用户需要具有访问注册表和安装dynaTrace Agent .dll 的目录权限。要获取Windows性能计数器,用户要具有相应的权限(e.g. 性能监控组的成员)。

4. C/C++应用:使用分析原生应用的agent,需要修改源代码并在编译时链接 dynaTrace动态库,这意味着要有可用的构建环境并需要重新构建应用。

5. Javascript/基于浏览器的应用:Internet Explorer 6/7/8 需要安装dynaTrace browser agent(IE插件)。

6. 必须去除JVM/CLR上任何已有的远程调试器、分析和监控工具代理。

从上述介绍可以看出,与PinPoint类似,Dynatrace通过字节码增强埋点或类似技术在应用加载的过程中对用户代码进行动态修改。此类技术的优点在于可以对应用性能做比较完整的、分层次的监控,提供代码级的问题定位(前提条件是满足Agent部署条件),但是同样可能对应用性能和稳定性产生影响。因为要分析代码级的问题,所以对使用者也有一定的要求。除了应用性能数据外,如果用户还想获取业务相关数据、为业务决策提供数据依据,由经验决策向数据驱动决策转型(如利用全量交易过程数据实现真正的实时风控以及精准营销),采用埋点方式实现起来比较困难, 需要消耗更多的人力和资源成本。

互联数据实现

简介

互联数据(Wire Data)是指连接客户端和服务器之间的网络光纤所承载的全量、双向的通讯数据。它是被处理过的、高价值的业务可用数据源,是实时、直观了解系统业务运行状况最全面客观的参考数据资源。

通过实时地将网络中传输的海量数据重组而成的结构化数据,可以帮助IT运维人员创建行为基线、检测异常行为,进行实时地性能故障定位和排除等;同时,让运维团队贴近业务,可以用数据来监测业务的交易量、成功率、失败率等,为业务和运营团队提供数据支撑,让IT基础设施更好地提供澎湃动力,为科技引领业务创新创造可能。

典型产品分析——天旦互联数据引擎

\

- 天旦互联数据引擎产品架构 -

\

- 天旦互联数据引擎技术原理 -

天旦互联数据引擎性能特点:

零风险。纯旁路采集真实网络数据,对现有业务应用的厂商、系统等无要求,无需部署Agent, 对生产系统无影响。所基于的端口镜像技术已经非常成熟,对网络设备性能无影响,详情可参见CISCO官方参考文献:https://www.cisco.com/c/en/us/support/docs/switches/catalyst-6500-series-switches/10570-41.html?dtid=osscdc000283#anc55

高实时性。毫秒级别的低延迟输出,提升事中反欺诈、实时风控、客户体验等。

数据完整性高。跨业务条线旁路采集,提供无风险的全量交易过程数据,根据应用不同可以获取到设备ID、浏览器ID、IP等信息。

使用和维护成本低。旁路部署、无需开发、系统架构简单易用,对运维人员的要求低。

快速落地。系统成熟、部署快,有大量成功案例,现有解码库可支持市面上绝大部分协议(包括金融行业的特有协议,如二代支付、网银、卡交易等)。如需扩展新的数据源,可以通过镜像数据源并简单配置完成。

业务梳理:帮助客户梳理应用架构、提供业务性能指标基线,更精确地进行容量规划、云的规划和设计。

实用性高。解决传统运维无法满足的高可用、应用快速上线等需要的可靠捷径。

运维增值。不仅可以获取性能数据,帮助运维团队快速定位问题;还可将全量实时的过程业务数据输出至相关数据应用系统,围绕运维建立数据生态,提升运维部门价值。

总结

探针埋点可以获取应用性能数据及系统资源使用数据,但总体使用和维护成本较高,需要一定的研发背景和人力投入。互联数据则不仅可以获取应用交易性能、网络性能数据,帮助运维团队快速定位性能问题,还可以零风险、实时、精准地获取全量业务过程数据(精确到逐笔交易的明细数据),为商业决策和业务创新提供数据依据,赋予运维团队相应的数据能力,帮助企业完成数字化转型;而且使用和维护成本较低,无需研发背景,运维人员可以轻松使用维护。基于Wire Data的天旦互联数据引擎产品是适应新时代、面向数字未来的APM数据获取方式。

资讯标签:
上一篇:没有了