【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)

通过阿里云托管的Elasticsearch 应用性能监控(APM)服务,您可以结合阿里云Elasticsearch实现系统可观测性能力搭建。本文介绍了阿里云Elasticseasrch APM服务概念架构及功能,以及如何快速接入并使用。


申请APM首月100元试用:https://survey.aliyun.com/apps/zhiliao/j_9SKp6x_

了解阿里云Elasticsearch 应用性能监控(APM)详情:https://help.aliyun.com/document_detail/326325.html


一 背景信息

可观测性的本质是度量您的基础设施、平台和应用程序,以了解它是如何运行的。与传统监控运维相比,目前主流的监控更加注重发现与预警问题,而可观测性的终极目标是为一个复杂分布式系统所发生的一切给出合理解释。监控更注重软件的交付过程中以及交付后的服务状态,而可观测性则要为全研发与运维的生命周期负责。


日志、基础架构指标以及APM应用程序性能监测构成了可观测性的三要素。其中,APM弥补了指标和日志之间的差距。虽然日志和指标往往更具交叉性,涉及基础架构和组件,但APM更侧重于应用程序,允许IT和开发人员监测其堆栈的应用层,包括最终的用户体验。


将APM添加到系统监测中,您可以:

  • 了解服务的时间花在什么上,以及它崩溃的原因。
  • 了解服务如何相互交互,以及它的可视化瓶颈。
  • 主动发现并修复性能瓶颈和错误。
  • 提高开发团队的生产力。
  • 在浏览器中跟踪终端用户体验。


APM通常被应用于以下场景:

  • 用户体验监控:通过监控用户的行为提升用户体验。例如监控用户和Web界面或客户端的交互,并记录交互事件的时间。
  • 运行时应用程序架构:理解服务间的依赖关系、架构中应用程序交互的网络拓扑。
  • 业务事务(Business transaction):产生有意义的SLA报告,并从业务角度提供有关应用程序性能的趋势信息。
  • 组件监控(Deep dive component monitoring):通常需要安装Agent并且主要针对中间层,包括Web服务器、应用和消息服务器等。健壮的监控应该能显示代码执行的清晰路径,因为这一维度和上述第二个维度紧密相关,APM产品通常会将这两个维度合并作为一个功能。
  • 分析或报告(Analytics/Reporting):将从应用程序中收集的一系列指标数据,标准化地展现成应用性能数据的通用视图。


阿里云托管的Elastic APM和目前比较流行的开源APM系统Apache SkyWalking的能力对比情况请参见能力对比


二 架构及数据模型

阿里云Elasticsearch应用性能监控分析服务,支持基于开源Elastic APM构建云上一键托管的APM Server服务,并灵活对接阿里云Elasticsearch服务,能够为您提供高效的应用程序性能优化与监控能力。整体功能模块架构如下。

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)


Elastic APM由四个模块组成,详细信息请参见应用性能监控分析服务介绍。其中APM Agent采集器从其监测的应用程序中收集不同类型的信息和数据,这些被称为事件。采集器收集数据后将这些事件流式传输到APM Server,由Server验证并处理事件。事件支持的类型包括Spans、Transaction、Errors和Metrics:


  • Spans:范围事件类型。包含有关已执行的特定代码路径的信息。它们从活动的开始到结束进行度量,可以与其他Span具有父或子关系。
  • Transaction:事务事件类型。是一种特殊的Span(没有父Span,只能从中派生出子Span,可以理解为“树”这种数据结构的根节点),具有与之关联的额外元数据。你可以将Transactions视为您在服务中衡量的*别的工作,例如服务中的请求、提供的HTTP请求或运行的特定的后台作业等。
  • Errors:错误事件类型。包含相关的原始异常信息,或发生异常时创建的日志信息。
  • Metrics:指标事件类型。APM Agent自动获取基本的主机级别指标,包含系统和进程级别的CPU和内存指标。除此之外还可获取特定于代理的指标,例如Java Agent中的JVM指标和Go代理中的Go运行时指标。


三 前提条件

创建阿里云Elasticsearch 7.10版本实例,建议选择日志增强版,以满足应用性能监控场景下低成本海量数据写入及存储的需求。


四 使用限制

阿里云APM Server仅支持与阿里云Elasticsearch 7.10版本集成。


五 操作流程

步骤一:创建APM Server实例

  1. 登录阿里云Elasticsearch控制台
  2. 进入APM应用性能监控控制台。
    1. 在顶部菜单栏处,选择地域。
    2. 在左侧导航栏,单击APM应用性能监控
  1. APM Server管理页面,参见创建APM Server实例,创建APM Server实例。其中专有网络需要与待监控的客户端服务(APM Agent)所在的专有网络保持一致。实例创建成功后,您可以单击对应实例右侧的实例管理,查看实例的访问地址等基本信息。

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)


