GaussDB-概述
GaussDB-概述
在现网业务中需要定期对数据库实例进行巡检并输出健康报告。DBMind构建了20+个巡检项,包括硬件状态、实例状态、数据库资源、数据库性能与诊断优化等类别。对其中关键资源指标趋势进行风险判断,避免不易发现的潜在问题影响实例健康。同时,支持生成日报、周报、月报供用户查看,并基于当前巡检项情况给出健康评分。支持用户对巡检项自定义设置告警阈值,方便用户根据业务特性进行调整,避免无意义告警。
- 月报与周报生成基于日报:如果未构建日报,则无法生成周报与月报;当日报数量不满足连续7天时,无法生成这7天对应的周报;当日报数量不满足连续14天以上时,无法生成对应的月报。此外,周报和月报的生成基于实例,比如出现实例IP和port的变化,会导致周报/月报无法生成;比如节点实例被删除,会导致周报/月报无法生成。采用定时方式生成周报和月报时,建议控制并发量,避免影响实时任务。配置文件中需要将实例的ip映射关系写到ip_map中,否则无法保证巡检结果的实例为管理IP。
- 周报和月报仅支持所有巡检项的巡检,不支持部分巡检项的拼接;因此周报和月报的自定义阈值需要由前端传入,规则与实时巡检等一致,没有传入的巡检项默认不进行告警(除了部分由前端控制的巡检项,见11.3.8.2-使用指导)
- 调用巡检接口时需要传递实例,该实例需要为集群主节点实例,否则在节点出现异常时无法返回所有节点的巡检结果。
- 智能巡检中db_size、buffer_hit_rate、db_tmp_file、db_deadlock、db_transaction等巡检项仅展示主节点的数据库结果,如果出现主备切换等主节点切换的情况,可能出现结果跳变(不同节点的结果拼接)。
- 智能巡检中db_size、buffer_hit_rate、db_transaction、db_tmp_file、db_deadlock等巡检项仅展示主节点的数据库结果;user_login_out、db_latency、thread_pool等巡检项展示所有节点的结果;xlog_accumulate巡检项展示所有节点的结果。
- log_error_check和core_dump两个巡检项防止遗漏关键信息,在实时巡检时仅支持45小时内数据;其他巡检项不能超过TSDB数据存储范围。
|
巡检类 |
巡检项 |
巡检字段 |
分数权重 |
|---|---|---|---|
|
系统资源 system_resource |
CPU使用率 |
os_cpu_usage |
0.06 |
|
系统磁盘占用率 |
os_disk_usage |
0.06 |
|
|
内存使用率 |
os_mem_usage |
0.06 |
|
|
磁盘IO使用率 |
os_disk_ioutils |
0.06 |
|
|
网络状况 |
network_packet_loss |
0.06 |
|
|
实例状态 instance_status |
组件异常 |
component_error |
0.05 |
|
数据库资源 database_resource |
数据库目录占用率 |
data_directory |
0.04 |
|
数据库日志目录占用率 |
log_directory |
0.04 |
|
|
数据库大小 |
db_size |
0 |
|
|
数据库性能 database_performance |
Buffer命中率 |
buffer_hit_rate |
0.03 |
|
用户登录登出次数 |
user_login_out |
0 |
|
|
活跃Session率 |
active_session_rate |
0.03 |
|
|
日志异常检查 |
log_error_check |
0.03 |
|
|
线程池占用率 |
thread_pool |
0.03 |
|
|
数据库时延 |
db_latency |
0.08 |
|
|
数据库事务 |
db_transaction |
0 |
|
|
数据库临时文件大小 |
db_tmp_file |
0 |
|
|
数据库执行语句 |
db_exec_statement |
0 |
|
|
数据库死锁 |
db_deadlock |
0.03 |
|
|
数据库TPS性能 |
db_tps |
0 |
|
|
数据库Top Query |
db_top_query |
0 |
|
|
长事务 |
long_transaction |
0.05 |
|
|
xlog堆积 |
xlog_accumulate |
0.05 |
|
|
oldestXmin长时间未推进 |
xmin_stuck |
0.05 |
|
|
诊断优化 diagnosis_optimization |
Core dump |
core_dump |
0.04 |
|
动态内存 |
dynamic_memory |
0.04 |
|
|
程序内存 |
process_memory |
0.04 |
|
|
其他内存 |
other_memory |
0.03 |
|
|
GUC参数 |
guc_params |
0.04 |
各巡检项实现细节与告警设置
- 系统资源
- CPU使用率:获取TSDB中的“os_cpu_user_usage”和“os_cpu_iowait_usage”两个指标。
- 对于os_cpu_user_usage,观测是否持续上升,若是则进行告警;同时,观测数值是否大于0.7,若超出阈值,则进行告警;最后,进行趋势预测,判断未来24小时数值是否大于0.7,若超出阈值,则进行告警。
- 对于os_cpu_iowait_usage,当发现持续上升时会进行告警,当数值大于0.3时,进行告警
- 系统磁盘占用率:获取TSDB中的“os_disk_usage”指标,观测其中系统盘(mount_point='/')的磁盘使用率,当数值大于0.8时,进行告警。
- 内存使用率:获取TSDB中的“os_mem_usage”指标,当发现持续上升时会进行告警;当数值大于0.7时,进行告警;最后,进行趋势预测,如果判断未来24小时数值大于0.8,进行告警。
- 磁盘IO使用率:获取TSDB中的“os_disk_ioutils”指标,当数值大于0.8时,进行告警。
- 网络状况:获取TSDB中的“gaussdb_network_packet_loss”指标,得出数据库节点间的网络连接状况,当丢包率大于0.05时,进行告警。
- CPU使用率:获取TSDB中的“os_cpu_user_usage”和“os_cpu_iowait_usage”两个指标。
- 实例状态
- 组件异常:根据instance从元数据库中获取节点的状态信息,得出时间范围内当前集群中CN和DN的状态,当出现异常状态(即值不为-1)时,进行告警。
- 数据库资源
- 数据库目录占用率:获取TSDB中的“pg_node_info_uptime”指标,解析出各个数据库实例的数据目录,同时获取“gaussdb_progress_cpu_usage”指标,匹配判断是否存在change_root,存在则组合成正确的目录路径,然后获取“os_disk_usage”指标,匹配判断对应数据目录的占用率,当发现持续上升时,进行告警;当数值大于0.8时,进行告警;最后,进行趋势预测,如果判断未来24小时数值大于0.8,进行告警;判断文件系统是否有误,不匹配则进行告警。
- 数据库日志目录占用率:获取TSDB中的“pg_node_info_uptime”指标,然后解析出各个数据库实例的日志目录,同时获取“gaussdb_progress_cpu_usage”指标,匹配判断是否存在change_root,存在则组合成正确的目录路径,,然后获取“os_disk_usage”指标,匹配判断对应日志目录的占用率,当发现持续上升时会进行告警,当数值大于0.8时,同样进行告警,再进行趋势预测,如果判断未来24小时数值大于0.8,也会进行告警,最后还会判断文件系统是否有误,不匹配则进行告警
- 数据库大小:获取TSDB中的“pg_database_size_bytes”指标,获取所有数据库的大小并进行记录,用于前端进行趋势展示。暂无告警。
- 数据库性能
- Buffer命中率:获取TSDB中的“pg_db_blks_access”指标,当数值小于0.9时,进行告警。
- 用户登录登出次数:获取TSDB中的“gaussdb_user_login”和“gaussdb_user_logout”两个指标,获取1分钟内平均每秒用户登录/登出次数,用于前端进行趋势展示。暂无告警。
- 活跃Session率:获取TSDB中的活跃会话数gaussdb_active_connection和总会话数gaussdb_total_connection指标,活跃session率即为gaussdb_active_connection / gaussdb_total_connection,当其比值小于0.8时,进行告警。
- 日志异常检查:获取TSDB中“gaussdb_log_*”的指标,统计每种日志错误出现的次数并进行相加,如果出现日志异常,则将日志异常的出现次数返回前端,进行告警。
- 线程池占用率:获取TSDB中的“pg_thread_pool_rate”指标,当发现持续上升时会进行告警,当数值小于0.9时,进行告警。
- 数据库时延:获取TSDB中的“statement_responsetime_percentile_p95”和“statement_responsetime_percentile_p80”两个指标,当发现持续上升时会进行告警。
- 数据库事务:获取TSDB中的“pg_db_xact_commit”和“pg_db_xact_rollback”两个指标,获取业务中提交和回滚的次数,用于前端进行趋势展示。暂无告警。
- 数据库临时文件大小:获取TSDB中的“pg_db_temp_files”指标,获取数据库临时文件的大小,用于前端进行趋势展示。暂无告警。
- 数据库执行语句:获取TSDB中的“pg_sql_count_select”、“pg_sql_count_update”、“pg_sql_count_insert”和“pg_sql_count_delete”四个指标,获取数据库中select、update、insert、delete的执行次数,用于前端进行趋势展示。暂无告警。
- 数据库死锁:获取TSDB中的“pg_db_deadlocks”指标,获取数据库中出现的死锁情况,当死锁数不为0时,表示数据库出现死锁。数值表示死锁数量。暂无告警。
- 数据库TPS性能:获取TSDB中的“gaussdb_qps_by_instance”和“qps”两个指标,获取数据库的QPS和TPS信息,用于前端进行趋势展示。暂无告警。
- 数据库Top Query:通过执行SQL语句从dbe_perf.statement查询出现调用次数最多的TopK个查询,用于前端展示。当前K为10。暂无告警。
- 长事务:通过执行SQL语句从pg_catalog.pg_stat_activity查询超过12小时未结束的活跃事务,当返回结果列表的长度大于0时,表示存在长事务,进行告警。
- xlog堆积:获取TSDB中的“gaussdb_xlog_count”指标,获取xlog目录下的文件数量,当数量大于3000时,进行告警。
- oldestXmin长时间未推进:获取TSDB中的“oldestxmin_increase”指标,当oldestxmin超过12小时未出现变化,则表示长时间为推进,此时巡检返回数据中数值为0,进行告警。
- 诊断优化
- Core dump:获取TSDB中的“gaussdb_log_ffic”指标,当返回值中count大于0时,表示出现core dump,进行告警。
- 动态内存:获取TSDB中的“pg_total_memory_detail_mbytes”指标,计算其中“dynamic_used_memory”相对于“max_dynamic_memory”的比例,当数值大于0.8时,进行告警;计算其中“dynamic_used_shrctx”相对于“max_dynamic_memory”的比例,当数值大于0.8时,同样进行告警。
- 程序内存:获取TSDB中的“pg_total_memory_detail_mbytes”指标,计算其中“process_used_memory”相对于“max_process_memory”的比例,当数值大于0.8时,进行告警。
- 其他内存:获取TSDB中的“pg_total_memory_detail_mbytes”指标,获取其中“other_used_memory”的值,当发现持续上升时会进行告警,当超过20G时,进行告警。
- GUC参数:获取TSDB中的“pg_total_memory_detail_mbytes”和“pg_settings_setting”指标,获取其中“max_process_memory”、“shared_buffers”和“work_mem”的值,将当前的值与DBMind根据workload推算出的最优参数进行对比,如果当前参数与最优参数相差大,结果中的warning字段为true,进行告警。
健康评分根据各巡检项的重要性权重以及异常程度来给出评分,最后汇总成当前实例的健康评分,具体计算公式如下:

