告警规则指标说明

本文介绍ARMS应用监控告警规则中各类型的指标说明,所有告警指标的最小时间颗粒度为1分钟。

JVM监控

说明

以下JVM指标说明仅为参考,JVM相关描述以JVM官方文档为准。

指标说明

指标名称

单位

是否为常用指标

指标说明

JVM FullGC次数(瞬时值)

最近N分钟JVM执行了Full GC(Full Garbage Collection)的次数。可以根据该指标判断应用是否过于频繁发生FullGC,从而判断应用是否存在异常。

JVM FullGC耗时(瞬时值)

毫秒

不是

最近N分钟JVM执行了Full GC(Full Garbage Collection)所花费的时间。Full GC耗时的瞬时值可以反映出当前JVM的垃圾回收性能,通常情况下,Full GC耗时越短,JVM的性能越好。如果Full GC耗时过长,可能会导致应用程序出现明显的停顿,从而影响用户体验。

JVM YoungGC次数(瞬时值)

最近N分钟JVM执行Young GC(Young Generation Garbage Collection)的次数。Young GC次数的瞬时值可以反映出当前JVM中对象的创建和销毁速度,以及Young Generation的使用情况。通常情况下,Young GC次数越多,表示应用程序中创建的对象越多,同时也可能意味着应用程序可能存在一些内存泄漏或者不合理的内存使用方式。

JVM YoungGC耗时(瞬时值)

毫秒

不是

最近N分钟JVM执行Young GC(Young Generation Garbage Collection)所花费的时间。Young GC耗时的瞬时值可以反映出当前JVM中垃圾回收的效率和性能状况。通常情况下,Young GC耗时越长,表示垃圾回收的效率越低,可能会导致应用程序出现卡顿或者停顿。

JVM堆内总内存量

M

不是

JVM堆内存的总大小,包括年轻代和老年代的大小。JVM堆内存的大小应该根据应用程序的需要进行配置,过小会导致频繁的垃圾回收,影响应用程序的性能;过大则会占用过多的系统资源,影响系统的稳定性。一般来说,JVM堆内存的大小应该根据应用程序的负载和性能需求进行合理的调整。

JVM堆内使用内存量

M

JVM堆内存中已经被Java程序使用的内存大小。JVM堆内使用内存量应该被严格控制,避免因为内存泄漏或者过多的内存占用导致系统性能下降或者内存溢出等问题。

JVM非堆内存提交值

M

不是

非堆内存中已经被Java程序使用的内存大小。JVM非堆内存的提交值也需要被严格控制,避免因为过多的类加载、过多的静态变量和常量等导致内存占用过高。

JVM非堆内存初始值

M

不是

根据JVM版本、操作系统和JVM参数等因素而定,并且通常是动态计算。

JVM非堆内存最大值

M

不是

JVM参数MaxPermSize(在Java 8之前)或MaxMetaspaceSize(在Java 8及以后)控制。

JVM非堆总使用内存量

M

非堆内存总使用量包括了元空间和永久代的使用量。

JVM元空间使用量

M

不是

用于存放类的元数据,包括类的结构信息、方法信息、字段信息等,这一部分的内存占用一般比较稳定。

JVM阻塞线程数

不是

被阻塞等待监视器锁的线程数量,过多的阻塞线程会导致系统性能下降。

JVM线程总数

所有状态的线程数量。线程数量过多可能会导致内存和CPU资源不足,从而影响应用的性能和稳定性。

JVM死锁线程数

不是

两个或多个线程互相等待对方释放资源而无法继续执行的情况。当JVM中出现死锁时,死锁线程数会随着死锁的发生而增加,直到达到死锁状态。通常,死锁线程数越多,死锁的影响越严重,在极端情况下甚至会导致应用程序的崩溃。

JVM新建线程数

不是

JVM新建的线程数量。JVM中可以创建大量的线程,但是过多的线程创建会导致系统资源的浪费和线程调度的负担。

JVM可运行线程数

不是

JVM在运行时支持的最大线程数量。如果创建线程数量过多,会占用大量的内存资源,导致系统变慢或者崩溃。

JVM终结线程数

不是

Java虚拟机在运行时,可以同时运行的线程数量。可以根据具体情况来控制线程的数量,避免出现线程资源浪费或者线程饥饿的问题。

JVM超时等待线程数

