Skip to content

GaussDB 监控平台搭建

监控平台架构

核心组件

  • Prometheus:开源的监控和告警工具,负责从Exporter采集监控指标,将数据存储在时序数据库中,并支持强大的查询语言
  • Grafana:开源的数据可视化平台,提供丰富的图表和仪表盘功能,支持从多种数据源查询和展示数据
  • Exporter:用于从GaussDB数据库收集监控指标的组件,将指标转换为Prometheus可识别的格式
  • Alertmanager:负责处理Prometheus触发的告警,支持告警分组、抑制和路由,可通过多种渠道发送通知

监控数据流

  1. Exporter定期从GaussDB实例收集各种监控指标
  2. Prometheus按照配置的时间间隔,主动拉取Exporter暴露的指标数据
  3. 采集到的数据存储在Prometheus内置的时序数据库中
  4. Grafana通过PromQL查询语言从Prometheus获取数据,并以直观的图表形式展示
  5. 当监控指标超过预设的阈值时,Prometheus触发告警规则
  6. Alertmanager接收告警,根据配置的规则进行处理,并通过邮件、短信等方式发送通知

监控指标体系

数据库实例指标

  • CPU使用率:数据库实例占用的CPU资源百分比
  • 内存使用率:数据库实例使用的内存资源情况
  • 连接数:当前连接到数据库的客户端数量
  • 事务数:单位时间内执行的事务数量
  • 查询响应时间:SQL查询的平均执行时间

存储指标

  • 磁盘使用率:数据目录所在磁盘的空间使用情况
  • IOPS:每秒输入输出操作数,反映存储系统的读写性能
  • 吞吐量:每秒读写的数据量,反映存储系统的数据传输能力
  • 延迟:存储操作的响应时间,反映存储系统的性能

性能指标

  • 慢查询数:超过阈值的慢查询数量
  • 缓存命中率:数据库缓存的命中比例,反映缓存使用效率
  • 锁等待时间:事务等待锁的时间,反映并发性能
  • WAL日志生成速率:预写式日志的生成速度,反映数据库的写入负载

集群指标

  • 节点状态:集群中各个节点的运行状态
  • 复制延迟:主从节点之间的数据同步延迟
  • 负载均衡情况:集群中各个节点的负载分布情况

Prometheus 安装与配置

安装Prometheus

Prometheus是监控平台的核心组件,负责数据采集、存储和查询。以下是在Linux系统上安装Prometheus的步骤:

bash
# 下载Prometheus安装包
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz

# 解压安装包到当前目录
tar xvfz prometheus-2.45.0.linux-amd64.tar.gz

# 将解压后的目录移动到系统标准位置
mv prometheus-2.45.0.linux-amd64 /usr/local/prometheus

配置Prometheus

安装完成后,需要配置Prometheus以采集GaussDB的监控指标。主要配置包括全局设置、规则文件和采集配置:

yaml
# /usr/local/prometheus/prometheus.yml - Prometheus主配置文件
global:
  scrape_interval: 15s  # 数据采集间隔,每15秒采集一次
  evaluation_interval: 15s  # 告警规则评估间隔,每15秒评估一次

# 告警规则文件路径
rule_files:
  - "rules/*.yml"

# 数据采集配置
scrape_configs:
  - job_name: 'gaussdb'  # 采集任务名称,用于标识GaussDB监控
    static_configs:
      - targets: ['localhost:9187']  # PostgreSQL Exporter的地址和端口
    metrics_path: '/metrics'  # 指标暴露路径
    params:
      format: ['prometheus']  # 指标格式

启动Prometheus

配置完成后,需要启动Prometheus服务并设置为开机自启:

bash
# 创建Prometheus系统用户,用于运行服务
useradd -M -s /bin/false prometheus

# 设置Prometheus目录的所有者和组
chown -R prometheus:prometheus /usr/local/prometheus

