GaussDB-Anomaly detection-使用指导

GaussDB-Anomaly detection-使用指导

假设指标采集系统运行正常,并且用户已经初始化了配置文件目录confpath,则可以通过下述命令实现本特性的功能:

异常检测功能

仅启动异常检测功能:
gs_dbmind service start --conf confpath --only-run anomaly_detection
 
对于某一指标,在全部节点上,从timestamps1到timestamps2时间段内的数据进行概览:
gs_dbmind component anomaly_detection --conf confpath --action overview --metric metric_name --start-time timestamps1 --end-time timestamps2
 
对于某一指标,在特定节点上,从timestamps1到timestamps2时间段内的数据进行概览:
gs_dbmind component anomaly_detection --conf confpath --action overview --metric metric_name --start-time timestamps1 --end-time timestamps2 --host ip_address
 
对于某一指标,在全部节点上,从timestamps1到timestamps2时间段内的数据,以特定异常检测方式进行概览:
gs_dbmind component anomaly_detection --conf confpath --action overview --metric metric_name --start-time timestamps1 --end-time timestamps2 --anomaly anomaly_type
 
对于某一指标,在特定节点,从timestamps1到timestamps2时间段内的数据,以特定异常检测方式进行概览:
gs_dbmind component anomaly_detection --conf confpath --action overview --metric metric_name --start-time timestamps1 --end-time timestamps2 --host ip_address --anomaly anomaly_type
 
对于某一指标,在特定节点,从timestamps1到timestamps2时间段内的数据,以特定异常检测方式进行可视化展示:
gs_dbmind component anomaly_detection --conf confpath --action plot --metric metric_name --start-time timestamps1 --end-time timestamps2 --host ip_address --anomaly anomaly_type
 

运行异常诊断后台任务:

参考Slow Query Diagnosis中的方法,其对应定时任务为: anomaly_detection
 

指标异常分析功能

指标异常根因分析接口调用:
curl -X 'GET' http://127.0.0.1:8080/v1/api/app/metric-diagnosis/?metric_name=os_cpu_user_usage&metric_filter={"from_instance":"127.0.0.1","from_job":"node_exporter","instance":"127.0.0.1:8181","job":"reprocessing_exporter"}&alarm_cause=["high_cpu_usage"]&start=1691482728000&end=1691482728000 -H 'accept: application/json' -H 'Content-Type: application/json' -H "Authorization: bearer xxx"
 

如果使用HTTPS协议,则查询示例为:

curl -X 'GET' 'https://127.0.0.1:8080/v1/api/app/metric-diagnosis/?metric_name=os_cpu_user_usage&metric_filter={"from_instance":"127.0.0.1","from_job":"node_exporter","instance":"127.0.0.1:8181","job":"reprocessing_exporter"}&alarm_cause=["high_cpu_usage"]&start=1691482728000&end=1691482728000' -H 'accept: application/json' -H 'Content-Type: application/json' -H "Authorization: bearer xxx" --cacert xx.crt --key xx.key --cert xx.crt
 

返回结果格式参考:

{"data":{[{'reason1': 0.0, 'reason2': 1.0}, 'conclusion', 'advice']},"success":true}
 
停止已启动的服务:
gs_dbmind service stop --conf confpath
 

