Skip to content

KingBaseES 监控指标

监控指标是KingBaseES数据库运维的重要组成部分,通过监控关键指标,可以实时了解数据库的运行状态,及时发现和解决问题,优化数据库性能,保障业务连续性。本文将详细介绍KingBaseES的核心监控指标和监控最佳实践。

监控指标概述

监控指标的概念

监控指标是用于衡量数据库运行状态的量化数据,包括性能、资源、连接、复制、锁等多个方面。监控指标可以帮助DBA:

  • 实时了解数据库运行状态
  • 及时发现性能瓶颈和问题
  • 优化数据库配置和查询
  • 预测资源需求和规划扩容
  • 保障数据库的稳定性和可靠性

监控指标的重要性

  • 提前预警:在问题影响业务之前发现并解决
  • 性能优化:识别性能瓶颈,优化数据库性能
  • 容量规划:根据指标趋势规划资源扩容
  • 故障定位:快速定位和解决故障
  • 合规要求:满足监管和合规要求

监控指标的分类

指标类型主要指标监控目的
性能指标TPS、QPS、响应时间、执行计划衡量数据库性能
资源指标CPU、内存、磁盘IO、网络IO监控系统资源使用情况
连接指标连接数、活跃连接数、连接等待监控数据库连接状态
复制指标复制延迟、复制状态、WAL发送/接收速率监控主备复制状态
锁指标锁等待、死锁、锁类型分布监控数据库锁状态
WAL指标WAL生成速率、WAL归档状态、检查点频率监控WAL日志状态
备份指标备份状态、备份大小、备份时间监控备份状态
空间指标数据文件大小、表空间使用率、临时空间监控磁盘空间使用情况

核心监控指标

1. 性能指标

TPS (Transactions Per Second)

  • 描述:每秒处理的事务数
  • 监控SQLSELECT xact_commit + xact_rollback FROM pg_stat_database WHERE datname = 'test';
  • 正常范围:根据业务需求而定,一般OLTP系统在几百到几万之间
  • 告警阈值:低于历史平均值的50%或高于历史峰值的200%

QPS (Queries Per Second)

  • 描述:每秒处理的查询数
  • 监控SQLSELECT tup_returned + tup_fetched + tup_inserted + tup_updated + tup_deleted FROM pg_stat_database WHERE datname = 'test';
  • 正常范围:根据业务需求而定,一般OLTP系统在几千到几十万之间
  • 告警阈值:低于历史平均值的50%或高于历史峰值的200%

响应时间

  • 描述:SQL查询的平均响应时间
  • 监控工具:慢查询日志、pg_stat_statements
  • 正常范围:根据业务需求而定,一般OLTP系统在毫秒级别
  • 告警阈值:平均响应时间超过1秒

慢查询数量

  • 描述:每秒执行的慢查询数量
  • 监控SQLSELECT count(*) FROM pg_stat_statements WHERE mean_exec_time > 1000;
  • 正常范围:0或个位数
  • 告警阈值:每秒慢查询数量超过10个

2. 资源指标

CPU使用率

  • 描述:数据库进程的CPU使用率
  • 监控工具:top、vmstat、Prometheus node_exporter
  • 正常范围:低于80%
  • 告警阈值:连续5分钟超过90%

内存使用率

  • 描述:数据库进程的内存使用率
  • 监控工具:free、top、Prometheus node_exporter
  • 监控SQLSELECT pg_total_relation_size(oid) FROM pg_class WHERE relname = 'table_name';
  • 正常范围:根据系统配置而定,一般低于80%
  • 告警阈值:连续5分钟超过90%

磁盘IO使用率

  • 描述:数据库所在磁盘的IO使用率
  • 监控工具:iostat、iotop、Prometheus node_exporter
  • 正常范围:低于80%
  • 告警阈值:连续5分钟超过90%

磁盘空间使用率

  • 描述:数据库所在磁盘的空间使用率
  • 监控工具:df、Prometheus node_exporter
  • 监控SQLSELECT pg_database_size(datname) FROM pg_database WHERE datname = 'test';
  • 正常范围:低于70%
  • 告警阈值:超过85%

3. 连接指标

总连接数

  • 描述:当前数据库的总连接数
  • 监控SQLSELECT count(*) FROM pg_stat_activity;
  • 正常范围:低于max_connections的80%
  • 告警阈值:超过max_connections的90%