JVM运行时,等待某个资源超时的线程数量。如果超时等待线程数过多,说明系统中存在某些瓶颈,需要对资源进行优化,以提高系统的处理能力和响应速度。

JVM等待线程数

不是

当前JVM中处于等待状态的线程数量。对于高并发的应用程序来说,JVM等待线程数的增多可能会导致性能下降。

JVM垃圾回收次数(累计值)

不是

Java虚拟机中进行垃圾回收的累计次数。

JVM标记清除次数(累计值)

不是

Java虚拟机中进行标记清除算法的累计次数。

JVM堆内存使用率(%)

不是

JVM在运行过程中,堆内存已经分配的空间与堆内存总空间之间的比率。它可以用来衡量JVM内存管理的效率和性能。通常情况下,JVM堆内存使用率应该尽量控制在70%以下,这样可以避免出现内存溢出等问题。

指标维度

节点机IP,筛选条件如下:

  • 遍历:遍历每个节点机IP,针对每台节点机的指标数据单独进行监控告警。

  • =:指定筛选固定的几台节点机进行监控告警。示例:=172.20.XX.XX

  • 无维度:汇总所有节点机的指标数据,针对所有节点机的指标数据进行汇总后监控告警。

定时任务

说明

ARMS应用监控目前仅支持展示XXL-JOB/SchedulerX/JDK-Timer类型的定时任务。

指标说明

指标名称

单位

是否为常用指标

指标说明

运行时间

毫秒

不是

定时任务运行的平均耗时。

运行次数

不是

定时任务运行的次数。

运行异常次数

不是

在设定的时间间隔内,定时任务因为某些原因没有正常执行的次数。

调度延迟时间

毫秒

不是

定时任务启动前,调度花费的时间。

指标维度

定时任务,筛选条件如下:

  • 遍历:遍历每个定时任务,针对每个定时任务的指标数据单独进行监控告警。

  • =:指定筛选固定的几个定时任务进行监控告警,示例:=LoadGenerator.mockUserApiLoad

  • 无维度:汇总所有定时任务的指标数据,针对所有定时任务的指标数据进行汇总后监控告警。

异常监控

指标说明

指标名称

单位

是否为常用指标

指标说明

异常发生次数

在软件系统运行过程中发生的各种异常的次数,如空指针异常、数组越界异常、IO异常等。可以根据该指标判断调用堆栈是否抛错,从而判断是否存在应用调用异常。

异常接口调用响应时间

毫秒

该应用异常调用的响应时间,其中,异常调用指调用中出现异常抛错的调用。可以根据该指标判断调用堆栈抛错对应用调用响应时间的影响大小,从而判断是否存在应用调用异常。

指标维度

接口名称,筛选条件如下:

  • 遍历:遍历每个访问到的接口,针对每个接口的指标数据单独进行监控告警。

  • = :指定筛选固定的几个接口进行监控告警,示例:=/tb/api/users/{userId}

  • !=:排除固定的几个接口不进行监控告警,剩余的接口单独进行监控告警,示例:!=/tb/api/users/{userId}

  • 包含:指定包含关键字的接口进行监控告警,示例:包含api

  • 不包含:排除包含关键字的接口进行监控告警,示例:不包含api

  • 正则匹配:通过正则表达式匹配接口进行监控告警,示例:=/(api)/i

  • 无维度:汇总所有接口的指标数据,针对所有接口的指标数据进行汇总后监控告警。

异常名称,筛选条件如下:

  • 遍历:遍历每个访问到的异常,针对每个异常的指标数据单独进行监控告警。

  • = :指定筛选固定的几个异常进行监控告警,示例:=FeignException$InternalServerError

  • !=:排除固定的几个异常不进行监控告警,剩余的异常单独进行监控告警,示例:!=FeignException$InternalServerError

  • 包含:指定包含关键字的异常进行监控告警,示例:包含data

  • 不包含:排除包含关键字的异常进行监控告警,示例:不包含apidata。

  • 正则匹配:通过正则表达式匹配异常进行监控告警,示例:=/(data)/i

  • 无维度:汇总所有异常的指标数据,针对所有异常的指标数据进行汇总后监控告警。

应用依赖服务统计

指标说明

指标名称

单位

是否为常用指标

指标说明

应用依赖服务调用次数

不是

该应用依赖的下游接口的调用次数,用于判断下游依赖服务调用是否增多。

