文章

使用 Elastic 可观测性实现云原生应用监控(4/4)

Elastic APM 是一款免费开源的应用程序性能监测工具,我们可以借助免费且开放的 Elastic APM 扩展至应用程序指标。精确查看您的应用程序都在哪里耗时了,然后便可快速修复问题,这样对发布的代码可以保持十足信心。

Architecture of Elastic APM

APM工具对比

早之前网上找的对比图,侵删!只提供参考。

APM工具对比

现有系统需要引入时需要考虑如下:

  1. 低性能损耗

  2. 应用级的透明,尽量减少业务的侵入,目标是尽量少改或者不用修改代码

  3. 扩展性

如果偏向于纯Web应用,无需定制化且已经有搭建好的ELK日志系统可以考虑低成本的接入Elastic APM;如果是偏向于Java栈的应用,对跨语言和定制化需求低,可以优先考虑侵入性低的Apache SkyWalking

安装Elastic APM

参考如下 Helm Values,保存为apm-values.yaml:

image-20210809222812740

使用如下脚本安装:

image-20210809222849028

安装成功后:

image-20210809220602894

SpringBoot Demo应用部署

在个人的github上的一个demo repository中,其中Dockerfile如下:

image-20210809223043757

其中应用部署的Deployment的关键配置如下:

image-20210809223237710

部署应用成功后,通过POD IP访问接口:

image-20210809221336657

以上接口,会调用MySQL,Redis以及三方天气的接口API,方便查看不同组件的性能追踪。

Demo Showcase

首页展示:

image-20210809221531694

服务概览:

image-20210809221709770

image-20210809221735189

image-20210809221748611

服务的事务请求:

image-20210809221819183

image-20210809221911806

以上可以看到不同组件的耗时,总计45ms,MySQL花费2.0ms,Redis花费1.2ms,三方接口花费33ms。

还可以点击进入查看详情:

MySQL Span详情,这里展示的SQL语句,方便后续找出慢SQL。

image-20210809222217420

三方接口Span详情:

image-20210809222242447

其他:

image-20210809222046314

image-20210809221936775

还可以添加Alert:

image-20210809222108953

总结

Elastic 系列博文到此结束,其提供的可观测性的解决方案还是相当的不错的。当然其缺点也比较明显,很吃内存。可以期待之后关于 Grafana Stack的系列博文,其占用资源更少。

Reference

  1. Elastic 官网:https://www.elastic.co

  2. Elastic 可观测性:https://www.elastic.co/cn/observability

  3. Elastic APM: https://www.elastic.co/apm

  4. Elastic APM Java Agent Configruation: https://www.elastic.co/guide/en/apm/agent/java/current/configuration.html

License:  CC BY 4.0