作者介绍
吴容,腾讯云大数据 Elasticsearch 高级开发工程师
一、什么是Elastic APM?
Elastic APM是构建在Elastic产品生态上的一个应用性能监控系统。它通过采集http请求响应、db交互、第三方服务调用等详细性能数据来实时监控我们的软件应用系统。如图1所示,当图示系统中分布式缓存出现某种故障导致应用响应超时,Elastic APM能够实时监控并快速定位到是哪个服务导致的超时。因此有了APM,我们便可以高效的对服务性能问题进行定位、分析和修复。
图1. 应用系统请求链路示意图
从以上的介绍中可以看出,Elastic APM包括了链路追踪、性能指标分析应用和服务依赖分析等强大功能,除此之外,Elastic APM还会自动采集Errors和Exceptions等异常信息,其中Errors信息会跟进堆栈Trace进行自动分组,可以帮助我们很方便地进行识别和监控。
图2. Elastic APM在Elastic∂生态中的位置
二、Elastic APM组件架构
Elastic APM由四个组件构成。分别是APM Agents,Elastic APM integration,Elasticsearch集群和Kibana。
APM Agents:用于采集应用数据的探针,是Elastic官方提供的多语言开发的超轻量的开源库。如Java agent、Go agent、Node.js agent等。我们通常选择和要监控的服务使用同一种语言开发的agent即可。例如Spring项目,选择Java agent。该agent的安装方式和其他第三方库一样。当我们在项目中引入了对应的agent库之后,它就会开始检查对应的代码并在运行时不断采集性能数据和异常错误信息,并在本地缓冲很短时间后发送到APM Server。
APM intergration:是一个数据接收和处理的服务,主要用于接收从APM agents上发来的性能数据,并在本地做相应的校验和处理,然后将其转换成ES文档。APM intergration运行在Elastic Agent之上。
目前,官方提供了两种部署Elastic APM的架构,分别是APM intergration集中式部署和APM intergration分布式部署两种。以下图3、图4来自官方文档 。
图3. APM intergration 集中式部署架构
图4. APM intergration 分布式部署架构
其中,APM intergration集中化部署架构。顾名思义,就是所有的Agents将采集的性能数据统一发送到一台或多台APM intergration上;而分布式部署架构,则是每个Agent节点上都会部署一台对应的APM intergration,通过集中托管的Elastic Agent进行注册和元数据同步。
Elasticsearch:主要用于存储APM数据,数据以索引的形式存储在集群中。
Kibana:APM的可视化组件。Kibana中的APM模块支持客户可视化查看及分析应用性能数据。同时还支持各种维度的监控告警配置。
三、Elastic APM数据模型
APM agents从应用系统中采集不同类型的信息,这些信息被统称为事件events,而这些events可以是spans、transactions、errors或者metrics。另外我们还可以在events中包含一些自定义的元数据信息,来增强数据的丰富度和可识别度,如标签、自定义上下文等。Transactions:事务,它描述了由APM agent检测服务所采集的一个事件。可以看作是一种特殊类型的Span,组成一个服务的请求和响应,例如下单接口请求,每个请求调用都是由单独的span构成。详细描述了Elastic APM agent所采集的事件。例如:它可以是一个http请求、一个批处理任务、一个定时后台任务或者其他我们自定义的事务类型。
Service:是在APM agent中配置的监控的应用系统名称。是一种逻辑上标识一组事务的方法。
Span:跨度,事务中的单个事件。例如api接口调用,db查询,es检索,文件的上传与下载等,即那些需要一些时间才能完成的任何事件。以下图为例,我们可以非常直观的看到请求最后对ES集群的wr-index执行了一次写入操作,并且耗时195ms。
图5. 一条请求时间线样例图
另外我们还可以点击该Span查看更加详细的信息,如下图所示,展示了请求ES的具体API,所属的Service名称和Transaction,请求耗时及详细的调用栈信息。能够快速帮忙我们定位和分析问题。
图6. Span 详情页
Trace:跟踪,代表一个请求的完整数据链路。每个Trace跟踪单个请求的全部内容。下图是Kibana上展示的Traces列表页,相同的Traces以名称进行聚合,点击进入每条Trace名称后即可查看该Trace下包含的所有的Transactions指标监控和完整调用链等详细信息。
图7. Trances列表页
当一个Trace连接多个服务时,这在微服务架构被称为分布式链路跟踪。如果我们在Kibana的APM模块里看到我们的Trace时间线是彩色的,则表示该Trace是一个分布式跟踪。分布式链路跟踪中的Service是以颜色分隔开并按照调用顺序进行展示的,如下图所示,图片来自官方文档。
图8. 分布式链路跟踪时间线样例图
Metrics:指标,通过APM agents定期采集性能数据来衡量应用系统的健康状态。APM系统中的指标主要有两大类:
系统指标:APM agents会定期自动采集所属主机的性能指标,例如系统和进程级别的CPU、Load和内存指标。以及agents所属的特定指标,如Java agents会采集JVM指标,Go agent采集Go routime指标等。
计算指标:APM agents和APM Server定期计算来自跟踪事件(trace events)指标,以增强APM应用程序中可视化的效果。
因此Metrics和Traces的区别主要在于Metrics主要用来进行数据的统计,比如耗时统计、吞吐量统计。而Trances主要包含了一次请求的完整链路数据,用于监控和分析各子链路的性能瓶颈。Errors:一条错误事件,通常是由原始异常,或者异常发生时创建的error日志信息组成。为了简单起见,错误事件通常由全局唯一的ID表示,error message中则详细记录了具体的异常错误信息,非常方便我们定位分析问题根因。
图9. APM Errors列表页
四、小结
本文从原理的角度,详细介绍了Elastic APM的产品功能、组件架构和数据模型,让我们对Elastic APM及Elastic技术栈又有了新的认识,若想了解更多,可到腾讯云Elasticsearch Service控制台创建集群进行体验吧。下一篇文章我们将演示如何通过通过Elastic APM实时监控我们的SpringBoot服务。
免费体验活动专区
Elasticsearch 新用户可享 2核4G,0元 体验 30 天!顺畅体验云上集群
添加小助手回复 Elasticsearch 加入 Elasticsearch 技术社区