美文网首页微服务
微服务性能监控 - APM工具

微服务性能监控 - APM工具

作者: 架构师老狼 | 来源:发表于2021-06-20 10:32 被阅读0次

    Elastic APM

    • Elastic APM是基于Elastic Stack构建的应用性能监控(APM)系统。
    • 请求日志:用来实时监控应用性能信息,包括HTTP请求调用时长、数据库查询信息、缓存调用信息和外部的HTTP请求调用信息。有助于我们快速找出并解决性能问题。
    • 日志跟踪:自动收集应用中未处理的错误和异常,显示异常的堆栈信息,有助于快速定位异常和了解出现频率。
    • JVM度量:度量指标是调试生产系统时的另一个重要信息来源。Elastic APM Agent 会自动收集主机级别的度量指标(比如Java JVM和Go Runtime的指标)。
    • 调用链:支持分布式请求链路追踪,使你能够在一个视图中分析整个服务架构的性能问题。

    组件

    • Elastic APM 包括四大组件: APM Agent, APM Server, Elasticsearch, Kibana。


      Elastic APM 包括四大组件
    • 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(事务):Transaction是一种特殊的Span,具有与之关联的其他属性。它描述了Elastic APM Agent捕获的最高级别事件,比如一次请求、一次批处理任务等
    • Error(错误):Error事件至少包含错误发生的原始异常或创建的日志的信息
    • Metric(度量):APM Agent 自动获取基本的主机级别指标,包括系统和进程级别的CPU和内存指标。也可以获取特定于代理的指标,例如Java Agent中的JVM指标和Go Agent中的Go运行时指标

    使用实践

    • 安装Elasticsearch和Kibana安装Elastic APM之前,我们需要先安装好Elasticsearch和Kibana
    • 安装APM Server


      APM Server
    • 修改配置文件apm-server.yml,修改下Elasticsearch的连接地址即可;
    output.elasticsearch:
      hosts: ["localhost:9200"]
    
    • 使用如下命令启动APM Server即可,启动成功APM Server将在8200端口运行;
    apm-sever -e
    
    • 在Kibana中检测APM Server是否启动成功


      Kibana中
    • SpringBoot集成APM Agent
    <!--Elastic Agent相关依赖-->
    <dependency>
        <groupId>co.elastic.apm</groupId>
        <artifactId>apm-agent-attach</artifactId>
        <version>1.17.0</version>
    </dependency>
    
    • 在应用启动类的main方法中添加Elastic APM的Attach API;
    @SpringBootApplication
    public class MallTinyApplication {
    
        public static void main(String[] args) {
            ElasticApmAttacher.attach();
            SpringApplication.run(MallTinyApplication.class, args);
        }
    
    }
    
    • 在resource目录下添加Elastic APM的配置文件elasticapm.properties;
    # 配置服务名称
    service_name=macro-apm
    # 配置应用所在基础包
    application_packages=com.z.tiny
    # 配置APM Server的访问地址
    server_urls=http://localhost:8002
    
    • 在Kibana中检测APM Agent是否启动成功


      APM Agent

    查看性能监控信息

    • 多次调用应用接口,即可查看到应用性能信息;


      http请求信息
    • 打开某个Transaction查看详情,我们可以看到连SQL执行耗时信息都给我们统计好了;


      sql执行耗时
    • 不仅如此,打开执行查询的Span查看详情,连SQL语句都给我们收集好了;


      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);
        }
    
    • 发现完全可以,Elastic APM完全可以取代Sleuth+Zipkin来做微服务的请求链路跟踪了;


      调用链监控
    • 接下来我们人为制造一个异常,在方法中添加int i=1/0;即可,查看下收集到的异常信息;


      异常调用链
    • 再来看下应用主机的度量信息,非常全面,CPU、内存、JVM信息都有了,以后性能调优的时候可以看看!


      JVM度量监控

    相关文章

      网友评论

        本文标题:微服务性能监控 - APM工具

        本文链接:https://www.haomeiwen.com/subject/sdijyltx.html