活跃连接数

  • 描述:当前数据库的活跃连接数
  • 监控SQLSELECT count(*) FROM pg_stat_activity WHERE state = 'active';
  • 正常范围:根据系统配置而定,一般低于总连接数的50%
  • 告警阈值:连续5分钟超过总连接数的70%

连接等待数

  • 描述:等待连接的请求数
  • 监控SQLSELECT count(*) FROM pg_stat_activity WHERE wait_event IS NOT NULL;
  • 正常范围:0或个位数
  • 告警阈值:连续5分钟超过10个

连接来源分布

  • 描述:连接来源IP的分布情况
  • 监控SQLSELECT client_addr, count(*) FROM pg_stat_activity GROUP BY client_addr;
  • 监控目的:识别异常连接来源

4. 复制指标

复制延迟

  • 描述:备库与主库之间的复制延迟(字节数)
  • 监控SQLSELECT pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) FROM pg_stat_replication;
  • 正常范围:根据业务需求而定,一般在几MB到几十MB之间
  • 告警阈值:超过100MB

复制状态

  • 描述:备库的复制状态
  • 监控SQLSELECT state FROM pg_stat_replication;
  • 正常范围:streaming
  • 告警阈值:状态异常或断开连接

WAL发送速率

  • 描述:主库发送WAL的速率(字节/秒)
  • 监控SQLSELECT pg_stat_get_wal_senders() AS wal_senders;
  • 监控工具:Prometheus postgres_exporter

WAL接收速率

  • 描述:备库接收WAL的速率(字节/秒)
  • 监控SQLSELECT pg_stat_get_wal_receiver() AS wal_receiver;
  • 监控工具:Prometheus postgres_exporter

5. 锁指标

锁等待数量

  • 描述:当前等待锁的查询数量
  • 监控SQLSELECT count(*) FROM pg_locks WHERE granted = false;
  • 正常范围:0或个位数
  • 告警阈值:连续5分钟超过10个

锁等待时间

  • 描述:锁等待的平均时间(毫秒)
  • 监控SQLSELECT avg(EXTRACT(EPOCH FROM (now() - query_start)) * 1000) FROM pg_stat_activity WHERE wait_event_type = 'Lock';
  • 正常范围:低于100毫秒
  • 告警阈值:平均等待时间超过1秒

死锁数量

  • 描述:每秒发生的死锁数量
  • 监控SQLSELECT deadlocks FROM pg_stat_database WHERE datname = 'test';
  • 正常范围:0
  • 告警阈值:死锁数量大于0

锁类型分布

  • 描述:不同类型锁的分布情况
  • 监控SQLSELECT mode, count(*) FROM pg_locks WHERE granted = true GROUP BY mode;
  • 监控目的:识别频繁出现的锁类型

6. WAL指标

WAL生成速率

  • 描述:每秒生成的WAL日志大小(字节/秒)
  • 监控SQLSELECT pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), pg_wal_lsn_make(0,0))) AS total_wal_size;
  • 监控工具:Prometheus postgres_exporter
  • 正常范围:根据业务需求而定,一般在几MB到几十MB之间

WAL归档状态

  • 描述:WAL归档是否正常
  • 监控SQLSELECT archive_mode, archive_command, last_archived_wal FROM pg_stat_archiver;
  • 正常范围:archive_mode = on,last_archived_wal不为空
  • 告警阈值:archive_mode = off或last_archived_wal为空

检查点频率

  • 描述:每秒执行的检查点次数
  • 监控SQLSELECT checkpoint_count FROM pg_stat_bgwriter;
  • 正常范围:根据checkpoint_timeout设置而定,一般每分钟1-2次
  • 告警阈值:每秒检查点次数超过5次

检查点耗时

  • 描述:检查点执行的平均时间(毫秒)
  • 监控SQLSELECT avg(EXTRACT(EPOCH FROM (checkpoint_end_time - checkpoint_start_time)) * 1000) FROM pg_stat_bgwriter;
  • 正常范围:低于checkpoint_timeout的10%
  • 告警阈值:检查点耗时超过checkpoint_timeout的50%

7. 备份指标

备份状态

  • 描述:最近一次备份的状态
  • 监控工具:sys_rman日志、备份监控脚本
  • 正常范围:备份成功
  • 告警阈值:备份失败或超过计划时间未执行

