1. 首页 > 国产数据库教程 > openGauss教程 > 正文

opengauss教程FG066-openGauss监控体系与指标详解生产实战

本文档详细介绍openGauss数据库监控体系与核心指标,包括监控架构设计、指标采集、告警配置等内容,风哥教程参考openGauss官方文档监控指南、性能调优指南等内容,适合DBA人员进行监控体系建设和指标分析时参考。

Part01-基础概念与理论知识

1.1 openGauss监控体系概念

openGauss监控体系组成:

  • 指标采集:从数据库和操作系统采集性能指标
  • 数据存储:存储历史监控数据用于趋势分析
  • 可视化:通过仪表盘展示监控数据
  • 告警:异常时及时通知相关人员

1.2 openGauss监控指标类型

openGauss监控指标主要分为以下几类:

# openGauss监控指标类型

1. 数据库性能指标
– QPS/TPS:每秒查询/事务数
– 连接数:活跃连接、空闲连接
– 缓存命中率:shared_buffers命中率
– 锁等待:锁等待事件和时长
– SQL执行时间:慢查询统计

2. 资源使用指标
– CPU使用率:数据库进程CPU使用
– 内存使用:shared_buffers、work_mem等
– 磁盘IO:读写IOPS、吞吐量
– 磁盘空间:数据文件、WAL、日志空间
– 网络:复制流量、连接数

3. 复制指标
– 复制延迟:主备数据延迟
– 复制状态:流复制连接状态
– WAL生成速率:WAL文件生成速度
– 复制槽状态:复制槽使用情况

4. 可用性指标
– 数据库状态:运行、停止、恢复中
– 连接可用性:端口监听状态
– 复制可用性:备库同步状态
– 响应时间:查询响应时间

5. 业务指标
– 业务QPS:业务相关查询量
– 错误率:SQL执行错误比例
– 慢查询比例:超过阈值的查询比例
– 事务成功率:事务提交成功比例

1.3 openGauss常用监控工具

openGauss常用监控工具:

# openGauss监控工具

1. 开源监控方案
– Prometheus + Grafana:时序数据库+可视化
– Zabbix:企业级监控平台
– Nagios:传统监控工具
– ELK Stack:日志分析平台

2. 商业监控方案
– 华为云CES:云监控服务
– 阿里云ARMS:应用实时监控
– DataDog:全栈监控平台
– New Relic:APM监控工具

3. openGauss自带工具
– gs_check:健康检查工具
– gs_collector:日志收集工具
– pg_stat_*视图:性能统计视图
– WDR报告:Workload Diagnosis Report

4. 常用监控视图
– pg_stat_activity:活动会话
– pg_stat_database:数据库统计
– pg_stat_replication:复制状态
– pg_stat_user_tables:表统计
– pg_stat_user_indexes:索引统计

工具对比:
工具 | 优点 | 缺点 | 适用场景
——————|——————-|——————-|———-
Prometheus | 开源、灵活 | 学习成本高 | 云原生环境
Zabbix | 功能全面 | 资源占用高 | 传统企业
华为云CES | 集成度高 | 费用较高 | 云上部署
gs_check | 开箱即用 | 功能有限 | 日常巡检

Part02-生产环境规划与建议

2.1 openGauss监控架构设计

监控架构设计:

# 监控架构设计

架构一:单机监控(测试环境)
+————+ +————+
| openGauss |—–>| Prometheus |
| 数据库 | | + Grafana |
+————+ +————+

架构二:分布式监控(生产环境)
+————+ +————+ +————+
| openGauss |—–>| Prometheus |—–>| Grafana |
| 集群 | | 集群 | | 展示 |
+————+ +————+ +————+
| | |
v v v
+————+ +————+ +————+
| Alertmanager| | 存储集群 | | 告警通知 |
+————+ +————+ +————+

