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

背景信息

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

日志、基础架构指标以及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服务,能够为您提供高效的应用程序性能优化与监控能力。整体功能模块架构如下。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版本实例,具体操作请参见创建阿里云Elasticsearch实例。购买时,建议您选择日志增强版,以满足应用性能监控场景下低成本海量数据写入及存储的需求,详细信息请参见购买页面参数(增强版)

使用限制

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

操作流程

  1. 步骤一:创建APM Server实例
  2. 步骤二:配置APM Agent
  3. 步骤三:在Kibana中进行应用性能分析

步骤一:创建APM Server实例

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

步骤二:配置APM Agent

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

    配置完成后,代理程序会结合应用程序收集性能指标和错误,最终将收集到的所有数据发送至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>
    2. Maven Central中下载应用兼容的代理文件。
    3. 设置启动参数,并使用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控制台
    说明 本文以阿里云Elasticsearch 7.10版本为例,其他版本操作可能略有差别,请以实际界面为准。
  2. 根据页面提示进入Kibana主页,单击右上角的Dev tools
    进入Dev Tools页面
  3. Console页签,运行以下脚本,开启自动创建APM onboarding索引。
    说明
    • APM Server实例创建成功后会自动启动实例服务,启动后Elasticsearch会自动创建APM相关索引,您可在Kibana控制台中查看。除此之外,由于阿里云Elasticsearch对自动创建索引的命名规范有要求,APM onboarding索引的命名不符合当前规范,因此您还需要手动开启自动创建APM onboarding索引。
    • 以下脚本中的7.10.2为您创建的APM Server实例的版本号。
    PUT _cluster/settings
    {
      "persistent": {
        "action.auto_create_index":"+.*,+apm-7.10.2-onboarding-*,-*"
      }
    }
  4. 查看APM中包含的所有服务。
    查看APM服务
    1. 在页面左上角单击导航栏图标图标,展开左侧导航栏。
    2. 在左侧导航栏,单击Observability下的APM
    3. Services页签下查看APM的所有服务。
  5. 单击对应服务,查看服务的具体信息。
    petclinic-spring服务为例,服务信息如下图(每项服务都具有类似的布局)。查看单服务的具体信息
    • 左上角显示了响应时间的平均值、p95和p99值,以显示发生异常的具体时间。同时您可以在图表上隐藏不关注的数值曲线,以便更好地了解异常值对整个服务影响。将鼠标移到任何一个图表上时,可以得到一个弹出窗口显示当时的具体摘要。从图中可以看出,响应时长的突增没有导致任何服务器发生500响应错误。
    • 通过查看下方请求明细,您可以看到应用程序中每个请求都来自不同的节点,您可以通过使用各种代理API来扩充默认节点。支持按列标题、响应时长和影响列排序,影响列考虑了对应请求的延迟和热度数据。以影响最高的getOwners请求为例 ,它的平均延迟并不高,为96毫秒。单击该请求名称,可以看到对应请求的详细信息,图中反应最慢的请求也不到一秒钟。请求明细
    • 向下滚动,可以看到该请求处理的操作瀑布视图。其中有很多SELECT语句正在进行,使用APM能够看到正在执行的实际查询。
      图 1. 请求处理的操作瀑布视图
      ss
      图 2. 正在执行的实际查询
      AMP请求处理的瀑布视图2
    • 由于该应用程序中的多层微服务均安装了APM Agent,您可以单击View full trace,查看该请求的详细信息并显示全链路中参与处理的所有组件,从而可以实现一个从浏览器层开始的请求的分布式追踪。
      图 3. 请求的详细信息
      查看请求中涉及的所有内容
      图 4. 全链路中的所有组件
      全链路中参与处理的所有组件
    • 真实用户监测:为了从分布式跟踪中获得最大价值,您需要尽可能多地监测组件和服务,包括使用真实用户监测RUM(Real User Monitoring)。快速的服务响应时间并不意味着请求在浏览器中很快就能完成, APM能够帮助业务衡量最终用户在浏览器中的终端体验。下图的分布式跟踪显示了四种不同的服务,包含了网络浏览器等多项。真是用户监测--分布式跟踪

参考文档

利用Elasticsearch和Elastic APM监测应用