备份大小

  • 描述:备份文件的大小
  • 监控工具:ls命令、备份监控脚本
  • 监控目的:监控备份大小增长趋势

备份时间

  • 描述:备份执行的时间
  • 监控工具:备份监控脚本、sys_rman日志
  • 正常范围:根据数据量而定,一般在几小时以内
  • 告警阈值:备份时间超过预期时间的200%

备份成功率

  • 描述:备份成功的比例
  • 监控工具:备份监控脚本
  • 正常范围:100%
  • 告警阈值:备份成功率低于100%

8. 空间指标

数据文件大小

  • 描述:数据库数据文件的总大小
  • 监控SQLSELECT pg_size_pretty(pg_database_size('test'));
  • 监控目的:监控数据增长趋势

表空间使用率

  • 描述:各个表空间的使用率
  • 监控SQLSELECT spcname, pg_size_pretty(pg_tablespace_size(spcname)) FROM pg_tablespace;
  • 正常范围:低于80%
  • 告警阈值:超过90%

临时空间使用率

  • 描述:临时表空间的使用率
  • 监控SQLSELECT pg_size_pretty(pg_temp_tablespaces_size());
  • 正常范围:低于50%
  • 告警阈值:超过80%

大表列表

  • 描述:大小排名前10的表
  • 监控SQLSELECT relname, pg_size_pretty(pg_total_relation_size(oid)) FROM pg_class ORDER BY pg_total_relation_size(oid) DESC LIMIT 10;
  • 监控目的:识别需要优化的大表

监控工具

1. 内置工具

psql命令行工具

bash
# 查看数据库状态
psql -U system -d test -c "SELECT * FROM pg_stat_database;"

# 查看连接状态
psql -U system -d test -c "SELECT * FROM pg_stat_activity;"

# 查看复制状态
psql -U system -d test -c "SELECT * FROM pg_stat_replication;"

# 查看锁状态
psql -U system -d test -c "SELECT * FROM pg_locks;"

pg_stat_statements扩展

sql
-- 启用pg_stat_statements扩展
CREATE EXTENSION pg_stat_statements;

-- 查看慢查询
SELECT query, calls, total_time, mean_time, rows FROM pg_stat_statements ORDER BY mean_time DESC LIMIT 10;

pg_stat_monitor扩展

sql
-- 启用pg_stat_monitor扩展
CREATE EXTENSION pg_stat_monitor;

-- 查看监控数据
SELECT * FROM pg_stat_monitor();

2. 第三方工具

Prometheus + Grafana

  • Prometheus:收集和存储监控指标
  • Grafana:可视化展示监控指标
  • postgres_exporter:KingBaseES指标导出器
yaml
# prometheus.yml配置
scrape_configs:
  - job_name: 'kingbase'
    static_configs:
      - targets: ['kingbase_exporter:9187']

Zabbix

  • Zabbix Server:监控服务器
  • Zabbix Agent:安装在KingBaseES服务器上
  • KingBaseES模板:预定义的监控模板

Kingbase Enterprise Manager (KEM)

  • 图形化的KingBaseES监控管理工具
  • 支持实时监控和历史数据查询
  • 支持告警和报表功能
  • 支持集群监控

ELK Stack

  • Elasticsearch:存储和索引日志数据
  • Logstash:收集和处理日志数据
  • Kibana:可视化展示日志数据

3. 云监控服务

  • 阿里云云监控:支持KingBaseES监控
  • 腾讯云云监控:支持KingBaseES监控
  • 华为云云监控:支持KingBaseES监控
  • AWS CloudWatch:支持KingBaseES监控

监控最佳实践

1. 监控策略设计

分层监控

  • 基础监控:CPU、内存、磁盘IO、网络IO等系统资源
  • 数据库监控:连接、性能、复制、锁等数据库指标
  • 业务监控:TPS、QPS、响应时间等业务指标

监控频率

  • 系统资源:每10-30秒
  • 数据库指标:每5-15秒
  • 业务指标:每1-5秒
  • 历史数据:根据数据量和存储容量调整保留时间

监控范围

  • 所有生产环境的KingBaseES实例
  • 关键测试环境的KingBaseES实例
  • 主库和备库都需要监控