指标异常分析支持的场景详细情况如下:

  • 场景1:用户CPU使用率异常

    异常判断条件:用户CPU使用率10分钟内持续高于80%

    可能的异常根因:

    • 业务压力增大导致

      现象:TPS、网络读写、CPU和内存基本存在一定程度的上涨

      分析:通过与相关指标进行相关性比对

      建议:根据业务量评估CPU、内存等资源是否满足业务需求,是否需要扩容

    • iowait延时高导致

      现象:磁盘的读时延和写时延变长

      建议:增加IO吞吐量,排查可以降低IO的进程

  • 场景2:线程池使用率异常

    异常判断条件:默认规则线程池使用率10分钟内持续高于80%

    可能的异常根因:

    • 磁盘读写时延过高导致

      现象:磁盘读写时延增高,导致线程池使用率超过配置的阈值

      分析:查看产生报警的节点的数据盘每次读写时间的相关性

      建议:若发现磁盘读写时延频繁过高或者有明显劣化趋势,则继续定位是否磁盘硬件故障

    • 慢SQL导致

      现象:期间有明显的statement_responsetime_percentile_p95与statement_responsetime_percentile_p80增高

      分析:查看产生报警的节点的数据盘每次读写时间的相关性

      建议:如果statement_responsetime_percentile_p95与statement_responsetime_percentile_p80持续高,CPU使用率也一直保持很高,线程池使用率反复超过阈值,没有恢复迹象,则需要联系相关人员进行进一步定位分析

  • 场景3:动态内存使用率异常

    异常判断标准:系统内存超过阈值(默认10分钟连续超过80%),再进行动态内存使用率异常分析

    可能的异常根因:

    • 会话数上涨导致

      现象:在线会话数量指标同时上涨

      分析:查看同一时间段内会话数量和内存上涨之间的关系,通过皮尔逊计算相关系数,如果绝对值超过阈值的指标会被认为是相关异常

      建议:停止变更

    • 动态内存泄露导致

      现象:动态内存持续上涨

      分析:查看内存占用较大的上下文数量,如未发生很大变化则可能是内存泄露

      建议:通过pg_terminate_session终止会话或重启DN进程

  • 场景4:共享内存使用率异常

    异常判断标准:系统内存超过阈值(默认10分钟连续超过80%),再进行共享内存使用率异常分析

    可能的异常根因:

    • 未落盘脏页数过高导致

      现象:INSERT或UPDATE操作比例突然增大

      分析:分析INSERT或UPDATE操作比例突然增大与共享内存的相关性,通过皮尔逊计算相关系数,如果绝对值超过阈值的指标会被认为是相关异常

      建议:考虑降低pagewriter_sleep参数,加速脏页落盘的速度;考虑降低dirty_page_percent_max参数,降低刷页阈值上限

    • 共享内存泄露导致

      现象:共享内存持续上涨

      分析:查看系统内存占用,确认是否有除了gaussdb进程外占用大量内存的进程

      建议:手动清理,ipcrm -m shmid(此命令操作危险,请谨慎操作。)

  • 场景5:磁盘空间占用高异常

    异常判断标准:磁盘空间占用超过阈值(默认80%)

    可能的异常根因:

    • 数据库表空间膨胀导致

      现象:数据库磁盘占用快速上升

      分析:分析INSERT或UPDATE操作比例和磁盘IO读写来确定是否脏数据增加过快

      建议:临时情况,无需处理

  • 场景6:磁盘IO读取时延异常

    异常判断标准:磁盘IO使用率超过阈值(默认80%)

    可能的异常根因:

    • 数据磁盘读写IO使用率超阈值导致

      现象:数据磁盘读写IO使用率接近100%

      分析:分析数据磁盘读写IO使用率和时延之间的关系

      建议:降低IO压力,提高磁盘的IO限制

  • 场景7:扫描攻击

    异常判断标准:SQL执行错误率和用户越权率加权得分超过阈值(默认阈值:提示0.2,告警0.6,严重0.8)

    可能的异常根因:
    • SQL执行错误率和用户越权率增高导致

      现象:SQL执行错误率和用户越权率增高

      分析:用户使用自动化工具扫描目标网络或系统的漏洞,利用这些漏洞获取未经授权的访问权限,窃取敏感数据或破坏系统目标

      建议:及时更新数据库软件和安全补丁,以修复已知漏洞,减少攻击面

  • 场景8:暴力登录

    异常判断标准:用户无效登录率和用户锁定率指标加权得分超过阈值(默认阈值:提示0.1,告警0.3,严重0.4)

    可能的异常根因:

    • 用户无效登录率和用户锁定率增高导致

      现象:用户无效登录率和用户锁定率增高

      分析:攻击者猜测用户名和密码进行暴力登录,导致账户锁定及其他拒绝服务问题

      建议:根据告警信息,及时检查登录日志、采取相应措施

  • 场景9:违规操作
  • 异常判断标准:用户越权率指标超过阈值(默认阈值:提示0.2,告警0.6,严重0.8)

    可能的异常根因:

    • 用户越权率增高导致

      现象:用户越权率增高

      分析:攻击者使用用户凭证进行违规操作

      建议:对于敏感数据,限制访问权限。

