通过Elasticsearch应用性能监控APM(Application Performance Monitoring)服务,结合阿里云Elasticsearch,您可以搭建应用性能监控系统,实现系统的可观测性。本文介绍如何通过自建APM Server将数据采集至阿里云Elasticsearch。

背景信息

可观测性的本质是度量您的基础设施、平台和应用程序,以了解它是如何运行的。与传统监控运维相比,目前主流的监控更加注重发现与预警问题,而可观测性的目标是为一个复杂分布式系统所发生的一切给出合理解释。监控更注重软件的交付过程中以及交付后的服务状态,而可观测性则要为全研发与运维的生命周期负责。
日志、基础架构指标以及APM应用程序性能监测构成了可观测性的三要素。其中,APM弥补了指标和日志之间的差距。虽然日志和指标往往更具交叉性,涉及基础架构和组件,但APM更侧重于应用程序,允许IT和开发人员监测其堆栈的应用层,包括最终的用户体验。将APM添加到系统监测中,您可以:
  • 了解服务的时间花在什么上,以及它崩溃的原因。
  • 了解服务如何相互交互,以及它的可视化瓶颈。
  • 主动发现并修复性能瓶颈和错误。
  • 提高开发团队的生产力。
  • 在浏览器中跟踪终端用户体验。
APM通常被应用于以下场景:
  • 用户体验监控:通过监控用户的行为提升用户体验。例如监控用户和Web界面或客户端的交互,并记录交互事件的时间。
  • 运行时应用程序架构:理解服务间的依赖关系、架构中应用程序交互的网络拓扑。
  • 业务事务(Business transaction):产生有意义的SLA报告,并从业务角度提供有关应用程序性能的趋势信息。
  • 组件监控(Deep dive component monitoring):通常需要安装Agent并且主要针对中间层,包括Web服务器、应用和消息服务器等。健壮的监控应该能显示代码执行的清晰路径,因为这一维度和上述第二个维度紧密相关,APM产品通常会将这两个维度合并作为一个功能。
  • 分析或报告(Analytics/Reporting):将从应用程序中收集的一系列指标数据,标准化地展现成应用性能数据的通用视图。

前提条件

  • 已创建阿里云Elasticsearch 7.10版本实例,具体操作请参见创建阿里云Elasticsearch实例创建实例时,建议您选择日志增强版,以满足应用性能监控场景下低成本海量数据写入及存储的需求,详细信息请参见购买页面参数(增强版)
  • 已创建阿里云ECS实例,实例的操作系统类型需要为Linux。具体操作请参见自定义购买实例
  • 已在阿里云ECS实例中安装Go语言环境。
    说明 本文示例使用Go语言的APM Agent,因此需要安装Go语言环境。

操作流程

  1. 步骤一:搭建APM Server
  2. 步骤二:配置APM Agent
  3. 步骤三:在Kibana中查看并分析APM Server采集的数据

步骤一:搭建APM Server

  1. 连接ECS实例。
    具体操作请参见通过密码或密钥认证登录Linux实例
    说明 本文档以普通用户权限为例。
  2. 安装APM Server。
    1. 下载APM Server安装包。
      wget https://artifacts.elastic.co/downloads/apm-server/apm-server-7.10.2-linux-x86_64.tar.gz
    2. 解压。
      tar -zxf apm-server-7.10.2-linux-x86_64.tar.gz
  3. 修改APM Server配置。
    1. 进入APM Server安装目录。
      cd apm-server-7.10.2-linux-x86_64/
    2. 修改yml配置文件。
      vim apm-server.yml
      参考以下示例修改yml文件。
      apm-server:
        host: "0.0.0.0:8200"
      output.elasticsearch:
        hosts: ["es-cn-*****.elasticsearch.aliyuncs.com:9200"]
        username: "elastic"
        password: "[pwd]"
      参数说明
      apm-serverAPM Server的访问地址。host需要配置为APM Server的监听地址:端口号,本文示例为:0.0.0.0:8200
      output.elasticsearch输出端Elasticsearch配置。配置说明如下:
      • hosts:Elasticsearch实例的公网或私网访问地址,获取方式请参见查看实例的基本信息
        重要 如果Elasticsearch实例与安装APM Server的ECS在同一VPC下,可使用私网访问地址;否则需要使用公网访问地址,并且需要配置IP地址访问白名单,详细信息请参见配置实例公网或私网访问白名单
      • username:Elasticsearch实例的访问用户名,默认为elastic。如果您想使用自建用户,需要为自建用户分配相应的角色和权限,详细信息请参见通过Elasticsearch X-Pack角色管理实现用户权限管控
      • password:对应用户的密码。elastic的密码在创建实例时设定,如果忘记可重置,重置密码的注意事项和操作步骤请参见重置实例访问密码
  4. 启动APM Server。
    sudo nohup ./apm-server -e > apmserver.log 2>&1 &

步骤二:配置APM Agent

本文以Go语言为例,其他客户端可以在APM Server的Agent数据采集对话框中查询配置,详细信息请参见步骤二:配置APM Agent

  1. 安装APM Agent。
    1. 初始化。
      sudo go mod init demo
    2. 安装Go的APM Agent软件包。
      sudo go get go.elastic.co/apm
      sudo go get go.elastic.co/apm/module/apmhttp
      说明 如果安装时提示golang.org xxxx: i/o timeout的报错,表示无法访问golang.org,您需要自行更换下载源。
  2. 配置APM Agent。
    1. 打开环境变量配置文件。
      vim ~/.bash_profile
    2. 在环境变量配置文件中,添加以下配置初始化APM Agent,并保存。
      # 设置服务名称。允许使用的字符:a-z、A-Z、0-9、-、_ 和空格。
      # 如果未指定ELASTIC_APM_SERVICE_NAME,将会使用可执行文件名称。
      export ELASTIC_APM_SERVICE_NAME=zijian
      
      # 设置定制APM Server URL(默认值:http://localhost:8200)。
      export ELASTIC_APM_SERVER_URL=
      
      # APM Server需要令牌时使用。
      export ELASTIC_APM_SECRET_TOKEN=
    3. 执行以下命令,使配置文件生效。
      source ~/.bash_profile
  3. 通过APM Agent检测应用程序。
    1. 创建示例应用程序文件apm.go。
      vim apm.go
    2. 在apm.go文件中添加以下内容,并保存。
      您可以使用以下提供的检测模块之一或直接使用跟踪器API来检测Go应用程序。
      package main
      
        import (
          "net/http"
      
          "go.elastic.co/apm/module/apmhttp"
        )
      
        func main() {
          mux := http.NewServeMux()
          http.ListenAndServe(":8080", apmhttp.Wrap(mux))
        }
    3. 运行apm.go。
      sudo go run apm.go

步骤三:在Kibana中查看并分析APM Server采集的数据

  1. 登录目标Elasticsearch实例的Kibana控制台。
    登录Kibana控制台的具体操作,请参见登录Kibana控制台
    说明 本文以阿里云Elasticsearch 7.10版本为例,其他版本操作可能略有差别,请以实际界面为准。
  2. 根据页面提示进入Kibana主页,单击右上角的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中包含的所有服务。
    查看AMP服务
    1. 在页面左上角单击导航栏图标图标,展开左侧导航栏。
    2. 在左侧导航栏,单击Observability下的APM
    3. Services页签下查看APM的所有服务。
    4. 单击对应服务的名称,查看并分析数据。