2. 告警规则设置

告警级别

级别描述处理时间
紧急直接影响业务,需要立即处理5分钟内响应,30分钟内解决
严重可能影响业务,需要尽快处理15分钟内响应,1小时内解决
警告潜在问题,需要关注1小时内响应,4小时内解决
提示信息性告警,用于监控无需立即处理,定期回顾

告警规则示例

yaml
# Prometheus告警规则
groups:
- name: kingbase_alerts
  rules:
  - alert: KingbaseDown
    expr: pg_up == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "KingBaseES 实例宕机"
      description: "{{ $labels.instance }} 上的KingBaseES实例已宕机超过5分钟"
  
  - alert: HighCPUUsage
    expr: (100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)) > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "高CPU使用率"
      description: "{{ $labels.instance }} 的CPU使用率超过80%"
  
  - alert: ReplicationLag
    expr: pg_stat_replication_replay_lag_seconds > 30
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "主从复制延迟"
      description: "{{ $labels.instance }} 的主从复制延迟超过30秒"

告警通知

  • 通知方式:邮件、短信、企业微信、钉钉、Slack等
  • 通知频率:避免重复通知,设置合理的通知间隔
  • 通知接收人:根据告警级别设置不同的接收人

3. 监控数据管理

数据保留策略

  • 实时数据:保留7-30天
  • 历史数据:保留3-12个月
  • 归档数据:保留1-7年

数据压缩

  • 对历史数据进行压缩存储
  • 使用列式数据库存储监控数据
  • 定期清理过期数据

数据备份

  • 定期备份监控数据
  • 确保监控数据的安全性和可用性

4. 监控系统集成

与CMDB集成

  • 将监控系统与CMDB集成,关联服务器和数据库信息
  • 便于快速定位和管理监控对象

与自动化系统集成

  • 与自动化脚本集成,实现自动故障处理
  • 与配置管理工具集成,实现配置自动调整

与日志系统集成

  • 将监控指标与日志数据关联,便于故障定位
  • 实现监控指标和日志的联合分析

版本差异(V8 R6 vs V8 R7)

V8 R6 监控指标

  • 监控指标相对有限
  • 缺乏部分高级监控指标
  • 监控工具支持较少
  • pg_stat_statements功能相对简单
  • 缺乏对云监控的原生支持

V8 R7 监控指标

  • 增强了监控指标的数量和种类
  • 新增了pg_stat_monitor扩展
  • 改进了pg_stat_statements功能
  • 增强了对第三方监控工具的支持
  • 支持云监控服务
  • 新增了更多的性能和资源监控指标
  • 改进了复制监控指标

常见问题(FAQ)

Q1:如何选择合适的监控指标?

A1:根据业务需求和数据库特点选择监控指标:

  • OLTP系统:重点监控TPS、QPS、响应时间、连接数、锁等待
  • OLAP系统:重点监控查询性能、磁盘IO、内存使用
  • 主备集群:重点监控复制延迟、复制状态、WAL归档

Q2:如何设置合理的告警阈值?

A2:

  • 根据历史数据确定基准值
  • 考虑业务需求和RTO/RPO目标
  • 分级别设置告警阈值
  • 定期调整和优化告警阈值

Q3:如何处理大量的监控数据?

A3:

  • 采用分层存储策略
  • 对历史数据进行压缩
  • 定期清理过期数据
  • 使用专门的时序数据库存储监控数据

Q4:如何实现监控的自动化?

A4:

  • 使用自动化监控工具
  • 编写监控脚本和告警脚本
  • 与自动化系统集成
  • 实现自动故障处理

Q5:如何验证监控系统的有效性?

A5:

  • 进行故障模拟测试
  • 定期检查监控数据的准确性
  • 验证告警规则的有效性
  • 评估监控系统的响应时间

总结

监控指标是KingBaseES数据库运维的重要组成部分,通过监控关键指标,可以实时了解数据库的运行状态,及时发现和解决问题,优化数据库性能,保障业务连续性。在实际监控中,应根据业务需求和数据库特点选择合适的监控指标,设置合理的告警阈值,采用分层监控策略,并与其他系统集成,实现全面、高效的监控体系。V8 R7版本相比V8 R6版本提供了更丰富的监控指标和更好的监控工具支持,建议在新部署时优先选择V8 R7版本。