其中,场景7~9的约束如下:

  • 用户需有Monitor admin和Audit admin权限,如果没有Audit admin权限,会导致审计指标数据全为0,导致诊断结果不可用。
  • 需要开启audit_enabled、audit_log_logout、audit_user_locked和audit_user_violation参数。
  • 审计总开关GUC参数audit_enabled支持动态加载。在数据库运行期间修改该配置项的值会立即生效,无需重启数据库。默认值为on,表示开启审计功能。
  • 审计项audit_login_logout:默认值为7,表示开启用户登录、退出的审计功能。设置为0表示关闭用户登录、退出的审计功能。
  • 审计项audit_user_locked:默认值为1,表示开启审计用户锁定和解锁功能。
  • 审计项audit_user_violation:默认值为0,表示关闭用户越权操作审计功能。通过命令 gs_guc reload -Z datanode -N all -I all -c "audit_user_violation=1"开启
  • 如无开启审计相关参数,只能处理扫描攻击场景。

亚健康诊断功能

亚健康状态是系统介于健康状态和故障状态之间的一种状态,系统仍在运行且功能正常但处于降级模式的一种情况,它的存在会造成系统性能严重低于预期。

亚健康诊断支持的场景如下:

  • 场景1:潜在慢盘监测

    DBMind默认初始化"slow_disk_detector"检测器,在每一次触发异常检测定时任务时对潜在慢盘进行监测。

    • 现象:“慢盘”现象普遍存在于存储架构之中,由于硬盘体质或者频繁读写的原因,部分硬盘会出现性能故障,IO负载过高等情况进而导致延时变大,读写变慢的现象。
    • 检测逻辑:在最近的过去7天~30天(收集的数据小于7天不进行检测),其磁盘IO平均读写时间长期在30ms以上并呈现出上升趋势,则认为其发生潜在慢盘。
  • 场景2:内存泄漏监测
    DBMind默认初始化"mem_leak_detector"检测器,在每一次触发异常检测定时任务时对内存泄漏进行监测。
    • 现象:程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。内存泄漏缺陷具有隐蔽性、积累性的特征,比其他内存非法访问错误更难检测。
    • 检测逻辑:最近的过去7天~30天(收集的数据小于7天不进行检测),其内存占用呈现出上升趋势,则认为其发生内存泄漏。
  • 场景3:锁冲突监测
    DBMind默认初始化"deadlock_detector"检测器,在每一次触发异常检测定时任务时对锁冲突进行监测。
    • 现象:当发生所冲突时,日志中会记录锁冲突的详细信息。
    • 检测逻辑:当内核日志记录到死锁日志时,则认为其发生锁冲突,并对死锁信息进行收集。
  • 在输入anomaly detection的参数时,start-time设置时间至少要早于end-time设置时间30秒以上。
  • 异常检测功能依赖于异常检测器,可以通过异常检测器的查询接口/v1/api/app/anomaly-detection/detectors/{name}查看当前已添加的全部异常检测器。
  • 添加检测器或更改检测器参数会将检测器状态变为启用。
  • 对于初始化时默认的长期指标检测器(如slow_disk_detector和mem_leak_detector),其检测器的监测时间窗口长度是固定的,不支持修改,对于其duration参数的修改是无效的。
  • 对于长期指标检测器,当收集到的数据低于一个星期时,不会进行检测。当数据已经长达一小时没有更新时,不会进行检测。
  • 异常检测器的落盘存储依赖于元数据库,请勿在元数据库中对异常检测器进行手动修改。
  • 当前版本仅支持,在主备切换、扩容和剔除节点的场景下,同一集群的检测器配置参数会被继承与保留,其他场景均不支持。
 
posted @ 2024-11-25 11:31  jerrywang1983  阅读(21)  评论(0)    收藏  举报