
# 应用监控概述
APM Agent会周期性采集一些性能指标数据，用来衡量应用的总体健康状况。可以采集JVM、GC、服务调用、异常、外部调用、数据库访问、Profiler性能分析、Debugging诊断以及其他中间件的指标调用等数据，帮助用户全面掌握应用的运行情况。
APM对指标数据的采集有严格的定义，每一种采集的数据类型对应一个采集器，比如采集java和Node.js应用的JVM数据，那么对应有JVM采集器，一个采集器会采集多个指标集的数据。详细的采集器及指标集信息请参见[通过采集中心查看APM监控项信息](https://support.huaweicloud.com/usermanual-apm2/apm_07_1131.html)。
采集器被部署到环境后形成监控项，在数据采集的时候监控项决定了采集的数据结构和采集行为。
#### 组件性能指标
Agent会自动发现系统采集的插件类型，并且将采集器实例化，形成监控项。监控项是实例化在一个环境上的。
由于采集器种类较多，会导致用户区分困难。系统后台会定义一些类型，每种采集器都会归到一种类型下，这样方便用户查看数据。
APM应用指标监控可以度量应用的整体健康状况。拓扑、接口调用、基础监控、异常为基本的监控项。其他的监控项，如：外部调用、通信协议、数据库、Web容器、缓存、消息队列，会由Agent根据用户服务的使用情况，自动发现予以显示。
应用指标监控仅展示接入应用涉及的监控项的指标。接入应用不涉及的监控项的指标，不做展示。
根据采集器的作用可以将监控项分为以下几种类型：
- 拓扑：拓扑图展示服务之间一段时间的调用关系，可以是从调用方统计的，也可以是从被调用方统计的，并且可以查看这个调用关系的趋势图。
- 接口调用：指外部服务调用当前应用的监控类型。
- 基础监控：用来监控系统性能的基础监控指标的监控类型。
- 异常：用来监控应用的异常信息。
- 外部调用：是指当前应用调用外部服务的监控类型。
- 数据库： 对数据库的访问进行监控。
- 缓存：是对Redis等缓存系统的监控，会采集指令级别的细粒度的指标数据。
- web容器：对tomcat等web容器的监控，一般会采集系统总的处理线程数，busy线程数，连接数等；用于衡量系统总的容量。
- 消息队列：对kafka、RabbitMq等消息系统的监控，包含发送端和接收端的监控。在接收端的处理函数，可以产生调用链信息。
- 通信协议：对websocket等通信协议的监控。
- profiler性能分析：自动获取应用程序运行过程中，CPU Time、Allocated Memory、Latency以及Live Object Memory的使用情况，通过火焰图实时展示每一个方法的调用关系和执行率，帮助优化代码性能。
- Debugging诊断：Debugging诊断可协助用户分析线程状况，获取方法及对象实时参数。方便开发人员从实时的远程应用程序中获取调试信息，而无需重新启动应用程序，也不会阻止它并导致服务停机。
- 远程过程调用：对GRPCServer等远程过程调用的监控。
 
#### 组件监控项
每个监控项对应的采集器会定义一些采集参数，用户可以在页面更改采集参数，并且随着心跳参数下发到Agent，更改采集行为。比如默认情况，出于安全考虑APM不会采集Redis指令里面的内容，如果用户有需求，可以更改监控项的采集参数，实现具体指令数据内容的采集。采集参数也可以定义在环境标签上面，这样对应的环境标签下的采集器会自动继承采集参数属性，实现配置自动化。
#### 监控项视图
在指标监控详情界面，一个监控项会对应一个或多个tab的视图，每个视图都对应一个指标集合。视图当前支持汇总表格、趋势图、最近数据表格和原始表格几种类型。
- 采集周期：监控项具有数据采集器的周期属性。当前数据采集周期为一分钟，不支持用户调整。
- 监控项状态：默认为enable状态，用户可以将监控项设置为disable状态，这样Agent就不会拦截该指标数据，也不会上报数据。具体操作请参见[监控项启停](https://support.huaweicloud.com/usermanual-apm2/apm_07_0012.html#apm_07_0012__section116746353411)。
- 采集状态：采集实例和监控项会有一个采集状态信息。如果出现采集错误，可以通过采集状态查看。常见错误是主键太多，导致客户端数据汇聚异常。
 