架构三:云原生监控(K8s环境)
+————+ +————+ +————+
| openGauss |—–>| Prometheus |—–>| Grafana |
| Operator | | Operator | | Ingress |
+————+ +————+ +————+
| | |
v v v
+————+ +————+ +————+
| ServiceMonitor| | StatefulSet| | ConfigMap |风哥提示:
+————+ +————+ +————+

组件说明:
– Prometheus:时序数据库,负责指标采集和存储
– Grafana:可视化平台,负责仪表盘展示
– Alertmanager:告警管理,负责告警路由和通知
– Exporter:指标导出器,将openGauss指标转换为Prometheus格式

2.2 openGauss核心指标选择

核心监控指标:

# 核心监控指标

1. 数据库可用性指标(必须监控)
– pg_up:数据库是否运行
– pg_stat_activity_count:连接数
– pg_stat_replication_lag:复制延迟

2. 性能指标(关键监控)
– pg_stat_database_xact_commit:事务提交数
– pg_stat_database_xact_rollback:事务回滚数
– pg_stat_database_blks_hit:缓存命中块数
– pg_stat_database_blks_read:磁盘读取块数

3. 资源指标(重要监控)
– pg_database_size:数据库大小
– pg_stat_activity_max_tx_duration:最长事务时间
– pg_settings_shared_buffers:shared_buffers配置
学习交流加群风哥微信: itpux-com
4. 复制指标(主备环境)
– pg_stat_replication_pg_wal_lsn_diff:WAL差异
– pg_stat_replication_reply_time:复制响应时间
– pg_replication_slots_active:复制槽状态

# 指标采集频率建议
– 关键指标:10秒
– 重要指标:30秒
– 一般指标:60秒
– 趋势指标:300秒

2.3 openGauss告警策略设计

告警策略设计:

# 告警策略设计

1. 告警级别定义
– P0(紧急):数据库宕机、复制中断
– P1(严重):磁盘满、内存不足、复制延迟高
– P2(警告):连接数高、慢查询多、CPU高
– P3(提示):备份失败、统计信息过期

2. 告警规则示例
# 数据库宕机告警
– alert: OpenGaussDown
expr: pg_up == 0
for: 1m
labels:
severity: P0
annotations:
summary: “OpenGauss数据库宕机”
description: “数据库 {{ $labels.instance }} 已宕机超过1分钟”

# 复制延迟告警
– alert: ReplicationLagHigh
expr: pg_stat_replication_pg_wal_lsn_diff / 1024 / 1024 > 100
for: 5m
labels:
severity: P1学习交流加群风哥QQ113257174
annotations:
summary: “复制延迟过高”
description: “复制延迟超过100MB,当前值: {{ $value }}MB”

# 连接数告警
– alert: ConnectionCountHigh
expr: pg_stat_activity_count > 1500
for: 5m
labels:
severity: P2
annotations:
summary: “连接数过高”
description: “当前连接数: {{ $value }}”

3. 告警通知渠道
– 短信:P0、P1级别告警
– 邮件:所有级别告警
– 钉钉/企业微信:P0、P1、P2级别告警
– 电话:P0级别告警

4. 告警收敛策略
– 分组:按实例、按级别分组
– 抑制:高级别告警抑制低级别告警
– 静默:维护窗口期间静默告警
– 去重:相同告警在一定时间内只发送一次

Part03-生产环境项目实施方案

3.1 openGauss Prometheus监控部署

# Prometheus监控部署

# 步骤1:安装Prometheus
$ wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
$ tar -xzf prometheus-2.45.0.linux-amd64.tar.gz
$ mv prometheus-2.45.0.linux-amd64 /opt/prometheus更多视频教程www.fgedu.net.cn