# 创建systemd服务文件,用于管理Prometheus服务
cat > /etc/systemd/system/prometheus.service << EOF
[Unit]
Description=Prometheus 监控系统
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
# 启动命令,指定配置文件、数据存储路径和控制台模板
ExecStart=/usr/local/prometheus/prometheus \
    --config.file=/usr/local/prometheus/prometheus.yml \
    --storage.tsdb.path=/usr/local/prometheus/data \
    --web.console.templates=/usr/local/prometheus/consoles \
    --web.console.libraries=/usr/local/prometheus/console_libraries

[Install]
WantedBy=multi-user.target
EOF

# 重新加载systemd配置
systemctl daemon-reload
# 启动Prometheus服务
systemctl start prometheus
# 设置Prometheus服务开机自启
systemctl enable prometheus

PostgreSQL Exporter 安装与配置

安装PostgreSQL Exporter

PostgreSQL Exporter是用于从GaussDB数据库收集监控指标的组件,它将数据库的各种指标转换为Prometheus可识别的格式。以下是安装步骤:

bash
# 下载PostgreSQL Exporter安装包
wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.15.0/postgres_exporter-0.15.0.linux-amd64.tar.gz

# 解压安装包到当前目录
tar xvfz postgres_exporter-0.15.0.linux-amd64.tar.gz

# 将解压后的目录移动到系统标准位置
mv postgres_exporter-0.15.0.linux-amd64 /usr/local/postgres_exporter

配置PostgreSQL Exporter

安装完成后,需要配置PostgreSQL Exporter以连接到GaussDB数据库并收集指标:

bash
# 创建密码文件,用于Exporter连接数据库
cat > /usr/local/postgres_exporter/.pgpass << EOF
localhost:5432:postgres:postgres:password
EOF

# 设置密码文件权限,确保只有Exporter用户可以访问
chmod 600 /usr/local/postgres_exporter/.pgpass

# 创建systemd服务文件,用于管理PostgreSQL Exporter服务
cat > /etc/systemd/system/postgres_exporter.service << EOF
[Unit]
Description=PostgreSQL Exporter 监控指标收集器
Wants=network-online.target
After=network-online.target

[Service]
User=postgres
Group=postgres
Type=simple
# 设置数据库连接字符串环境变量
Environment="DATA_SOURCE_NAME=postgresql://postgres:password@localhost:5432/postgres?sslmode=disable"
# 启动命令,指定监听地址、端口和自定义查询路径
ExecStart=/usr/local/postgres_exporter/postgres_exporter \
    --web.listen-address=:9187 \
    --extend.query-path=/usr/local/postgres_exporter/queries.yaml

[Install]
WantedBy=multi-user.target
EOF

自定义监控指标

PostgreSQL Exporter支持通过配置文件定义自定义监控指标,以便收集GaussDB特有的监控数据:

yaml
# /usr/local/postgres_exporter/queries.yaml - 自定义监控指标配置文件
gaussdb_query_duration:
  # 自定义查询,用于收集当前查询的执行时长
  query: "SELECT extract(epoch FROM now() - query_start) as query_duration, state FROM pg_stat_activity WHERE state != 'idle'"
  metrics:
    - query_duration:
        usage: "GAUGE"  # 指标类型,GAUGE表示可增可减的数值
        description: "当前查询的执行时长"
    - state:
        usage: "LABEL"  # 指标标签,用于区分不同状态的查询
        description: "查询的状态"

启动PostgreSQL Exporter

配置完成后,需要启动PostgreSQL Exporter服务并设置为开机自启:

bash
# 设置PostgreSQL Exporter目录的所有者和组
chown -R postgres:postgres /usr/local/postgres_exporter

# 重新加载systemd配置
systemctl daemon-reload
# 启动PostgreSQL Exporter服务
systemctl start postgres_exporter
# 设置PostgreSQL Exporter服务开机自启
systemctl enable postgres_exporter

Grafana 安装与配置

安装Grafana

Grafana是一款强大的数据可视化工具,用于展示Prometheus收集的监控指标。以下是在Linux系统上安装Grafana的步骤:

bash
# 安装必要的依赖包
yum install -y yum-utils

# 添加Grafana官方仓库
yum-config-manager --add-repo https://rpm.grafana.com/grafana.repo