上述:

Si = 0 or 1(其中0代表巡检项异常,1代表正常)。
此外,结论中会提供TOP3列表,TOP3指的是异常情况最严重的三个巡检项,通过统计各个巡检项的异常数量,再结合巡检项的权重进行排序,取前3个作为TOP3列表,如果没有异常,则为空。
支持的巡检自定义阈值
- √和数字表示该巡检项已设置默认告警阈值
- -表示该巡检项支持设置对应告警类型
- ×表示该巡检项不支持设置对应告警类型
|
巡检项 |
巡检项 |
数值范围 |
异常类型 |
判断标准 |
|||
|
超过阈值 |
预测超过阈值 |
持续上升 |
文件类型有误 |
||||
|
CPU使用率 |
os_cpu_usage |
[0, 1] |
>0.7 |
>0.7 |
√ |
× |
任意异常出现则告警 |
|
磁盘IO使用率 |
os_disk_ioutils |
[0, 1] |
>0.8 |
- |
- |
× |
任意异常出现则告警 |
|
系统磁盘占用率 |
os_disk_usage |
[0, 1] |
>0.8 |
- |
- |
× |
任意异常出现则告警 |
|
内存使用率 |
os_mem_usage |
[0, 1] |
>0.7 |
>0.8 |
√ |
× |
任意异常出现则告警 |
|
网络状况 |
network_packet_loss |
[0, 1] |
>0.05 |
- |
× |
× |
任意异常出现则告警 |
|
组件异常 |
component_error |
× |
× |
× |
× |
× |
任意异常出现则告警 |
|
数据库目录占用率 |
data_directory |
[0, 1] |
>0.8 |
>0.8 |
- |
√ |
任意异常出现则告警 |
|
数据库日志目录占用率 |
log_directory |
[0, 1] |
>0.8 |
>0.8 |
- |
√ |
任意异常出现则告警 |
|
数据库大小 |
db_size |
[0, ∞) |
- |
- |
- |
× |
暂无告警 |
|
Buffer命中率 |
buffer_hit_rate |
[0, 1] |
<0.9 |
- |
× |
× |
任意异常出现则告警 |
|
用户登录登出次数 |
user_login_out |
[0, ∞) |
- |
- |
- |
× |
暂无告警 |
|
活跃Session率 |
active_session_rate |
[0, 1] |
<0.8 |
- |
× |
× |
任意异常出现则告警 |
|
日志异常检查 |
log_error_check |
× |
× |
× |
× |
× |
存在则告警 |
|
线程池占用率 |
thread_pool |
[0, 1] |
>0.9 |
- |
√ |
× |
任意异常出现则告警 |
|
数据库时延 |
db_latency |
[0, ∞) |
- |
- |
√ |
× |
任意异常出现则告警 |
|
数据库事务 |
db_transaction |
[0, ∞) |
- |
- |
- |
× |
暂无告警 |
|
数据库临时文件大小 |
db_tmp_file |
[0, ∞) |
- |
- |
- |
× |
暂无告警 |
|
数据库执行语句 |
db_exec_statement |
[0, ∞) |
- |
- |
× |
× |
暂无告警 |
|
数据库死锁 |
db_deadlock |
[0, ∞) |
- |
- |
- |
× |
暂无告警 |
|
数据库TPS性能 |
db_tps |
[0, ∞) |
- |
- |
- |
× |
暂无告警 |
|
数据库Top Query |
db_top_query |
× |
× |
× |
× |
× |
暂无告警 |
|
长事务 |
long_transaction |
× |
× |
× |
× |
× |
存在则告警 |
|
oldestXmin长时间未推进 |
xmin_stuck |
[0, ∞) |
× |
× |
× |
× |
任意异常出现则告警 |
|
xlog堆积 |
xlog_accumulate |
[0, ∞) |
>3000 |
- |
- |
× |
任意异常出现则告警 |
|
Core dump |
core_dump |
× |
× |
× |
× |
× |
存在则告警 |
|
动态内存 |
dynamic_memory |
[0, 1] |
>0.8 |
- |
- |
× |
任意异常出现则告警 |
|
程序内存 |
process_memory |
[0, 1] |
>0.8 |
- |
- |
× |
任意异常出现则告警 |
|
其他内存 |
other_memory |
[0, ∞) |
>20*1024 |
- |
√ |
× |
任意异常出现则告警 |
|
GUC参数 |
guc_params |
× |
× |
× |
× |
× |
warning中存在值则告警 |
- 持续上升和预测超过阈值两类告警涉及检测算法,会占用DBMind性能,配置时减少开启的数量,避免影响服务性能以及返回时间等。
- 预测超过阈值需要设置预测的时间范围,以分钟为单位,设置范围(0, 48 * 60]。建议设置的时间长度小于数据的时间长度。

浙公网安备 33010602011771号