> 在分布式系统下,如何去发现某一些服务的工作性能情况,以及追踪一次会话相关的服务调用呢,通过 Elastic APM 服务,就可以很简单的对不同开发语言的程序进行统一监控。
#### 架构设计
涉及到 Elastic Stack 中 Metricbeat 是用于采集 Kubernetes 相关的性能指标, Elasticsearch 是用于对于数据落地存储和搜索的引擎, Kibana 是用于对数据可视化的工具。
本例子采用 Java 开发语言,由于 Java Agent 是在 Class 被装载到 ClassLoader 之前进行拦截并插入自定义的字节码,所以可以实现无侵入式的零代码修改监控。
#### APM
APM 工具用于观测应用的运行情况,例如是否在线、资源使用情况、请求情况、响应时间等等,通过 APM 工具记录每一个请求的详细情况,从而最大程序的知道应用的情况而采取一些优化的手段。
Span 是指一次链路的调用,例如是一次访问数据库的动作,或者是一次 RPC 的调用,Span 中还记录自身的 id,调用链路来源的父 id,时间戳,标记信息以及调用信息等。
Trace 是指一次完整的调用链的跟踪,包括一个或多个 Span 构成,例如在分布式系统下,用户在前台购买了一个商品,这个行为就会产生一次或多次 Trace,其中一个 Trace 下可能有多个 Span 调用。
#### 实施方法
##### Java Application
克隆 Java 应用源码
git clone https://github.com/elastic/opbeans-java.git
打包成 Jar 包
cd opbeans-java/opbeans
mvn package
##### Java Agent
通过 Java Agent 注入字节流进行追踪 Java 应用的运行情况
./elastic-apm-agent-1.18.1.jar \ -Delastic.apm.service_name=opbeans-java \ -Delastic.apm.server_urls=http://apm:8200 \ -Delastic.apm.secret_token=xxx \ -Delastic.apm.application_packages=co.elastic.apm.opbeans -jar \ ./target/opbeans-0.0.1-SNAPSHOT.jar
#### 可视化展示
通过 Kibana 中的 Dashboard 功能
展示目前 Java 应用的运行情况