# 更新系统软件包列表
yum update -y

# 安装Grafana服务器
yum install -y grafana

启动Grafana

安装完成后,需要启动Grafana服务并设置为开机自启:

bash
# 启动Grafana服务
systemctl start grafana-server
# 设置Grafana服务开机自启
systemctl enable grafana-server

# 查看Grafana服务状态,确认是否正常启动
systemctl status grafana-server

配置Grafana数据源

Grafana需要连接到Prometheus数据源才能获取监控指标。以下是配置步骤:

  1. 打开浏览器,访问Grafana Web界面(默认地址:http://服务器IP:3000
  2. 使用默认用户名和密码(admin/admin)登录
  3. 首次登录会要求修改默认密码,按照提示完成密码修改
  4. 登录后,点击左侧导航栏的"Configuration"(配置)按钮
  5. 选择"Data Sources"(数据源)选项
  6. 点击"Add data source"(添加数据源)按钮
  7. 在数据源类型列表中选择"Prometheus"
  8. 在配置页面中,设置以下参数:
    • Name:数据源名称,建议设置为"Prometheus"
    • URL:Prometheus服务器地址(默认:http://localhost:9090
    • Access:访问方式,选择"Server"(服务器端访问)
  9. 点击页面底部的"Save & Test"(保存并测试)按钮
  10. 如果配置正确,会显示"Data source is working"(数据源工作正常)的提示

监控面板配置

导入Grafana模板

Grafana提供了丰富的预定义监控面板模板,可以直接导入使用。以下是导入步骤:

  1. 登录Grafana Web界面
  2. 点击左侧导航栏的"Create"(创建)按钮
  3. 选择"Import"(导入)选项
  4. 在"Import via grafana.com"输入框中,输入模板ID(推荐使用PostgreSQL相关模板,如12612)
  5. 点击"Load"(加载)按钮
  6. 在导入配置页面中,选择之前配置的Prometheus数据源
  7. 点击"Import"(导入)按钮完成导入
  8. 导入成功后,会自动跳转到该监控面板,可以查看GaussDB的各项监控指标

自定义监控面板

除了使用预定义模板外,还可以根据实际需求自定义监控面板:

  1. 登录Grafana Web界面
  2. 点击左侧导航栏的"Create"(创建)按钮
  3. 选择"Dashboard"(仪表盘)选项
  4. 点击"Add an empty panel"(添加空白面板)按钮
  5. 在面板配置页面中,配置查询语句,例如:
    txt
    # 数据库连接数
    pg_stat_database_numbackends{datname="postgres"}
    
    # CPU使用率
    pg_stat_bgwriter_checkpoints_timed
    
    # 慢查询数
    increase(pg_stat_database_xact_commit{datname="postgres"}[5m])
  6. 配置图表样式和显示选项,包括:
    • 图表类型(折线图、柱状图、仪表盘等)
    • 标题和描述
    • 坐标轴设置
    • 图例设置
    • 颜色方案
  7. 点击右上角的"Apply"(应用)按钮保存面板
  8. 可以添加多个面板,组成完整的监控仪表盘
  9. 点击仪表盘右上角的"Save"(保存)按钮,为仪表盘命名并保存

告警配置

配置告警规则

告警规则用于定义监控指标的阈值条件,当条件满足时触发告警。以下是配置GaussDB告警规则的步骤:

yaml
# /usr/local/prometheus/rules/gaussdb-alerts.yml - GaussDB告警规则配置文件
groups:
- name: gaussdb-alerts  # 告警规则组名称
  rules:
  - alert: HighConnectionCount  # 告警名称:连接数过高
    expr: pg_stat_database_numbackends{datname="postgres"} > 100  # 告警条件:连接数超过100
    for: 5m  # 持续时间:超过阈值持续5分钟才触发告警
    labels:
      severity: warning  # 告警级别:警告
    annotations:
      summary: "{{ $labels.instance }} 连接数过高"  # 告警摘要
      description: "数据库连接数为 {{ $value }},超过阈值100"  # 告警详细描述

  - alert: HighCPULoad  # 告警名称:CPU负载过高
    expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80  # 告警条件:CPU使用率超过80%
    for: 5m  # 持续时间:超过阈值持续5分钟
    labels:
      severity: critical  # 告警级别:严重
    annotations:
      summary: "{{ $labels.instance }} CPU负载过高"  # 告警摘要
      description: "CPU使用率为 {{ $value }}%,超过阈值80%"  # 告警详细描述

  - alert: SlowQueries  # 告警名称:慢查询过多
    expr: increase(pg_stat_database_conflicts{datname="postgres"}[5m]) > 10  # 告警条件:5分钟内慢查询数超过10
    for: 5m  # 持续时间:超过阈值持续5分钟
    labels:
      severity: warning  # 告警级别:警告
    annotations:
      summary: "{{ $labels.instance }} 慢查询过多"  # 告警摘要
      description: "5分钟内慢查询数为 {{ $value }},超过阈值10"  # 告警详细描述

配置Alertmanager

Alertmanager负责处理Prometheus触发的告警,并通过邮件、短信等方式发送通知。以下是配置步骤:

yaml
# /usr/local/prometheus/alertmanager.yml - Alertmanager配置文件
global:
  resolve_timeout: 5m  # 告警解决超时时间:5分钟

# 告警路由配置
route:
  group_by: ['alertname']  # 按告警名称分组
  group_wait: 30s  # 组内第一个告警等待30秒,可能有更多告警进入同一组
  group_interval: 5m  # 同一组告警发送间隔:5分钟
  repeat_interval: 1h  # 重复告警发送间隔:1小时
  receiver: 'email-notifications'  # 告警接收者:邮件通知

# 告警接收者配置
receivers:
- name: 'email-notifications'  # 接收者名称:邮件通知
  email_configs:  # 邮件配置
  - to: 'admin@example.com'  # 收件人邮箱
    from: 'alertmanager@example.com'  # 发件人邮箱
    smarthost: 'smtp.example.com:587'  # SMTP服务器地址和端口
    auth_username: 'alertmanager'  # SMTP认证用户名
    auth_password: 'password'  # SMTP认证密码
    require_tls: true  # 启用TLS加密

启动Alertmanager

配置完成后,需要下载、安装并启动Alertmanager服务:

bash
# 下载Alertmanager安装包
wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz

# 解压安装包到当前目录
tar xvfz alertmanager-0.25.0.linux-amd64.tar.gz

# 将解压后的目录移动到系统标准位置
mv alertmanager-0.25.0.linux-amd64 /usr/local/alertmanager

# 创建systemd服务文件,用于管理Alertmanager服务
cat > /etc/systemd/system/alertmanager.service << EOF
[Unit]
Description=Alertmanager 告警管理系统
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
# 启动命令,指定配置文件和数据存储路径
ExecStart=/usr/local/alertmanager/alertmanager \
    --config.file=/usr/local/alertmanager/alertmanager.yml \
    --storage.path=/usr/local/alertmanager/data

[Install]
WantedBy=multi-user.target
EOF

# 重新加载systemd配置
systemctl daemon-reload
# 启动Alertmanager服务
systemctl start alertmanager
# 设置Alertmanager服务开机自启
systemctl enable alertmanager

监控平台维护

数据保留策略

Prometheus默认会保留15天的监控数据,可以根据实际需求调整数据保留时间:

bash
# 修改Prometheus配置文件
vi /usr/local/prometheus/prometheus.yml

# 在global配置段添加数据保留时间配置
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  storage.tsdb.retention.time: 15d  # 数据保留时间:15天

# 重启Prometheus服务,使配置生效
systemctl restart prometheus

性能优化

为了确保监控平台的性能,可以采取以下优化措施:

  • 调整Prometheus的scrape_interval,根据监控需求设置合适的采集频率
  • 合理规划监控指标,避免采集过多不必要的指标
  • 为Grafana配置缓存,提高查询性能
  • 定期清理过期数据,保持系统性能
  • 为Prometheus配置远程存储,如使用Thanos或Cortex,提高 scalability

高可用配置

为了确保监控平台的高可用性,可以采取以下配置:

  • 部署Prometheus集群,实现数据冗余和故障转移
  • 配置Grafana的HA模式,使用共享数据库存储配置和仪表盘
  • 使用负载均衡器分发请求,提高系统的并发处理能力
  • 实现监控数据的异地备份,确保数据安全

日常维护任务

监控平台的日常维护任务包括:

  • 定期检查监控平台各组件的运行状态
  • 监控监控平台自身的资源使用情况
  • 定期备份监控平台的配置和数据
  • 及时更新监控平台各组件的版本
  • 优化告警规则,减少误报和漏报
  • 定期Review监控面板,确保监控指标的有效性

常见问题(FAQ)

Q1: 如何添加新的GaussDB实例到监控平台?

A1: 步骤如下:

  1. 在新的GaussDB实例上安装PostgreSQL Exporter
  2. 配置Exporter连接到GaussDB实例
  3. 在Prometheus配置文件中添加新的scrape目标
  4. 重启Prometheus服务
  5. 在Grafana中验证新实例的指标是否正常显示

Q2: 如何自定义监控指标?

A2: 可以通过以下方式自定义监控指标:

  1. 修改PostgreSQL Exporter的queries.yaml文件,添加自定义查询
  2. 使用Prometheus的recording rules创建复合指标
  3. 在Grafana中使用查询编辑器创建衍生指标

Q3: 如何调整告警阈值?

A3: 调整告警阈值的方法:

  1. 编辑Prometheus的告警规则文件
  2. 修改expr字段中的阈值条件
  3. 重启Prometheus服务
  4. 在Grafana中验证告警规则是否生效

Q4: 监控平台性能不佳怎么办?

A4: 优化监控平台性能的方法:

  1. 减少采集频率,延长scrape_interval
  2. 减少监控指标数量,只保留必要的指标
  3. 增加Prometheus的存储容量和CPU资源
  4. 配置Prometheus的远程存储,如使用Thanos或Cortex

Q5: 如何备份监控平台配置?

A5: 备份监控平台配置的方法:

  1. 备份Prometheus的配置文件和规则文件
  2. 备份Grafana的数据库和配置文件
  3. 备份Alertmanager的配置文件
  4. 定期将备份数据存储到安全位置

Q6: 如何集成其他监控工具?

A6: 集成其他监控工具的方法:

  1. 使用Prometheus的federation功能集成其他Prometheus实例
  2. 使用Prometheus的remote_write功能将数据发送到其他系统
  3. 安装相应的Exporter,支持从其他系统采集数据
  4. 在Grafana中添加其他数据源,如InfluxDB、Elasticsearch等

Q7: 如何监控GaussDB分布式集群?

A7: 监控GaussDB分布式集群的方法:

  1. 在每个节点上安装PostgreSQL Exporter
  2. 配置Prometheus采集所有节点的指标
  3. 创建集群级别的监控面板,展示整体状态
  4. 配置集群级别的告警规则,监控节点间的同步情况

Q8: 如何监控慢查询?

A8: 监控慢查询的方法:

  1. 启用GaussDB的慢查询日志
  2. 使用pg_stat_statements扩展收集慢查询统计信息
  3. 配置PostgreSQL Exporter采集慢查询指标
  4. 在Grafana中创建慢查询监控面板
  5. 配置慢查询告警规则

Q9: 如何验证监控数据的准确性?

A9: 验证监控数据准确性的方法:

  1. 对比监控数据与GaussDB内置视图的查询结果
  2. 使用多种监控工具采集同一指标,进行交叉验证
  3. 定期手动检查关键指标,确认监控数据的准确性
  4. 监控数据采集过程中的错误日志

Q10: 如何实现监控平台的自动化部署?

A10: 实现自动化部署的方法:

  1. 使用Ansible或Terraform编写自动化部署脚本
  2. 配置CI/CD流水线,实现监控平台的自动部署和更新
  3. 使用容器化技术(Docker、Kubernetes)部署监控平台
  4. 配置配置管理工具,管理监控平台的配置文件