应用依赖服务调用错误率(%)

不是

该应用依赖的下游接口的错误次数除以总请求数,用于判断下游依赖服务报错是否增多,影响当前应用。

应用依赖服务调用响应时间

毫秒

该应用依赖的下游接口的平均响应时间,用于判断下游依赖服务耗时是否增多,影响当前应用。

应用依赖服务慢调用次数

不是

该应用依赖的下游接口的请求耗时超过阈值则计入慢调用数,用于判断下游依赖服务是否影响当前应用。

指标维度

接口调用类型,筛选条件如下:

  • 遍历:遍历每个接口类型,针对每个类型(HTTP/MySQL/Redis等)接口的指标数据单独进行监控告警。

  • =:指定筛选固定的几个接口类型进行监控告警,示例:=http

  • 无维度:汇总所有接口的指标数据,针对所有接口的指标数据进行汇总后监控告警。

主机监控

指标说明

指标名称

单位

是否为常用指标

指标说明

节点机CPU使用率(%)

不是

节点机(服务器)上CPU处理器的使用率,过高的CPU使用率会导致系统响应变慢、服务不可用等问题。

节点机CPU用户态占用率(%)

不是

节点机上CPU处理器在用户态运行的进程占用的CPU时间占总CPU时间的比例。用户态进程是指运行在用户空间的应用程序,如Web服务、数据库等。

节点机空闲磁盘

MB

节点机上未被占用的磁盘空间,可以根据该指标判断节点机磁盘是否已满,磁盘满可能会导致系统崩溃或无法正常工作。

节点机磁盘利用率(%)

不是

节点机中硬盘的使用情况,即已使用的磁盘空间占总磁盘空间的比例。磁盘利用率越高,表示节点机的存储容量越紧张。

节点机系统负载

可以根据该指标判断节点机目前工作负载是否过高,一般拥有N核的节点机,负载建议不应高于N。

节点机空闲内存

MB

节点机中当前未被使用的内存空间大小。可以根据该指标判断节点机内存是否充足,若节点机空闲内存量低,则易导致OOM等异常。

节点机内存利用率(%)

不是

当前节点机已经使用的内存占总内存的比例。如果节点机的内存利用率超过了80%,就需要考虑调整节点机配置或者优化任务使用内存的方式来降低内存压力。

节点机接收错误报文数

不是

节点机在处理网络通信时接收到的错误报文的数量。这些错误报文可能是由于网络传输问题、应用程序问题或者其他原因引起的。错误报文可能会导致节点机无法正常处理网络通信,从而影响系统的正常运行。

节点机发送错误报文数

不是

节点机在处理网络通信时发送了错误报文的数量。这些错误报文可能是由于网络传输问题、应用程序问题或者其他原因引起的。可以根据该指标判断节点机网络是否异常。

JVM实例数

当前实时运行的Java虚拟机实例数量,常用于服务宕机告警配置。

节点机发送的字节数

不是

节点机通过网络连接发送的数据量,其中包括应用程序发送的数据、系统消息和错误信息等。

节点机发送的报文数

不是

节点机通过网络连接发送的消息的数量。

节点机接收的字节数

不是

节点机通过网络连接接收的数据的总量。

节点机接收的报文数

不是

节点机通过网络连接接收到的报文的数量。

指标维度

节点机IP,筛选条件如下:

  • 遍历:遍历每个节点机IP,针对每台节点机的指标数据单独进行监控告警。

  • =:指定筛选固定的几台节点机进行监控告警。示例:=172.20.XX.XX

  • 无维度:汇总所有节点机的指标数据,针对所有节点机的指标数据进行汇总后监控告警。

容器监控

应用监控(4.1.0及以上探针版本)会采集容器的CPU/内存用于监控和告警。

指标说明

指标名称

单位

是否为常用指标

指标说明

用户态CPU使用量

不是

进程在用户模式下执行代码所花费的时间。这包括了应用程序自己的代码以及任何不在内核态运行的库函数,这是应用程序直接执行任务所占用的CPU时间。

内核态CPU使用量

不是

指进程在内核态(或称为系统态)下执行所花费的时间。当应用程序执行系统调用、处理中断或者使用内核提供的功能时,就会进入内核态。这部分时间反映了操作系统为该进程提供服务所消耗的CPU资源。

合计CPU使用量

