Elastic APM 应用性能监控方案

Elastic APM 应用性能监控方案

APM 的探针可以部署在代码运行时里面,可收集到更加接近应用程序的性能数据,大部分 APM sdk 还可以监控到 SQL 请求,Redis 请求,对外 HTTP 请求,模板渲染细节等数据。

技术开发 编程 技术框架 技术发展

 

Elastic APM 应用性能监控方案

APM 的探针可以部署在代码运行时里面,可收集到更加接近应用程序的性能数据,大部分 APM sdk 还可以监控到 SQL 请求,Redis 请求,对外 HTTP 请求,模板渲染细节等数据。

概述

Elastic APM 是基于 Elastic Stack 构建的应用性能监控系统。通过 Elastic APM 可以监控应用程序,收集有关请求的响应时间、数据库查询、高速缓存调用、外部 HTTP 请求等的详细性能信息,这样可以更快地查明并修复性能问题。

Elastic APM 还会自动收集未处理的错误和异常,错误主要基于堆栈跟踪进行分组,因此可以识别出现的新错误,并密切关注特定错误发生的次数。

APM 组件

Elastic APM 包含四个组件:

APM agent

APM agent 是使用与服务相同的语言编写的开源库,可以像安装其他库一样将它们安装到服务中,agent 将检测服务的代码并在运行时收集性能数据和错误,这些数据缓冲一小段时间并发送到 APM server。

APM server

APM Server 是用 Go 编写的开源应用程序,通常运行在专用服务器上,默认监听端口 8200 ,并通过 JSON HTTP API 从 agent 接收数据,然后根据该数据创建文档并将其存储在 Elasticsearch 中。

Elasticsearch

Elasticsearch 是高可扩展的开源全文搜索和分析引擎,用于快速、近实时地存储、搜索和分析大量数据。此处用于存储 APM 性能指标并利用其聚合。

Kibana

Kibana 是开源的分析和可视化平台,旨在与 Elasticsearch 协同工作,可以通过 Kibana 搜索、查看 Elasticsearch 中存储的数据,此处用于可视化 Elasticsearch 中存储的 APM 数据。

Elastic APM 通过探针可以收集到常用类库的运行信息,目前的 Ruby elastic-apm gem 可以支持 Active Record,Sequel SQL,Redis,Mongo,NET::HTTP,tilt::Template,json 等等。

通过使用 Elastic APM,我们发现了友好速搭官网首页执行了 89 次 SQL 查询,看代码发现是前端渲染模板的时候在循环里调用了两次 SQL 请求。通过优化,整个页面现在只需要 2 个 SQL 请求,目前 99% 的 response time 在 40ms 以内。

Elastic APM 还会记录应用内的异常,可以简单使用现有的 Grafana,通过增加 Elasticsearch 数据源,可以直观看到对应服务的异常数量,Grafana 可以设置告警发到 Slack 或者 Bearychat。

技术开发 编程 技术框架 技术发展