概述
Anomaly detection异常检测模块的主要功能是基于统计方法来发现时序数据中可能存在的异常情况。该模块框架解耦,可以实现不同异常检测算法的灵活替换,而且该模块功能可以根据时序数据的不同特征来自动选择算法,支持异常值检测、阈值检测、箱型图检测、梯度检测、增长率检测、波动率检测和状态转换检测。
在异常检测的基础上,DBMind支持对关键指标异常的根因分析功能,其分析模型来源于大量现网场景总结,通过对指标发生异常时其他指标进行关联,输出可能的根因。
当前DBMind默认启动的检测器如表1所示:
表 1 检测器列表
分类 | 检测器 | 告警级别 | 默认检测逻辑 | 是否支持诊断 | 处理措施 |
---|
磁盘 | high_disk_usage_detector(磁盘高占用检测器) | WARNING | 磁盘占用超过80%(阈值可配置)。 | 是 | •场景5:磁盘空间占用高异常 |
high_db_disk_usage_detector(数据库磁盘高占用检测器) | WARNING | 数据盘占用超过80%(阈值可配置)。 | 是 | •场景5:磁盘空间占用高异常 |
high_xlog_count_detector(Xlog堆积检测器) | WARNING | Xlog数量减去checkpoint_segments * 2 + wal_keep_segments + 3的结果大于0(阈值可配置)。 | 是 | •场景4:xLog堆积 |
内存 | high_mem_usage_detector(系统内存高占用检测器) | WARNING | 系统内存使用率连续10分钟(阈值可配置)超过80%(阈值可配置)的数据的采样率超过80%(阈值可配置)。 | 是 | •场景3:动态内存使用率异常; •场景4:共享内存使用率异常 |
mem_leak_detector(系统内存泄露检测器) | INFO | 系统内存在7-30天的时间范围内持续上涨。检测所需要的最短数据长度是7天,数据长度超过30天之后总是对最近30天的内存进行检测。 | 是 | •场景2:内存泄漏监测 |
session_mem_increase_detector(会话内存泄露检测器) | INFO | contextname粒度的会话内存在2小时(阈值可配置)内的数据持续上涨,且该上下文占总会话内存比例超过5%(阈值可配置)的采样率超过80%(阈值可配置),且动态内存使用率超过80%(阈值可配置)的数据的采样率超过80%(阈值可配置)。 | 否 | 在异常信息中通过标签信息获取具体故障的节点和上下文信息,可联系内核运维人员进一步定位。 说明:对于多线程使用的内存上下文,会被汇总在某一个上下文之下,计算的是该类上下文的总和,而不对单个线程进行分析。 |
shared_mem_increase_detector(共享内存泄露检测器) | INFO | contextname粒度的共享内存在2小时(可配置)内的数据持续上涨,且该上下文占总共享内存比例超过5%(可配置)的采样率超过80%(可配置),且动态内存使用率超过80%(可配置)的数据的采样率超过80%(可配置)。 | 否 | 在异常信息中通过标签信息获取具体故障的节点和上下文信息,可联系内核运维人员进一步定位。 说明:对于多线程使用的内存上下文,会被汇总在某一个上下文之下,计算的是该类上下文的总和,而不对单个线程进行分析。 |
other_mem_increase_detector(三方组件内存泄露检测器) | INFO | 三方组件内存在30分钟(阈值可配置)内的数据持续上涨,且系统内存使用率连续10分钟(阈值可配置)超过80%(阈值可配置)的数据的采样率超过80%(阈值可配置)。 | 否 | 在异常信息中通过标签信息获取具体故障信息,可联系内核运维人员进一步定位。 |
CPU | high_cpu_usage_detector(CPU高使用率检测器) | WARNING | CPU使用率最近10分钟(阈值可配置)的数据超过80%(阈值可配置)的数据的采样率超过80%(阈值可配置)。 | 是 | •场景1:用户CPU使用率异常 |
high_thread_pool_rate_detector(线程池高使用率检测器) | WARNING | 线程池使用率超过95%(阈值可配置)。 | 是 | •场景2:线程池使用率异常 |
磁盘I/O | high_io_delay_detector(I/O延迟检测器) | INFO | os_disk_await最近10分钟(阈值可配置)的数据中超过30毫秒(阈值可配置)的数据的采样率超过50%(阈值可配置)且超过90毫秒(阈值可配置)的数据的采样率超过10%(阈值可配置)。 | 是 | •场景6:磁盘IO读取时延异常 |
slow_disk_detector(慢盘检测器) | WARNING | await time超过15毫秒(阈值可配置)的os_disk_await数据超过25%(阈值可配置)且 os_disk_await在7天-30天的数据持续上涨,检测所需要的最短数据长度是7天,数据长度超过30天之后总是对最近30天的内存进行检测。 | 是 | •场景1:潜在慢盘监测 |
disk_io_jam_detector(I/O阻塞检测器) | INFO | os_disk_io_queue_length大于0(阈值可配置)且 os_disk_ioutils大于99%(阈值可配置)且 os_disk_await数据中超过30毫秒(阈值可配置)的数据的采样率超过50%(阈值可配置)。 | 否 | 在异常信息中通过标签信息获取具体故障的节点和硬盘信息,可联系内核运维人员进一步定位。 |
网络
| lag_detector(来自或去往主DN的网络延迟检测器) | INFO | ping_lag最近10分钟(阈值可配置)的数据超过50毫秒(阈值可配置)的数据的采样率超过50%(阈值可配置)。 | 否 | 检查是否为主备切换引起的网络条件变化,如果不是请联系现场运维人员进一步排查。 |
packet_loss_detector(来自或去往主DN的网络丢包率检测器) | INFO | ping_packet_rate最近10分钟(阈值可配置)的数据得包率低于90%(阈值可配置)的数据的采样率超过20%(阈值可配置)。 | 否 | 检查是否为主备切换引起的网络条件变化,如果不是请联系现场运维人员进一步排查。 |
文件句柄 | leaked_fd_detector(文件句柄泄露检测器) | WARNING | 数据库进程未释放的文件句柄数process_leaked_fds超过5个(阈值可配置)。 | 否 | 如需进一步分析文件句柄泄露异常,可以根据标签中的pid,在数据库节点上使用以下命令进行分析 ls -l /proc/{pid}/fd | grep '(deleted)' 可以获取到泄露的文件路径,联系运维人员进一步排查。 |
长事务 | slow_sql_detector(长事务检测器) | INFO | 存在处于active或者idle in transaction状态且运行时间超过1个小时(3600秒,阈值可配置)的事务。 说明:由于目标指标pg_long_transaction_count只采集时长超过3600秒以上的事务,所以即使设置的阈值低于3600秒,可以检测的长事务仍然是3600秒以上的长事务。 修改slow_sql_detector的阈值时会一并修改长事务的根因分析对于长事务的判断逻辑,保证两侧的判断逻辑一致。 | 是 | •场景5:长事务 |
须知:
- 异常检测器的落盘存储依赖于元数据库,请勿在元数据库中对异常检测器相关的数据进行手动修改。
- 当前版本仅在主备切换、扩容和节点剔除的场景下,支持对同一集群的检测器配置参数的继承和保留,其他场景均不支持。
- 长事务检测器由长事务整体触发异常,但是计算异常个数的时候会实际计算长事务中超时之后执行的每个SQL。
- 对于网络异常检测器,当延迟超过1000ms时,网络延迟相关指标的采集会开始出现数据丢失现象,无法保证网络数据的完整性,可能会对网络检测器的检测结果产生影响,此时应该通过集群诊断的断网检测功能上报异常。
- 当前的异常检测器有部分检测项和智能巡检功能的某些检测项比较相似,如:CPU使用率、磁盘使用率、内存使用率、磁盘I/O使用率和线程池使用率检测等。由于智能巡检的设计目的和时间跨度与异常检测在设计上有所不同,检测阈值和条件也有所区别,所以某些相似检测项可能出现不一致的结果,这些属于正常现象。
- 会话内存上下文指标pg_session_memory_detail_rate和共享内存上下文指标pg_shared_memory_detail_rate的超时时长为10秒,在查询内存视图耗时很长的情况下,指标所标注的时间会相应滞后。
- 延迟和丢包率检测是通过并发多个ping命令检测起点到终点之间的连通性,通过多个ping命令返回的平均延迟和成功率来采集数据。
openGauss 2025-06-07 22:42:34