用户态CPU使用量 + 内核态CPU使用量。

内存使用量

字节

用于衡量容器在运行时实际正在使用的内存大小。这个指标反映了容器当前活跃使用的内存总量,包括了被操作系统标记为不可交换(non-swappable)的部分和已经缓存但仍然被视为活动数据的部分。

网络发送的报文数

不是

容器通过网络连接发送的消息的数量。

网络发送的字节数

字节

容器通过网络连接发送的数据的总量。

发送错误报文数

不是

容器处理网络通信时发送了错误报文的数量。这些错误报文可能是由于网络传输问题、应用程序问题或者其他原因引起的。可以根据该指标判断容器网络是否异常。

发送丢弃报文数

不是

容器的网络接口启动以来,总共有多少出站网络数据包(packets)因各种原因被系统或网络栈丢弃的数量。

网络接收的报文数

不是

容器通过网络连接接收的数据的数量。

网络接收的字节数

字节

容器通过网络连接接收的数据的总量。

接收错误报文数

不是

容器处理网络通信时接收到的错误报文的数量。这些错误报文可能是由于网络传输问题、应用程序问题或者其他原因引起的。错误报文可能会导致容器无法正常处理网络通信,从而影响系统的正常运行。

接收丢弃报文数

不是

容器的网络接口启动以来,总共有多少入站网络数据包(packets)因为各种原因被系统或网络栈丢弃的数量。

指标维度

节点机IP,筛选条件如下:

  • 遍历:遍历每个容器,针对每个容器的指标数据单独进行监控告警。

  • =:指定筛选固定的几个容器进行监控告警。示例:=172.20.XX.XX

  • 无维度:汇总所有容器的指标数据,针对所有容器的指标数据进行汇总后监控告警。

应用提供服务统计

指标说明

指标名称

单位

是否为常用指标

指标说明

调用次数

应用入口调用(包括调用HTTP入口、调用Dubbo入口等)的次数。可以根据该指标分析当前应用调用量的大小,从而判断业务量的大小,以及通过调用量是否偏大或偏小判断应用是否存在异常。

慢调用次数

不是

应用入口调用(包括调用HTTP入口、调用Dubbo入口等)的响应时间超过阈值则计入慢调用数。可以根据慢调用数量,判断应用是否存在异常。

调用错误次数

应用入口调用(包括调用HTTP入口和调用Dubbo入口等)的错误次数,调用错误是指整个对外(HTTP、Dubbo)调用行为的返回状态码>400的情况, 或者Dubbo有异常被最上层拦截的情况,都视为错误。可以根据该指标判断应用是否存在调用错误。

调用错误率(%)

应用入口调用的调用错误次数的总和/入口的调用次数的总和*100%。

调用响应时间

毫秒

应用入口调用(包括调用HTTP入口、调用Dubbo入口等)的响应时间。可以根据该指标判断是否有慢请求出现,从而判断应用是否存在异常。

指标维度

接口名称,筛选条件如下:

  • 遍历:遍历每个访问到的接口,针对每个接口的指标数据单独进行监控告警。

  • = :指定筛选固定的几个接口进行监控告警,示例:=/tb/api/users/{userId}

  • !=:排除固定的几个接口不进行监控告警,剩余的接口单独进行监控告警,示例:!=/tb/api/users/{userId}

  • 包含:指定包含关键字的接口进行监控告警,示例:包含api

  • 不包含:排除包含关键字的接口进行监控告警,示例:不包含api

  • 正则匹配:通过正则表达式匹配接口进行监控告警,示例:=/(api)/i

  • 无维度:汇总所有接口的指标数据,针对所有接口的指标数据进行汇总后监控告警。

接口调用类型,筛选条件如下:

  • 遍历:遍历每个接口类型,针对每个类型(HTTP/MySQL/Redis等)接口的指标数据单独进行监控告警。

  • =:指定筛选固定的几个接口类型进行监控告警,示例:=http

  • 无维度:汇总所有接口的指标数据,针对所有接口的指标数据进行汇总后监控告警。

线程池监控

指标说明

指标名称

是否为常用指标

指标说明

核心线程数

在线程池中始终保持活动的线程数。

最大线程数

在线程池中能够同时存在的最大线程数量。

活跃线程数

当前正在执行任务的线程数量。活跃线程数的检查可以用来监控线程池的运行状态,以及评估线程池的性能。