步骤二:配置APM Agent

  1. APM Server管理页面,单击APM数据采集
  2. Agent数据采集对话框中,单击与您客户端相同语言的页签,根据提示配置数据采集。

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)

配置完成后,代理程序会结合应用程序收集性能指标和错误,最终将收集到的所有数据发送至Server端。以Java为例,配置方法如下:

    1. 参见High Level REST Client(7.x),配置应用程序访问阿里云Elasticsearch,在pom依赖中添加APM Agent依赖。
<dependency>
  <groupId>co.elastic.apm</groupId>
  <artifactId>elastic-apm-agent</artifactId>
  <version>1.27.0</version>
</dependency>


b. 在Maven Central中下载应用兼容的代理文件。

c. 设置启动参数,并使用javaagent参数启动应用。

java -javaagent:/root/elastic-apm-agent-1.27.0.jar \
     -Delastic.apm.service_name=my-application \
     -Delastic.apm.server_urls=http://apm-cn-tl32fxqq****.apm.elasticsearch.aliyuncs.com::8200 \
     -Delastic.apm.secret_token= \
     -Delastic.apm.application_packages=org.example \
     -jar elastic.jar
      • apm-agent-java-0.1.2.jar:需要替换为您上一步下载的代理文件的名称,包含文件类型后缀(.jar)。
      • Delastic.apm.server_urls:将该参数值替换为您APM Server实例的访问地址。实例创建成功后,单击对应实例右侧的实例管理,即可获取实例的访问地址。


步骤三:在Kibana中进行应用性能分析

  1. 登录步骤一:创建APM Server实例时,所关联的Elasticsearch实例的Kibana控制台。登录Kibana控制台的具体操作,请参见登录Kibana控制台
  2. 根据页面提示进入Kibana主页,单击右上角的Dev tools

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)

  1. Console页签,运行以下脚本,开启自动创建APM onboarding索引。
PUT _cluster/settings
{
  "persistent": {
    "action.auto_create_index":"+.*,+apm-7.10.2-onboarding-*,-*"
  }
}
  1. 查看APM中包含的所有服务。

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)

    1. 在页面左上角单击【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)图标,展开左侧导航栏。
    2. 在左侧导航栏,单击Observability下的APM
    3. Services页签下查看APM的所有服务。
  1. 单击对应服务,查看服务的具体信息。以petclinic-spring服务为例,服务信息如下图(每项服务都具有类似的布局)。

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)

    • 左上角显示了响应时间的平均值、p95和p99值,以显示发生异常的具体时间。同时您可以在图表上隐藏不关注的数值曲线,以便更好地了解异常值对整个服务影响。将鼠标移到任何一个图表上时,可以得到一个弹出窗口显示当时的具体摘要。从图中可以看出,响应时长的突增没有导致任何服务器发生500响应错误。
    • 通过查看下方请求明细,您可以看到应用程序中每个请求都来自不同的节点,您可以通过使用各种代理API来扩充默认节点。支持按列标题、响应时长和影响列排序,影响列考虑了对应请求的延迟和热度数据。以影响最高的getOwners请求为例 ,它的平均延迟并不高,为96毫秒。单击该请求名称,可以看到对应请求的详细信息,图中反应最慢的请求也不到一秒钟。

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)

    • 向下滚动,可以看到该请求处理的操作瀑布视图。其中有很多SELECT语句正在进行,使用APM能够看到正在执行的实际查询。

图 1. 请求处理的操作瀑布视图

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)

图 2. 正在执行的实际查询

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)

    • 由于该应用程序中的多层微服务均安装了APM Agent,您可以单击View full trace,查看该请求的详细信息并显示全链路中参与处理的所有组件,从而可以实现一个从浏览器层开始的请求的分布式追踪。

图 3. 请求的详细信息

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)

图 4. 全链路中的所有组件

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)

    • 真实用户监测:为了从分布式跟踪中获得最大价值,您需要尽可能多地监测组件和服务,包括使用真实用户监测RUM(Real User Monitoring)。快速的服务响应时间并不意味着请求在浏览器中很快就能完成, APM能够帮助业务衡量最终用户在浏览器中的终端体验。下图的分布式跟踪显示了四种不同的服务,包含了网络浏览器等多项。

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)



扫码加入技术交流群

参与技术讨论学习

【最佳实践】阿里云Elasticsearch应用性能监控分析(APM)

上一篇:推荐语—Elastic Stack 实战手册


下一篇:Serverless 工作流适用场景及最佳实践