calvinxiao / blog

Calvinxiao's blog
1 stars 0 forks source link

Elastic APM #10

Open calvinxiao opened 5 years ago

calvinxiao commented 5 years ago

Elastic APM

简介

APM = Application Performance Management

企业可以使用 APM 实时监控应用性能和当前工作负载,从而更好做出扩容决定保证系统稳定,闲时可以做对应的服务器缩容,降低总体运行成本。

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

现在市场上的 APM 都做成了 SaaS 服务。国外领先的 APM 有 NewRelic 和 DataDog 等。国内有 OneAPM。

Elastic 开源出了一款 APM,数据存储用 ElasticSearch,用户只需要安装一个 apm-server,然后在应用里面安装对应语言版本的 elastic-apm 包,便可以快速搭建一套开源的 APM 服务。

Elastic APM 打着以开发者为中心的旗号,官网是如下强调的

Elastic APM 支持 Java、Go、Node.js、Python、Ruby 和 Real User Monitoring (JavaScript),未来还会支持更多编程语言。如果没有发现自己想要的,您既可自行构建,也可求助于开源社区。 -- https://www.elastic.co/cn/solutions/apm

具体 Elastic APM 有什么功能大家在官网或者试用一下就知道了,这里就不详细说了。

以前在做 Ruby 应用性能优化的时候,用的都是 stackprofrbspy 之流,stackprof 能收集 Ruby 进程的 CPU wall time,新建对象数量等信息,rbspy 能在线收集一个 Ruby 进程的当前调用栈(用 ptrace),可以生成火焰图,清晰看出具体耗时最长的函数。

而在使用了 Elastic APM 之后,每个路径的耗时对比清晰可见,APM 的每一个 HTTP Service 首页都给出了响应时间(均值,95%,99%),状态码数量等信息,简单直接的给出了需要做性能调优的功能。

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 以内。大家可以访问 https://youhaosuda.com/ 或者搜索 友好速搭 感受一下火箭般的浏览速度。

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

Web 产品的响应速度也是产品特性之一。亚马逊统计过,每快 100ms 的响应时间可以节省 1% 的销售成本,通过友好速搭创建的网站,全球毫秒级加载,而且现在还可以通过 Elastic APM 实时监控网站性能状况,用最敏捷的方式解决性能瓶颈。

友好速搭是国内领先的电商服务和云技术提供方。依托技术、营销、企业服务三大业务,为高端零售品牌打造个性化交易系统,并快速链接行业资源与精准流量,使品牌价值最大化。