opengauss教程FG168-openGauss Prometheus监控配置
内容简介
本文档详细介绍openGauss数据库的Prometheus监控配置,包括Prometheus监控系统的部署、Exporter配置、Grafana可视化设置以及实际案例分析。风哥教程参考openGauss官方文档监控指南和Prometheus官方文档,为企业提供完整的Prometheus监控解决方案。
Part01-基础概念与理论知识
1.1 Prometheus监控系统概述
Prometheus是一款开源的监控和告警系统,具有以下特点:
- 多维度数据模型:使用时间序列数据,每个数据点包含指标名称、标签和时间戳
- 灵活的查询语言:PromQL,支持复杂的查询和聚合操作
- 高效的存储:本地时间序列数据库,支持水平扩展
- 强大的告警管理:基于PromQL的告警规则,支持多种告警通知方式
- 丰富的可视化:与Grafana集成,提供直观的监控仪表盘
- 易于集成:支持多种Exporter,用于采集不同系统的指标
1.2 Prometheus监控原理
Prometheus的监控原理主要包括:
- 数据采集:通过Pull模式从目标系统采集指标
- 数据存储:将采集的指标存储为时间序列数据
- 数据查询:使用PromQL查询和分析监控数据
- 告警触发:根据预设的告警规则触发告警
- 告警通知:通过Alertmanager发送告警通知
- 可视化展示:通过Grafana展示监控数据
1.3 openGauss监控需求分析
openGauss数据库的监控需求主要包括:
- 系统指标:CPU、内存、磁盘、网络等
- 数据库指标:连接数、事务数、查询响应时间等
- 复制指标:复制延迟、复制状态等
- 存储指标:表空间使用率、数据文件大小等
- 性能指标:缓存命中率、锁等待等
- 安全指标:登录失败次数、异常访问等
Part02-生产环境规划与建议
2.1 Prometheus部署规划
Prometheus部署规划建议:
- 部署架构:
- 小型环境:单服务器部署
- 中型环境:Prometheus + Alertmanager + Grafana
- 大型环境:Prometheus高可用集群 + Alertmanager + Grafana
- 硬件配置:
- CPU:至少2核
- 内存:至少4GB
- 磁盘:至少50GB,推荐SSD
- 网络:千兆网络
- 软件版本:
- Prometheus:最新稳定版本
- Alertmanager:与Prometheus版本匹配
- Grafana:最新稳定版本
- Node Exporter:最新稳定版本
- PostgreSQL Exporter:最新稳定版本
风哥提示:
2.2 监控指标规划
监控指标规划建议:
- 核心指标:必须监控的关键指标
- 数据库状态
- 连接数
- CPU使用率
- 内存使用率
- 磁盘使用率
- 重要指标:需要重点关注的指标
- 事务数
- 查询响应时间
- 复制延迟
- 表空间使用率
- 一般指标:定期查看的指标
- 缓存命中率
- 锁等待
- WAL日志大小
- 学习交流加群风哥微信: itpux-com
2.3 告警策略规划
告警策略规划建议:
- 告警级别:
- 紧急:数据库宕机、复制中断等
- 高危:CPU/内存使用率高、连接数过多等
- 警告:磁盘空间不足、查询缓慢等
- 信息:配置变更、备份完成等
- 告警频率:
- 紧急:立即通知,5分钟未处理升级通知
- 高危:10分钟通知一次
- 警告:30分钟通知一次
- 信息:每日汇总通知
- 通知方式:
- 邮件通知
- 短信通知
- 企业微信通知
- 电话告警(紧急情况)
Part03-生产环境项目实施方案
3.1 Prometheus部署与配置
Prometheus部署与配置步骤:
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
tar -xf prometheus-2.45.0.linux-amd64.tar.gz学习交流加群风哥QQ113257174
mv prometheus-2.45.0.linux-amd64 /usr/local/prometheus
Resolving github.com (github.com)… 140.82.114.3
Connecting to github.com (github.com)|140.82.114.3|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 92345678 (88M) [application/octet-stream]
Saving to: ‘prometheus-2.45.0.linux-amd64.tar.gz’
prometheus-2.45.0.linux-amd64.tar.gz 100%[=================================================>] 88.07M 10.2MB/s in 8.6s
2024-01-01 10:00:09 (10.2 MB/s) – ‘prometheus-2.45.0.linux-amd64.tar.gz’ saved [92345678/92345678]
cat > /usr/local/prometheus/prometheus.yml << EOF global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: - localhost:9093 rule_files: - "alerts.yml" scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node' static_configs: - targets: ['localhost:9100'] - job_name: 'postgres'更多视频教程www.fgedu.net.cn static_configs: - targets: ['localhost:9187'] EOF
cd /usr/local/prometheus
./prometheus –config.file=prometheus.yml &
level=info ts=2024-01-01T10:01:00Z caller=main.go:1127 build_context=”(go=go1.20.10, platform=linux/amd64, user=root@localhost, date=20240101-10:00:00, tags=unknown)”
level=info ts=2024-01-01T10:01:00Z caller=main.go:1128 host_details=”(Linux 5.14.0-362.13.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Nov 30 14:59:48 EST 2023 x86_64 fgedu.net.cn (none))”
level=info ts=2024-01-01T10:01:00Z caller=main.go:1132 fd_limits=”(soft=1024, hard=4096)”
level=info ts=2024-01-01T10:01:00Z caller=main.go:1133 vm_limits=”(soft=unlimited, hard=unlimited)”
level=info ts=2024-01-01T10:01:00Z caller=main.go:1169 msg=”Loading configuration file” filename=prometheus.yml
level=info ts=2024-01-01T10:01:00Z caller=main.go:1205 msg=”Completed loading of configuration file” filename=prometheus.yml totalDuration=1.234ms remote_storage=0s web_handler=0s query_engine=0s scrape=0s notify=0s
level=info ts=2024-01-01T10:01:00Z caller=main.go:972 msg=”Server is ready to receive web requests.”
3.2 Exporter配置
Exporter配置步骤:
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar -xf node_exporter-1.6.0.linux-amd64.tar.gz
mv node_exporter-1.6.0.linux-amd64 /usr/local/node_exporter
Resolving github.com (github.com)… 140.82.114.3
Connecting to github.com (github.com)|140.82.114.3|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 15678901 (15M) [application/octet-stream]
Saving to: ‘node_exporter-1.6.0.linux-amd64.tar.gz’
node_exporter-1.6.0.linux-amd64.tar.gz 100%[=================================================>] 14.95M 8.7MB/s in 1.7s
2024-01-01 10:02:02 (8.7 MB/s) – ‘node_exporter-1.6.0.linux-amd64.tar.gz’ saved [15678901/15678901]更多学习教程公众号风哥教程itpux_com
cd /usr/local/node_exporter
./node_exporter &
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:182 build_context=”(go=go1.20.10, platform=linux/amd64, user=root@localhost, date=20240101-10:00:00, tags=unknown)”
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:198 msg=”Enabled collectors”
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:205 msg=” – boottime”
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:205 msg=” – cpu”
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:205 msg=” – diskstats”
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:205 msg=” – filesystem”
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:205 msg=” – loadavg”
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:205 msg=” – meminfo”
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:205 msg=” – netdev”
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:205 msg=” – stat”
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:205 msg=” – time”
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:205 msg=” – uname”
level=info ts=2024-01-01T10:02:30Z caller=node_exporter.go:233 msg=”Listening on :9100″
wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.15.0/postgres_exporter-0.15.0.linux-amd64.tar.gz
tar -xf postgres_exporter-0.15.0.linux-amd64.tar.gz
mv postgres_exporter-0.15.0.linux-amd64 /usr/local/postgres_exporterfrom DB视频:www.itpux.com
Resolving github.com (github.com)… 140.82.114.3
Connecting to github.com (github.com)|140.82.114.3|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 16789012 (16M) [application/octet-stream]
Saving to: ‘postgres_exporter-0.15.0.linux-amd64.tar.gz’
postgres_exporter-0.15.0.linux-amd64.tar.gz 100%[=================================================>] 15.99M 9.2MB/s in 1.7s
2024-01-01 10:03:02 (9.2 MB/s) – ‘postgres_exporter-0.15.0.linux-amd64.tar.gz’ saved [16789012/16789012]
cat > /usr/local/postgres_exporter/.env << EOF DATA_SOURCE_NAME=postgresql://fgedu:Fgedu@123@localhost:5432/postgres?sslmode=disable EOF
cd /usr/local/postgres_exporter
./postgres_exporter &
level=info ts=2024-01-01T10:03:30Z caller=postgres_exporter.go:879 build_context=”(go=go1.20.10, platform=linux/amd64, user=root@localhost, date=20240101-10:00:00, tags=unknown)”
level=info ts=2024-01-01T10:03:30Z caller=postgres_exporter.go:915 msg=”Listening on :9187″
3.3 Grafana可视化配置
Grafana部署与配置步骤:
wget https://dl.grafana.com/oss/release/grafana-10.2.0.linux-amd64.tar.gz
tar -xf grafana-10.2.0.linux-amd64.tar.gz
mv grafana-10.2.0 /usr/local/grafana
Resolving dl.grafana.com (dl.grafana.com)… 151.101.193.133
Connecting to dl.grafana.com (dl.grafana.com)|151.101.193.133|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 89765432 (85M) [application/x-gzip]
Saving to: ‘grafana-10.2.0.linux-amd64.tar.gz’
grafana-10.2.0.linux-amd64.tar.gz 100%[=================================================>] 85.59M 9.8MB/s in 8.7s
2024-01-01 10:04:09 (9.8 MB/s) – ‘grafana-10.2.0.linux-amd64.tar.gz’ saved [89765432/89765432]
cd /usr/local/grafana
./bin/grafana-server &
logger=server level=info msg=”Config loaded from” file=”/usr/local/grafana/conf/defaults.ini”
logger=server level=info msg=”Config loaded from” file=”/usr/local/grafana/conf/custom.ini”
logger=server level=info msg=”Path Home” path=”/usr/local/grafana”
logger=server level=info msg=”Path Data” path=”/usr/local/grafana/data”
logger=server level=info msg=”Path Logs” path=”/usr/local/grafana/logs”
logger=server level=info msg=”Path Plugins” path=”/usr/local/grafana/plugins”
logger=server level=info msg=”Path Provisioning” path=”/usr/local/grafana/conf/provisioning”
logger=server level=info msg=”App mode production”
logger=http.server level=info msg=”HTTP Server Listen” address=[::]:3000 protocol=http subUrl=”” socket=””
Part04-生产案例与实战讲解
4.1 金融行业Prometheus监控案例
某银行核心系统Prometheus监控案例:
- 部署架构:
- Prometheus:高可用集群部署
- Alertmanager:高可用部署
- Grafana:高可用部署
- Exporter:部署在所有节点
- 监控指标:
- 系统指标:CPU、内存、磁盘、网络
- 数据库指标:连接数、事务数、查询响应时间
- 复制指标:复制延迟、复制状态
- 业务指标:交易成功率、响应时间
- 告警策略:
- 紧急告警:数据库宕机、复制中断
- 高危告警:CPU/内存使用率高、连接数过多
- 警告告警:磁盘空间不足、查询缓慢
- 通知方式:
- 邮件通知
- 短信通知
- 企业微信通知
- 电话告警(紧急情况)
4.2 政府行业Prometheus监控案例
某政务系统Prometheus监控案例:
- 部署架构:
- Prometheus:单服务器部署
- Alertmanager:单服务器部署
- Grafana:单服务器部署
- Exporter:部署在主备节点
- 监控指标:
- 系统指标:CPU、内存、磁盘
- 数据库指标:连接数、查询响应时间
- 安全指标:登录失败次数、异常访问
- 告警策略:
- 紧急告警:数据库宕机
- 高危告警:系统资源使用率高
- 警告告警:配置异常、性能下降
- 通知方式:
- 内部邮件通知
- 内部消息系统通知
- 运维值班系统
4.3 企业级Prometheus监控案例
某制造企业ERP系统Prometheus监控案例:
- 部署架构:
- Prometheus:单服务器部署
- Alertmanager:单服务器部署
- Grafana:单服务器部署
- Exporter:部署在所有环境节点
- 监控指标:
- 系统指标:CPU、内存、磁盘、网络
- 数据库指标:连接数、事务数、查询响应时间
- 应用指标:API响应时间、业务处理量
- 告警策略:
- 紧急告警:系统宕机、服务不可用
- 高危告警:性能下降、资源不足
- 警告告警:配置异常、备份失败
- 通知方式:
- 邮件通知
- Slack通知
- 手机App通知
Part05-风哥经验总结与分享
5.1 Prometheus监控最佳实践
Prometheus监控最佳实践:
- 合理规划监控架构:根据监控规模选择合适的部署架构
- 优化监控指标:只监控必要的指标,避免监控风暴
- 设置合理的告警阈值:根据实际情况调整告警阈值
- 建立分级告警机制:根据严重程度分级处理告警
- 定期检查监控系统:确保监控系统本身的稳定性
- 持续优化监控策略:根据业务需求调整监控策略
5.2 性能优化技巧
Prometheus性能优化技巧:
- 存储优化:
- 配置合理的存储保留策略
- 使用SSD存储提高性能
- 考虑使用远程存储方案
- 查询优化:
- 优化PromQL查询语句
- 使用记录规则预计算聚合数据
- 避免使用高基数标签
- 采集优化:
- 合理设置采集间隔
- 使用服务发现自动管理目标
- 对大规模监控使用Prometheus联邦集群
5.3 故障处理与告警管理
故障处理与告警管理策略:
Prometheus告警管理脚本示例
#!/bin/bash
# prometheus_alert_management.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 定义变量
PROMETHEUS_URL="http://localhost:9090"
ALERTMANAGER_URL="http://localhost:9093"
# 获取当前告警
get_alerts() {
echo "获取当前告警..."
curl -s $PROMETHEUS_URL/api/v1/alerts | jq '.data.alerts[] | {labels: .labels, annotations: .annotations, state: .state}'
}
# 获取告警规则
get_alert_rules() {
echo "获取告警规则..."
curl -s $PROMETHEUS_URL/api/v1/rules | jq '.data.groups[] .rules[] | {name: .name, expr: .expr, labels: .labels, annotations: .annotations}'
}
# 检查Prometheus状态
check_prometheus() {
echo "检查Prometheus状态..."
curl -s $PROMETHEUS_URL/metrics > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Prometheus运行正常"
return 0
else
echo "Prometheus运行异常"
return 1
fi
}
# 检查Alertmanager状态
check_alertmanager() {
echo "检查Alertmanager状态..."
curl -s $ALERTMANAGER_URL/metrics > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Alertmanager运行正常"
return 0
else
echo "Alertmanager运行异常"
return 1
fi
}
# 主流程
echo "=== Prometheus告警管理开始 ==="
# 检查服务状态
check_prometheus
check_alertmanager
# 获取告警规则
get_alert_rules
# 获取当前告警
get_alerts
echo "=== Prometheus告警管理完成 ==="
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