# 步骤2:配置Prometheus
$ cat > /opt/prometheus/prometheus.yml << EOF global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: ['localhost:9093'] rule_files: - /opt/prometheus/rules/*.yml scrape_configs: - job_name: 'opengauss' static_configs: - targets: ['192.168.1.10:9187'] labels: instance: 'fgedu-primary' - targets: ['192.168.1.11:9187'] labels: instance: 'fgedu-standby' scrape_interval: 10s EOF # 步骤3:安装postgres_exporter $ wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.13.0/postgres_exporter-0.13.0.linux-amd64.tar.gz $ tar -xzf postgres_exporter-0.13.0.linux-amd64.tar.gz $ mv postgres_exporter-0.13.0.linux-amd64/postgres_exporter /usr/local/bin/ # 步骤4:配置postgres_exporter $ cat > /opt/prometheus/postgres_exporter.env << EOF DATA_SOURCE_NAME="postgresql://fgedu:fgedu_pass@192.168.1.10:5432/postgres?sslmode=disable" EOF # 步骤5:创建systemd服务 $ cat > /etc/systemd/system/postgres_exporter.service << EOF [Unit]更多学习教程公众号风哥教程itpux_com Description=Postgres Exporter After=network.target [Service] Type=simple User=opengauss EnvironmentFile=/opt/prometheus/postgres_exporter.env ExecStart=/usr/local/bin/postgres_exporter --web.listen-address=:9187 Restart=always [Install] WantedBy=multi-user.target EOF # 步骤6:启动服务 $ systemctl daemon-reload $ systemctl enable postgres_exporter $ systemctl start postgres_exporter # 步骤7:验证 $ curl http://192.168.1.10:9187/metrics | grep pg_up # HELP pg_up Whether the server is up # TYPE pg_up gauge pg_up 1 # 步骤8:启动Prometheus $ /opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml # 验证Prometheus # 访问 http://192.168.1.10:9090/targetsfrom DB视频:www.itpux.com # 确认opengauss任务状态为UP

3.2 openGauss Grafana仪表盘配置

# Grafana仪表盘配置

# 步骤1:安装Grafana
$ wget https://dl.grafana.com/oss/release/grafana-10.0.0.linux-amd64.tar.gz
$ tar -xzf grafana-10.0.0.linux-amd64.tar.gz
$ mv grafana-10.0.0 /opt/grafana

# 步骤2:启动Grafana
$ /opt/grafana/bin/grafana-server -homepath /opt/grafana

# 步骤3:配置数据源
# 访问 http://192.168.1.10:3000
# 用户名:admin,密码:admin
# Configuration -> Data Sources -> Add data source
# 选择Prometheus,URL: http://192.168.1.10:9090

# 步骤4:导入仪表盘
# Create -> Import
# 导入ID: 9628 (PostgreSQL Database)
# 或上传自定义仪表盘JSON

# 步骤5:自定义仪表盘
# openGauss核心监控仪表盘配置

{
“dashboard”: {
“title”: “openGauss监控仪表盘”,
“panels”: [
{
“title”: “数据库状态”,
“type”: “stat”,
“targets”: [
{
“expr”: “pg_up”,
“legendFormat”: “{{ instance }}”
}
]
},
{
“title”: “QPS”,
“type”: “graph”,
“targets”: [
{
“expr”: “rate(pg_stat_database_xact_commit[1m]) + rate(pg_stat_database_xact_rollback[1m])”,
“legendFormat”: “{{ datname }}”
}
]
},
{
“title”: “连接数”,
“type”: “graph”,
“targets”: [
{
“expr”: “pg_stat_activity_count”,
“legendFormat”: “{{ instance }}”
}
]
},
{
“title”: “复制延迟”,
“type”: “graph”,
“targets”: [
{
“expr”: “pg_stat_replication_pg_wal_lsn_diff / 1024 / 1024”,
“legendFormat”: “{{ application_name }}”
}
]
},
{
“title”: “缓存命中率”,
“type”: “gauge”,
“targets”: [
{
“expr”: “pg_stat_database_blks_hit / (pg_stat_database_blks_hit + pg_stat_database_blks_read) * 100”,
“legendFormat”: “{{ datname }}”
}
]
},
{
“title”: “数据库大小”,
“type”: “graph”,
“targets”: [
{
“expr”: “pg_database_size / 1024 / 1024 / 1024”,
“legendFormat”: “{{ datname }}”
}
]
}
]
}
}

# 步骤6:配置告警
# Alerting -> Notification channels
# 添加钉钉/企业微信/邮件通知渠道

# Alerting -> Alert rules
# 创建告警规则

3.3 openGauss自定义指标采集

# 自定义指标采集

#!/bin/bash
# custom_metrics.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 自定义业务指标采集脚本

DB_IP=”192.168.1.10″
DB_PORT=”5432″
DB_NAME=”fgedudb”
DB_USER=”fgedu”

# 输出Prometheus格式指标
echo “# HELP opengauss_business_orders_total 订单总数”
echo “# TYPE opengauss_business_orders_total gauge”

# 采集订单总数
ORDERS_TOTAL=$(gsql -h $DB_IP -p $DB_PORT -d $DB_NAME -U $DB_USER -t -c “SELECT count(*) FROM fgedu.orders;
” | tr -d ‘ ‘)
echo “opengauss_business_orders_total{database=\”$DB_NAME\”} $ORDERS_TOTAL”

# 采集今日订单数
echo “# HELP opengauss_business_orders_today 今日订单数”
echo “# TYPE opengauss_business_orders_today gauge”
ORDERS_TODAY=$(gsql -h $DB_IP -p $DB_PORT -d $DB_NAME -U $DB_USER -t -c “SELECT count(*) FROM fgedu.orders WHERE create_time >= CURRENT_DATE;
” | tr -d ‘ ‘)
echo “opengauss_business_orders_today{database=\”$DB_NAME\”} $ORDERS_TODAY”

# 采集慢查询数
echo “# HELP opengauss_slow_queries_total 慢查询总数”
echo “# TYPE opengauss_slow_queries_total gauge”
SLOW_QUERIES=$(gsql -h $DB_IP -p $DB_PORT -d postgres -U $DB_USER -t -c “SELECT count(*) FROM pg_stat_activity WHERE state = ‘active’ AND now() – query_start > interval ‘5 seconds’;
” | tr -d ‘ ‘)
echo “opengauss_slow_queries_total{database=\”$DB_NAME\”} $SLOW_QUERIES”

# 采集长事务数
echo “# HELP opengauss_long_transactions_total 长事务总数”
echo “# TYPE opengauss_long_transactions_total gauge”
LONG_TXNS=$(gsql -h $DB_IP -p $DB_PORT -d postgres -U $DB_USER -t -c “SELECT count(*) FROM pg_stat_activity WHERE xact_start IS NOT NULL AND now() – xact_start > interval ‘1 hour’;
” | tr -d ‘ ‘)
echo “opengauss_long_transactions_total{database=\”$DB_NAME\”} $LONG_TXNS”

# 采集锁等待数
echo “# HELP opengauss_lock_waits_total 锁等待总数”
echo “# TYPE opengauss_lock_waits_total gauge”
LOCK_WAITS=$(gsql -h $DB_IP -p $DB_PORT -d postgres -U $DB_USER -t -c “SELECT count(*) FROM pg_locks WHERE NOT granted;
” | tr -d ‘ ‘)
echo “opengauss_lock_waits_total{database=\”$DB_NAME\”} $LOCK_WAITS”

# 执行结果
# HELP opengauss_business_orders_total 订单总数
# TYPE opengauss_business_orders_total gauge
opengauss_business_orders_total{database=”fgedudb”} 500000
# HELP opengauss_business_orders_today 今日订单数
# TYPE opengauss_business_orders_today gauge
opengauss_business_orders_today{database=”fgedudb”} 1500
# HELP opengauss_slow_queries_total 慢查询总数
# TYPE opengauss_slow_queries_total gauge
opengauss_slow_queries_total{database=”fgedudb”} 3
# HELP opengauss_long_transactions_total 长事务总数
# TYPE opengauss_long_transactions_total gauge
opengauss_long_transactions_total{database=”fgedudb”} 0
# HELP opengauss_lock_waits_total 锁等待总数
# TYPE opengauss_lock_waits_total gauge
opengauss_lock_waits_total{database=”fgedudb”} 0

# 配置Prometheus采集自定义指标
# 在prometheus.yml中添加
– job_name: ‘opengauss-custom’
static_configs:
– targets: [‘192.168.1.10:9090’]
metrics_path: /custom_metrics
scrape_interval: 60s

# 使用Node Exporter暴露自定义指标
# 或使用Pushgateway推送指标

Part04-生产案例与实战讲解

4.1 openGauss性能监控案例

4.1.1 监控场景

监控openGauss数据库性能指标,及时发现性能瓶颈。

4.1.2 监控方案

# 性能监控方案

#!/bin/bash
# performance_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

DB_IP=”192.168.1.10″
LOG_FILE=”/opengauss/log/performance_monitor.log”

log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” | tee -a $LOG_FILE
}

# 采集性能指标
collect_metrics() {
log “=== 性能指标采集 ===”

# QPS/TPS
log “— QPS/TPS —”
gsql -h $DB_IP -d postgres -c ”
SELECT
datname,
xact_commit + xact_rollback as total_transactions,
xact_commit,
xact_rollback,
ROUND(100.0 * xact_rollback / NULLIF(xact_commit + xact_rollback, 0), 2) as rollback_ratio
FROM pg_stat_database
WHERE datname = ‘fgedudb’;
” >> $LOG_FILE

# 缓存命中率
log “— 缓存命中率 —”
gsql -h $DB_IP -d postgres -c ”
SELECT
datname,
ROUND(100.0 * blks_hit / NULLIF(blks_hit + blks_read, 0), 2) as cache_hit_ratio
FROM pg_stat_database
WHERE datname = ‘fgedudb’;
” >> $LOG_FILE

# 活跃连接
log “— 活跃连接 —”
gsql -h $DB_IP -d postgres -c ”
SELECT
state,
count(*)
FROM pg_stat_activity
GROUP BY state;
” >> $LOG_FILE

# 慢查询
log “— 慢查询 —”
gsql -h $DB_IP -d postgres -c ”
SELECT
pid,
usename,
application_name,
client_addr,
state,
EXTRACT(EPOCH FROM (now() – query_start)) as query_duration,
LEFT(query, 100) as query_text
FROM pg_stat_activity
WHERE state = ‘active’
AND now() – query_start > interval ‘5 seconds’
ORDER BY query_start;
” >> $LOG_FILE
}

# 主逻辑
main() {
log “========== 性能监控开始 ==========”
collect_metrics
log “========== 性能监控结束 ==========”
}

main

# 执行结果
[2026-04-09 10:00:00] ========== 性能监控开始 ==========
[2026-04-09 10:00:00] === 性能指标采集 ===
[2026-04-09 10:00:01] — QPS/TPS —
datname | total_transactions | xact_commit | xact_rollback | rollback_ratio
———-+——————–+————-+—————+—————-
fgedudb | 15000000 | 14998500 | 1500 | 0.01
(1 row)

[2026-04-09 10:00:02] — 缓存命中率 —
datname | cache_hit_ratio
———-+—————–
fgedudb | 99.85
(1 row)

[2026-04-09 10:00:03] — 活跃连接 —
state | count
———————+——-
active | 50
idle | 100
idle in transaction | 5
(3 rows)

[2026-04-09 10:00:04] — 慢查询 —
pid | usename | application_name | client_addr | state | query_duration | query_text
——+———+——————+————–+——–+—————-+————
1234 | fgedu | app1 | 192.168.1.20 | active | 10.50 | SELECT * FROM fgedu.large_table WHERE…
(1 row)

[2026-04-09 10:00:05] ========== 性能监控结束 ==========

4.2 openGauss可用性监控案例

4.2.1 监控场景

监控openGauss数据库可用性,及时发现故障。

4.2.2 监控方案

# 可用性监控方案

#!/bin/bash
# availability_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

DB_IP=”192.168.1.10″
DB_PORT=”5432″
ALERT_EMAIL=”dba@fgedu.net.cn”
LOG_FILE=”/opengauss/log/availability_monitor.log”

log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” | tee -a $LOG_FILE
}

# 检查数据库状态
check_database() {
log “=== 数据库状态检查 ===”

# 使用pg_isready检查
pg_isready -h $DB_IP -p $DB_PORT
if [ $? -eq 0 ]; then
log “数据库状态: 正常”
return 0
else
log “数据库状态: 异常”
# 发送告警
echo “数据库 $DB_IP:$DB_PORT 无法连接” | mail -s “数据库宕机告警” $ALERT_EMAIL
return 1
fi
}

# 检查复制状态
check_replication() {
log “=== 复制状态检查 ===”

gsql -h $DB_IP -d postgres -c ”
SELECT
application_name,
client_addr,
state,
sync_state
FROM pg_stat_replication;
” >> $LOG_FILE

# 检查复制延迟
DELAY=$(gsql -h $DB_IP -d postgres -t -c ”
SELECT MAX(EXTRACT(EPOCH FROM (now() – pg_last_xact_replay_timestamp())))
FROM pg_stat_replication;
” | tr -d ‘ ‘)

if [ -n “$DELAY” ] && [ “$DELAY” != “NULL” ]; then
log “复制延迟: ${DELAY}秒”
if [ $(echo “$DELAY > 10” | bc) -eq 1 ]; then
log “警告: 复制延迟超过10秒”
echo “复制延迟告警: ${DELAY}秒” | mail -s “复制延迟告警” $ALERT_EMAIL
fi
fi
}

# 检查磁盘空间
check_disk_space() {
log “=== 磁盘空间检查 ===”

# 检查数据目录
DATA_USAGE=$(df -h /opengauss/fgdata | awk ‘NR==2 {print $5}’ | tr -d ‘%’)
log “数据目录使用率: ${DATA_USAGE}%”

if [ “$DATA_USAGE” -gt 80 ]; then
log “警告: 数据目录使用率超过80%”
echo “磁盘空间告警: 数据目录使用率${DATA_USAGE}%” | mail -s “磁盘空间告警” $ALERT_EMAIL
fi

# 检查日志目录
LOG_USAGE=$(df -h /opengauss/fglog | awk ‘NR==2 {print $5}’ | tr -d ‘%’)
log “日志目录使用率: ${LOG_USAGE}%”
}

# 主逻辑
main() {
log “========== 可用性监控开始 ==========”
check_database
if [ $? -eq 0 ]; then
check_replication
check_disk_space
fi
log “========== 可用性监控结束 ==========”
}

main

# 执行结果
[2026-04-09 10:05:00] ========== 可用性监控开始 ==========
[2026-04-09 10:05:00] === 数据库状态检查 ===
192.168.1.10:5432 – accepting connections
[2026-04-09 10:05:01] 数据库状态: 正常
[2026-04-09 10:05:02] === 复制状态检查 ===
[2026-04-09 10:05:03] 复制延迟: 0.50秒
[2026-04-09 10:05:04] === 磁盘空间检查 ===
[2026-04-09 10:05:05] 数据目录使用率: 65%
[2026-04-09 10:05:06] 日志目录使用率: 45%
[2026-04-09 10:05:07] ========== 可用性监控结束 ==========

4.3 openGauss容量监控案例

4.3.1 监控场景

监控openGauss数据库容量,提前预警扩容需求。

4.3.2 监控方案

# 容量监控方案

#!/bin/bash
# capacity_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

DB_IP=”192.168.1.10″
LOG_FILE=”/opengauss/log/capacity_monitor.log”

log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” | tee -a $LOG_FILE
}

# 采集容量指标
collect_capacity() {
log “=== 容量指标采集 ===”

# 数据库大小
log “— 数据库大小 —”
gsql -h $DB_IP -d postgres -c ”
SELECT
datname,
pg_size_pretty(pg_database_size(datname)) as size
FROM pg_database
WHERE datname NOT IN (‘template0’, ‘template1’, ‘postgres’);
” >> $LOG_FILE

# 表空间大小
log “— 表空间大小 —”
gsql -h $DB_IP -d postgres -c ”
SELECT
spcname,
pg_size_pretty(pg_tablespace_size(spcname)) as size
FROM pg_tablespace;
” >> $LOG_FILE

# 大表统计
log “— 大表统计 —”
gsql -h $DB_IP -d fgedudb -c ”
SELECT
schemaname,
tablename,
pg_size_pretty(pg_total_relation_size(schemaname||’.’||tablename)) as size
FROM pg_tables
WHERE schemaname = ‘fgedu’
ORDER BY pg_total_relation_size(schemaname||’.’||tablename) DESC
LIMIT 10;
” >> $LOG_FILE

# 索引大小
log “— 索引大小 —”
gsql -h $DB_IP -d fgedudb -c ”
SELECT
schemaname,
tablename,
indexname,
pg_size_pretty(pg_relation_size(indexrelid)) as size
FROM pg_indexes
WHERE schemaname = ‘fgedu’
ORDER BY pg_relation_size(indexrelid) DESC
LIMIT 10;
” >> $LOG_FILE

# WAL目录大小
log “— WAL目录大小 —”
WAL_SIZE=$(du -sh /opengauss/fgdata/pg_wal | awk ‘{print $1}’)
log “WAL目录大小: $WAL_SIZE”

# 归档目录大小
log “— 归档目录大小 —”
ARCHIVE_SIZE=$(du -sh /opengauss/archive | awk ‘{print $1}’)
log “归档目录大小: $ARCHIVE_SIZE”
}

# 容量趋势分析
analyze_trend() {
log “=== 容量趋势分析 ===”

# 计算日增长率
gsql -h $DB_IP -d postgres -c ”
SELECT
datname,
pg_size_pretty(pg_database_size(datname)) as current_size,
pg_size_pretty(pg_database_size(datname) * 0.05) as daily_growth_estimate
FROM pg_database
WHERE datname = ‘fgedudb’;
” >> $LOG_FILE
}

# 主逻辑
main() {
log “========== 容量监控开始 ==========”
collect_capacity
analyze_trend
log “========== 容量监控结束 ==========”
}

main

# 执行结果
[2026-04-09 10:10:00] ========== 容量监控开始 ==========
[2026-04-09 10:10:00] === 容量指标采集 ===
[2026-04-09 10:10:01] — 数据库大小 —
datname | size
———-+——–
fgedudb | 500 GB
(1 row)

[2026-04-09 10:10:02] — 表空间大小 —
spcname | size
————+——–
pg_default | 500 GB
pg_global | 50 MB
fgedutbs | 200 GB
(3 rows)

[2026-04-09 10:10:03] — 大表统计 —
schemaname | tablename | size
————+——————+——–
fgedu | orders | 200 GB
fgedu | order_items | 150 GB
fgedu | user_logs | 100 GB
(3 rows)

[2026-04-09 10:10:04] — 索引大小 —
schemaname | tablename | indexname | size
————+———–+———————-+——–
fgedu | orders | idx_orders_user_id | 20 GB
fgedu | orders | idx_orders_create_time| 15 GB
(2 rows)

[2026-04-09 10:10:05] — WAL目录大小 —
WAL目录大小: 8.5G
[2026-04-09 10:10:06] — 归档目录大小 —
归档目录大小: 150G
[2026-04-09 10:10:07] === 容量趋势分析 ===
[2026-04-09 10:10:08] ========== 容量监控结束 ==========

Part05-风哥经验总结与分享

5.1 openGauss监控最佳实践

监控最佳实践总结:

  • 分层监控:基础设施层、数据库层、应用层分层监控
  • 核心指标优先:优先监控可用性、性能、容量等核心指标
  • 告警收敛:合理设置告警阈值,避免告警风暴
  • 可视化:通过仪表盘直观展示监控数据
  • 定期复盘:定期分析监控数据,优化系统和监控策略

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息