队列大小

线程队列的大小取决于应用程序的需求和系统资源的可用性。在多线程编程中,当队列大小过小时,可能会导致任务排队等待的时间过长,从而降低程序的性能;而当队列大小过大时,可能会导致系统资源的消耗过多,从而导致系统崩溃或者性能下降。

当前线程数

正在运行或等待运行的线程数量。

已执行任务数

在一个任务队列或线程池中已经被执行并完成的任务数量,可以用来评估任务队列或线程池的性能。

线程池使用率

线程池中正在使用的线程数与线程池总线程数之比,反映了当前线程池的使用情况。

指标维度

节点机IP,筛选条件如下:

  • 遍历:遍历每个节点机IP,针对每台节点机的指标数据单独进行监控告警。

  • =:指定筛选固定的几台节点机进行监控告警。示例:=172.20.XX.XX

  • 无维度:汇总所有节点机的指标数据,针对所有节点机的指标数据进行汇总后监控告警。

线程池名称,筛选条件如下:

  • 遍历:遍历每个线程池,针对每个线程池的指标数据单独进行监控告警。

  • =:指定筛选固定的几个线程池进行监控告警,示例:=pool-*-thread-*

  • 无维度:汇总所有线程池的指标数据,针对所有线程池的指标数据进行汇总后监控告警。

线程池类型,筛选条件如下:

  • 遍历:遍历每个类型的线程池,针对每个类型的线程池的指标数据单独进行监控告警。

  • =:指定筛选固定的几个类型的线程池进行监控告警,示例:=FixedThreadPool

  • 无维度:汇总所有类型线程池的指标数据,针对所有类型的线程池的指标数据进行汇总后监控告警。

HTTP状态码异常

指标说明

指标名称

是否为常用指标

指标说明

HTTP接口状态码4xx调用次数

客户端向服务器发送请求时,服务器返回的标准响应状态码为4xx的调用次数,例如请求的资源不存在、缺少必要的参数等,常见的4xx状态码有400404。

HTTP接口状态码5xx调用次数

客户端向服务器发送请求时,服务器返回的标准响应状态码为5xx的调用次数,例如服务器内部错误、系统繁忙等,常见的5xx状态码有500503。

指标维度

接口名称,筛选条件如下:

  • 遍历:遍历每个访问到的接口,针对每个接口的指标数据单独进行监控告警。

  • = :指定筛选固定的几个接口进行监控告警,示例:=/tb/api/users/{userId}

  • !=:排除固定的几个接口不进行监控告警,剩余的接口单独进行监控告警,示例:!=/tb/api/users/{userId}

  • 包含:指定包含关键字的接口进行监控告警,示例:包含api

  • 不包含:排除包含关键字的接口进行监控告警,示例:不包含api

  • 正则匹配:通过正则表达式匹配接口进行监控告警,示例:=/(api)/i

  • 无维度:汇总所有接口的指标数据,针对所有接口的指标数据进行汇总后监控告警。

数据库指标

指标说明

指标名称

单位

是否为常用指标

指标说明

数据库调用次数

应用程序在执行过程中,向数据库发送请求的次数。每次请求通常包含一次读取或写入操作。数据库调用次数的多少直接影响了应用程序的性能和响应时间。

数据库调用错误次数

应用程序在执行过程中,向数据库发送请求时出现错误的次数。这些错误可能包括数据库连接失败、查询语句错误、权限不足等。数据库调用错误次数越多,说明应用程序与数据库的交互存在问题,可能导致应用程序无法正常工作。

数据库调用响应时间

毫秒

从应用程序发送请求到数据库,到数据库返回响应结果的时间。数据库调用响应时间的快慢直接影响应用程序的性能和用户体验。如果响应时间过长,用户可能会感到应用程序卡顿或无响应,降低用户满意度。

数据库慢调用次数

不是

从应用程序发送请求,到数据库返回响应结果的时间超过阈值则计入慢调用数。较多的慢调用,直接影响应用程序的性能和用户体验。

指标维度

数据库名称,筛选条件如下:

  • 遍历:遍历每个数据库,针对每个数据库的指标数据单独进行监控告警。

  • =:指定筛选固定的几个数据库进行监控告警,示例:=mysql-pod:3306(demo_db)

  • 无维度:汇总所有数据库的指标数据,针对所有数据库的指标数据进行汇总后监控告警。