· 更多精彩内容,请下载阅读全本《Elastic Stack实战手册》
创作人:胡征南
审稿人:杨振涛
应用程序性能管理(Application Performance Management)简称 APM。主要功能为监视和管理软件应用程序性能和可用性。
Elastic APM 是一款基于Elastic 技术栈的免费及开放的性能监控系统。用于实时监控软件服务和应用程序的各项性能指标,如:请求访问的各项指标、访问耗时、数据库查询、缓存调用、外部 HTTP 请求等。便于开发人员快速排查和修复各种性能问题。
Elastic APM 也会自动采集各种系统异常。开发人员可以通过追踪异常的程序栈,识别系统异常发生的时间和次数。
自动采集的系统指标也是 Elastic APM 一个非常重要的数据源。采集维度主要包括,宿主机级别和服务代理(Agent)级别,如:使用 Java 语言系统编写的应用程序的 JVM 指标,Go 语言运行环境的运行指标等。
Elastic APM 由4个组件组成:APM 代理、APM 服务端、Elasticsearch 和 Kibana。
图1
APM Agent
APM Agent 为通过与应用服务相同的语言编写的开源类库。通过按照其他应用程序服务一样安装代理。安装完成之后,即可通过代理收集各项应用程序指标和运行时异常。收集的数据将在本都缓存较短时间后发送至 APM Server。
支持的语言主要包括:Go、Java、.NET、Node.js、Python、Ruby、JavaScript。
APM Server
APM Server 是一款收集 APM Agent 数据、可独立部署的开源应用程序。APM Server 使得代理变得轻量级、防范安全风险、并提高了 Elastic 技术栈的跨语言能力。APM Server 将通过 APM Agent 收集的数据进行验证、处理后存入对应的 Elasticsearch 索引。经过几秒种后,就可以通过 Kibana APM 应用观测到可视化后的应用程序性能数据了。
Elasticsearch
Elasticsearch 是一款高度可伸缩的全文检索和分析引擎。用于近实时存储、搜索和分析大量数据。在 Elastic APM 中,Elasticsearch 用于存储和聚合性能监控指标。
Kibana
Kibana 是一款将 Elasticsearch 数据进行分析和可视化的开源数据分析平台。用于对检索、展示、操作 Elasticsearch 中存储的数据。
APM术语
Service
在 APM agent 配置中进行设置,以将特定的 APM agent 组标识为单个服务,这是一种逻辑上标识一组事务的方法。
Transaction
组成一个服务的请求和响应,例如登录 api 调用,每个调用由单独的 span 组成。
Span
事务中的单个事件,例如方法调用,数据库查询或缓存插入或检索,即需要花费时间才能完成的任何事件。
Erorrs
具有匹配的异常或日志消息的异常组。
Trace
代表请求的整个过程
。
它们之间的关系可以用如下的图来表示:
图2
分布式 Tracing
当请求从一个微服务流向另一个微服务时,追踪器添加逻辑以创建唯一的追踪识别代码, 跨度 id
图3
图4
图5
APM的安装和使用
启动步骤
配置启动 APM 主要包含三个步骤:安装 APM Server、配置 APM Agent、在 Kibana 中配置可视化面板。
步骤一:安装 APM Server
- 安装
通过 APM 服务端地址下载合适的服务端安装包。
下载地址 :https://www.elastic.co/cn/downloads/apm
- 设置和配置
通过 apm-server setup [FLAGS]
可以设置APM 服务端
FLAGS :
-h
,--help
查看帮助。
--index-management
设置关联 Elasticsearch 索引管理,包括:索引模板、生命周期管理策略、写入别名。
--pipelines
注册定义在ingest/pipeline/definition.json
中的管道。
配置示例:
apm-server setup --index-management
apm-server setup --pipelines
- 启动
通过启动命令启动 APM 服务端,启动命令:
./apm-server -e
指定输出 Elasticsearch 及 APM 服务端
./apm-server -e -E output.elasticsearch.hosts=ElasticsearchAddress:9200 -E apm-server.host=localhost:8200
步骤二:配置APM Agent
- 下载 APM 代理 可以通过 Maven Central 下载代理 Jar 包,不需要再项目中引入依赖,
下载地址:https://search.maven.org/search?q=a:elastic-apm-agent
- 使用 javaagent 参数启动应用,并设置好对应的配置项。
elastic.apm.service_name
为服务名称
elastic.apm.server_urls
为服务端请求地址
elastic.apm.application_packages
为项目包路径
- 启动参数示例:
java -javaagent:/path/to/elastic-apm-agent-<version>.jar \
-Delastic.apm.service_name=my-application \
-Delastic.apm.server_urls=http://localhost:8200 \
-Delastic.apm.secret_token= \
-Delastic.apm.application_packages=org.example \
-jar my-application.jar
步骤三:在 Kibana 查看可视化面板
- 启动 Kibana
- 在 Kibana 中 可观测性(Observability) 菜单下选择 APM,如图1
图6 Observability 菜单中选择APM
图7 服务健康状态视图
图8 服务链路追踪视图
图9 服务拓扑图视图
Service Map
APM 的 服务拓扑( Service map )功能可以实时显示应用架构的服务拓扑图。可以展示服务是如何连接及服务相关指标,如:事务处理耗时、每分钟请求数量、每分钟错误数量等。APM 服务拓扑图也可以结合机器学习功能,基于异常检测得得分的实时健康状态显示。以上功能可用于帮助开发人员快速、可视化的观测到服务的状态和健康程度。
APM 服务拓扑图有两种显示方式,如下图所示:
- 全局显示:所有安装了APM客户端的服务及它们的连接关系。
- 指定服务显示:高亮选中服务的连接关系。
图10
服务拓扑是通过开箱即用的服务链路追踪实现的。即:未正确配置追踪服务的项目不会被追踪到,也不会在服务拓扑图中显示。
服务拓扑图中选择关注的服务,可以查看对应服务的详细信息。
图11
通过机器学习自动检测事务调用得分,并在服务拓扑图中通过图例显示。
异常得分小于25,服务处于健康状态 | |
---|---|
最大异常得分介于 26-74,服务可能处于亚健康状态 | |
最大异常得分大于 75,服务出于不健康状态 |
表1
服务拓扑图中有两种形状的节点。
圆形:检测到的服务,图标取决于使用了那种代理。
钻石形:数据库,外部系统和消息。根据已知的实体显示对于的图标,如 Elasticsearch 的图标。
参考文献
创作人简介:
胡征南,杭州光云科技 Java 开发专家,获 ECE 认证、CNCF K8S 认证。