当前位置: 首页 > 图灵资讯 > 技术篇> 微服务性能监控 APM工具

微服务性能监控 APM工具

来源:图灵教育
时间:2023-05-30 09:31:29

Elastic APM

  • Elastic 基于Elasticcc的APM Stack构建的应用性能监控(APM)系统。
  • 请求日志:用于实时监控应用程序性能信息,包括HTTP请求呼叫时间、数据库查询信息、缓存呼叫信息和外部HTTP请求呼叫信息。帮助我们快速发现和解决性能问题。
  • 日志跟踪:自动收集应用程序中未处理的错误和异常,显示异常堆栈信息,帮助快速定位异常,了解频率。
  • JVM测量:测量指标是调试生产系统时的另一个重要信息来源。Elastic APM Agent 主机级别的测量指标(如Java)将自动收集 JVM和Go Runtime指标)。
  • 调用链:支持分布式请求链路跟踪,使您能够在视图中分析整个服务架构的性能问题。
组件
  • Elastic APM 包括四个组件: APM Agent, APM Server, Elasticsearch, Kibana。
  • APM Agent:以应用程序库的形式提供,负责收集应用程序运行中的性能监控数据和错误数据,并在短时间缓存后发送APM Server。
  • APM Server:负责接收APM的独立组件 Agent中发送的性能监控数据。验证和处理数据后,将转移到Elasticsearch,然后在Kibana APM 在应用程序中查看性能监控数据。
  • Elasticsearch:用于存储应用性能监控数据并提供聚合功能。
  • Kibana APM app:APM性能监控数据的可视化查看有助于找到性能瓶颈。
数据模型
  • Elastic APM Agent 不同类型的信息可以从其检测的应用程序中捕获。这些操作被称为事件,可以是Span, Transaction, Error, or Metric。
  • Span(跨度):Span包含代码执行路径在一次操作过程中的信息。它从操作开始到结束测量,并且可以与其他Span有父子关系
  • Transaction(事务):Transtiction是一种具有其他相关属性的特殊Span。它描述了Elastictic APM Agent捕获的最高级别事件,如一次请求、一次批处理任务等
  • Error(错误):Error事件至少包含错误发生的原始异常或创建的日志信息
  • Metric(度量):APM Agent 自动获取基本的主机级指标,包括系统和流程级CPU和内存指标。也可以获得特定的代理指标,如Java Agent中的JVM指标和Go Agent中的Go运行指标
使用实践
  • Elasticsearch和Kibana安装Elastich 在APM之前,我们需要安装Elasticsearch和Kibanana
  • 安装APM Server
  • 修改配置文件apm-server.yml,修改Elasticsearch的连接地址;
output.elasticsearch:  hosts: ["localhost:9200"]
  • 使用以下命令启动APM Server可以启动成功的APMr Server将在8200端口运行;
apm-sever -e
  • 在Kibana中检测APM Server成功启动了吗?
  • SpringBoot集成APM Agent
<!--Elastic Agent相关依赖--><dependency>    <groupId>co.elastic.apm</groupId>    <artifactId>apm-agent-attach</artifactId>    <version>1.17.0</version></dependency>
  • 将Elasticc添加到应用启动类的main方法中 APM的Attach API;
@SpringBootApplicationpublic class MallTinyApplication {    public static void main(String[] args) {        ElasticApmAttacher.attach();        SpringApplication.run(MallTinyApplication.class, args);    }}
  • 在resource目录中添加elastice elasticapmAPM配置文件.properties;
# Service配置服务名称name=macro-apm# 基本包aplicationpackages=com.z.tiny# 配置APM Server的访问地址server_urls=http://localhost:8002
  • 在Kibana中检测APM Agent成功启动吗?
查看性能监控信息

微服务性能监控 APM工具_性能监控

微服务性能监控 APM工具_分布式_02

微服务性能监控 APM工具_分布式_03

 
  • 多次调用应用接口即可查看应用性能信息;
  • 打开transaction查看详情,我们可以看到,即使是SQL执行的耗时信息也会给我们统计;
  • 不仅如此,打开Span查看执行查询的细节,甚至SQL语句也为我们收集;
  • 在项目中添加一个远程调用接口,看看是否可以收集到请求调用链路;
@ApiOperation(“远程调用获取所有品牌信息”)    @RequestMapping(value = "/remoteListAll", method = RequestMethod.GET)    @ResponseBody    public CommonResult<List<PmsBrand>> remoteListAll() {        ///模拟耗时操作        ThreadUtil.sleep(1, TimeUnit.SECONDS);        ////远程调用获取数据        String response = HttpUtil.get("http://localhost:8001/brand/listAll");        JSONObject jsonObject = new JSONObject(response);        JSONArray data = jsonObject.getJSONArray("data");        List<PmsBrand> brandList = data.toList(PmsBrand.class);        return CommonResult.success(brandList);    }

微服务性能监控 APM工具_分布式_05

微服务性能监控 APM工具_Elastic_06

  • 发现完全可以,Elastic APM可以完全取代Sleuth+Zipkin进行微服务的请求链接跟踪;
  • 接下来,我们人工制造异常,并在方法中添加int i=1/0;查看收集到的异常信息;
  • 再来看看应用主机的测量信息,非常全面,CPU、内存、JVM信息都有,以后性能调优的时候可以看看!