外观
Oracle Prometheus + Grafana集成监控
概述
Prometheus + Grafana是目前流行的开源监控解决方案组合,适用于大规模分布式系统的监控。将其与Oracle数据库集成,可以实现对Oracle数据库的全面监控,包括性能指标、资源使用情况、可用性状态等。
Prometheus负责数据采集和存储,通过Exporter从Oracle数据库获取监控指标;Grafana负责数据可视化和告警,提供直观的仪表盘和灵活的告警配置。
集成架构设计
架构组件
- Oracle数据库:监控目标,提供动态性能视图和系统视图供Exporter查询
- Oracle Exporter:从Oracle数据库采集监控指标,暴露给Prometheus
- Prometheus Server:负责数据采集、存储和查询
- Grafana Server:提供数据可视化和告警配置
- Alertmanager:处理告警通知,支持多种通知方式
架构图
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Oracle 19c/21c │────▶│ Oracle Exporter │────▶│ Prometheus │
└─────────────────┘ └─────────────────┘ │ Server │
└─────────────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Alertmanager │◀────│ Grafana │◀────│ Prometheus │
│ │────▶│ Server │ │ Server │
└─────────────────┘ └─────────────────┘ └─────────────────┘数据流向
- Oracle Exporter通过JDBC连接Oracle数据库,定期查询动态性能视图
- Exporter将查询结果转换为Prometheus格式的指标,暴露在HTTP端口
- Prometheus定期从Exporter拉取指标数据,存储到时间序列数据库
- Grafana连接Prometheus数据源,通过SQL查询获取指标数据
- Grafana将数据可视化展示,并根据配置的告警规则生成告警
- 告警发送到Alertmanager,由Alertmanager根据路由规则发送通知
部署步骤
1. 安装Oracle Exporter
1.1 选择合适的Exporter
目前主流的Oracle Exporter有两种:
- Prometheus Oracle Exporter(官方维护,功能全面)
- Oracle DB Exporter(第三方维护,轻量级)
根据生产环境需求选择合适的Exporter。
1.2 安装Exporter
以Prometheus Oracle Exporter为例:
bash
# 下载Exporter
wget https://github.com/iamseth/oracle_exporter/releases/download/v0.4.0/oracle_exporter.0.4.0.linux-amd64.tar.gz
# 解压
mkdir -p /opt/oracle_exporter
tar -zxvf oracle_exporter.0.4.0.linux-amd64.tar.gz -C /opt/oracle_exporter
# 创建配置文件
cat > /opt/oracle_exporter/oracle_exporter.yml << EOF
exporters:
oracle:
data_source_name: "username/password@//hostname:1521/SID"
collection_interval: 60s
collection_timeout: 30s
EOF
# 创建systemd服务
cat > /etc/systemd/system/oracle_exporter.service << EOF
[Unit]
Description=Prometheus Oracle Exporter
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/opt/oracle_exporter/oracle_exporter --config.file=/opt/oracle_exporter/oracle_exporter.yml
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
systemctl daemon-reload
systemctl start oracle_exporter
systemctl enable oracle_exporter2. 配置Prometheus
2.1 编辑Prometheus配置文件
yaml
# /etc/prometheus/prometheus.yml
scrape_configs:
- job_name: 'oracle'
static_configs:
- targets: ['oracle_exporter_ip:9161']
scrape_interval: 60s
scrape_timeout: 30s
metrics_path: /metrics2.2 重启Prometheus服务
bash
systemctl restart prometheus3. 安装和配置Grafana
3.1 安装Grafana
bash
# CentOS/RHEL
yum install -y https://dl.grafana.com/oss/release/grafana-9.0.0-1.x86_64.rpm
systemctl start grafana-server
systemctl enable grafana-server
# Ubuntu/Debian
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
apt-get update
apt-get install -y grafana
systemctl start grafana-server
systemctl enable grafana-server3.2 配置Grafana数据源
- 登录Grafana控制台(默认端口3000,用户名/密码:admin/admin)
- 导航到"Configuration" > "Data Sources"
- 点击"Add data source",选择"Prometheus"
- 配置Prometheus数据源:
- Name: Oracle Prometheus
- URL: http://prometheus_ip:9090
- Access: Server
- 其他保持默认
- 点击"Save & Test"验证配置
3.3 导入Oracle监控仪表盘
- 导航到"Create" > "Import"
- 输入仪表盘ID(推荐使用13925或9614),或上传JSON文件
- 选择之前配置的Prometheus数据源
- 点击"Import"完成导入
4. 配置Alertmanager
4.1 安装Alertmanager
bash
# 下载Alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz
# 解压
mkdir -p /opt/alertmanager
tar -zxvf alertmanager-0.24.0.linux-amd64.tar.gz -C /opt/alertmanager
# 创建配置文件
cat > /opt/alertmanager/alertmanager.yml << EOF
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: 'dba@example.com'
from: 'alertmanager@example.com'
smarthost: 'smtp.example.com:25'
auth_username: 'alertmanager'
auth_password: 'password'
require_tls: false
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'cluster', 'service']
EOF
# 创建systemd服务
cat > /etc/systemd/system/alertmanager.service << EOF
[Unit]
Description=Prometheus Alertmanager
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/opt/alertmanager/alertmanager --config.file=/opt/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
systemctl daemon-reload
systemctl start alertmanager
systemctl enable alertmanager4.2 配置Prometheus连接Alertmanager
yaml
# /etc/prometheus/prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager_ip:9093']监控指标配置
核心监控指标
Oracle Exporter可以采集多种类型的指标,包括:
1. 数据库基本信息
| 指标名称 | 描述 | Oracle视图 | 19c/21c差异 |
|---|---|---|---|
| oracle_up | 数据库连接状态 | N/A | 无明显差异 |
| oracle_version_info | 数据库版本信息 | V$VERSION | 21c返回更新的版本信息 |
| oracle_instance_status | 实例状态 | V$INSTANCE | 无明显差异 |
2. 性能指标
| 指标名称 | 描述 | Oracle视图 | 19c/21c差异 |
|---|---|---|---|
| oracle_sessions_active | 活动会话数 | V$SESSION | 21c支持更高并发 |
| oracle_sessions_inactive | 非活动会话数 | V$SESSION | 无明显差异 |
| oracle_sql_execute_time | SQL执行时间 | V$SQLSTATS | 21c优化SQL执行计划 |
| oracle_wait_time_seconds_total | 等待事件总时间 | V$SESSION_EVENT | 无明显差异 |
3. 资源使用指标
| 指标名称 | 描述 | Oracle视图 | 19c/21c差异 |
|---|---|---|---|
| oracle_sga_bytes | SGA大小 | V$SGA | 无明显差异 |
| oracle_pga_bytes | PGA大小 | V$PGASTAT | 21c优化PGA管理 |
| oracle_tablespace_used_bytes | 表空间使用量 | DBA_TABLESPACE_USAGE_METRICS | 无明显差异 |
| oracle_tablespace_free_bytes | 表空间空闲量 | DBA_TABLESPACE_USAGE_METRICS | 无明显差异 |
4. I/O指标
| 指标名称 | 描述 | Oracle视图 | 19c/21c差异 |
|---|---|---|---|
| oracle_io_read_bytes_total | 读取字节数 | V$FILESTAT | 21c优化I/O处理 |
| oracle_io_write_bytes_total | 写入字节数 | V$FILESTAT | 21c优化I/O处理 |
| oracle_io_read_time_seconds_total | 读取时间 | V$FILESTAT | 无明显差异 |
| oracle_io_write_time_seconds_total | 写入时间 | V$FILESTAT | 无明显差异 |
自定义指标配置
可以通过修改Exporter配置文件,添加自定义SQL查询来采集特定指标:
yaml
# /opt/oracle_exporter/oracle_exporter.yml
exporters:
oracle:
data_source_name: "username/password@//hostname:1521/SID"
collection_interval: 60s
custom_queries:
- name: custom_table_size
help: "Size of custom tables"
sql: "SELECT table_name, bytes FROM user_segments WHERE segment_type = 'TABLE'"
metrics:
- name: table_size_bytes
type: gauge
labels: [table_name]
value: bytes告警配置
1. 在Prometheus中配置告警规则
yaml
# /etc/prometheus/alert_rules.yml
groups:
- name: oracle_alerts
rules:
- alert: OracleInstanceDown
expr: oracle_up == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Oracle Instance Down"
description: "The Oracle instance {{ $labels.instance }} has been down for more than 5 minutes."
- alert: HighActiveSessions
expr: oracle_sessions_active > 100
for: 5m
labels:
severity: warning
annotations:
summary: "High Active Sessions"
description: "Instance {{ $labels.instance }} has {{ $value }} active sessions, which is above the threshold of 100."
- alert: TablespaceUsageCritical
expr: (oracle_tablespace_used_bytes / oracle_tablespace_bytes_total) * 100 > 90
for: 5m
labels:
severity: critical
annotations:
summary: "Tablespace Usage Critical"
description: "Tablespace {{ $labels.tablespace }} on {{ $labels.instance }} is {{ $value | humanizePercentage }} full."
- alert: HighWaitTime
expr: rate(oracle_wait_time_seconds_total[5m]) > 10
for: 5m
labels:
severity: warning
annotations:
summary: "High Wait Time"
description: "Instance {{ $labels.instance }} has high wait time of {{ $value }} seconds per minute."2. 在Grafana中配置告警
- 登录Grafana控制台
- 导航到仪表盘,选择要添加告警的面板
- 点击"Edit"按钮,切换到"Alert"标签
- 点击"Create Alert Rule",配置告警规则:
- 名称:告警规则名称
- 条件:设置告警触发条件
- 评估期:设置告警评估时间
- 通知渠道:选择之前配置的通知渠道
- 点击"Save"保存告警规则
19c与21c版本差异
| 特性 | 19c | 21c |
|---|---|---|
| 动态性能视图 | 丰富 | 更丰富,新增多个视图 |
| SQL执行计划 | 稳定 | 优化,响应时间更稳定 |
| 并发支持 | 高 | 更高,支持更多并发会话 |
| I/O处理 | 良好 | 优化,I/O性能提升 |
| 监控指标精度 | 秒级 | 支持毫秒级指标 |
| 资源管理 | 完善 | 更完善,支持细粒度资源控制 |
版本差异处理
动态性能视图差异:
- 21c新增了一些动态性能视图,如V$SQL_MONITOR_HISTORY
- Exporter需要支持这些新增视图才能采集完整指标
指标精度差异:
- 21c支持毫秒级指标,监控配置时需要调整阈值
- Grafana仪表盘需要支持毫秒级显示
并发指标差异:
- 21c支持更高并发,需要调整会话数告警阈值
- 资源使用指标需要重新评估正常范围
最佳实践
1. 性能优化
Exporter性能:
- 合理设置采集间隔,避免过于频繁的查询影响数据库性能
- 只采集必要的指标,减少查询开销
- 使用只读用户连接数据库,限制权限
Prometheus性能:
- 合理设置存储保留时间,避免存储过大
- 配置数据压缩,减少存储占用
- 使用Prometheus联邦集群,分散负载
Grafana性能:
- 优化仪表盘查询,减少数据量
- 合理设置刷新间隔,避免频繁查询
- 使用缓存机制,提高查询效率
2. 高可用配置
Exporter高可用:
- 部署多个Exporter实例,避免单点故障
- 使用负载均衡器分发请求
Prometheus高可用:
- 部署Prometheus主备集群
- 使用Thanos或VictoriaMetrics实现高可用
Grafana高可用:
- 部署Grafana集群,使用共享数据库
- 配置负载均衡器分发请求
3. 安全性配置
网络安全:
- 使用HTTPS加密通信
- 配置防火墙,限制访问IP
- 使用VPN或专用网络连接
认证授权:
- 配置Grafana用户认证,启用RBAC
- 为Exporter配置基本认证
- 限制Prometheus访问IP
数据安全:
- 加密存储敏感数据
- 定期备份配置文件和数据
- 配置审计日志,记录访问行为
4. 监控策略
分层监控:
- 基础设施层:监控服务器CPU、内存、磁盘
- 数据库层:监控Oracle实例、性能、资源使用
- 应用层:监控应用响应时间、吞吐量
告警策略:
- 设置多级告警,如警告、严重、紧急
- 配置告警抑制规则,避免告警风暴
- 建立告警处理流程,明确责任人
定期回顾:
- 定期回顾监控指标,优化监控策略
- 定期演练告警处理流程
- 定期更新监控仪表盘,适应业务变化
常见问题(FAQ)
1. Exporter无法连接Oracle数据库
问题:Exporter日志显示"ORA-12541: TNS:no listener"或"ORA-12514: TNS:listener does not currently know of service requested in connect descriptor"
解决方案:
- 检查Oracle监听器是否正常运行:
lsnrctl status - 检查TNS连接字符串是否正确
- 检查数据库服务是否注册到监听器:
lsnrctl services - 检查防火墙是否开放1521端口
- 检查Exporter服务器是否能ping通数据库服务器
2. Prometheus无法获取指标
问题:Prometheus Targets页面显示Oracle Exporter状态为"DOWN"
解决方案:
- 检查Exporter是否正常运行:
systemctl status oracle_exporter - 检查Exporter日志是否有错误信息
- 检查Prometheus配置文件中的target地址和端口是否正确
- 检查防火墙是否开放Exporter端口(默认9161)
- 手动访问Exporter的/metrics端点,检查是否能获取指标:
curl http://exporter_ip:9161/metrics
3. Grafana仪表盘显示无数据
问题:Grafana仪表盘显示"No data"或"Data source is working"但无数据
解决方案:
- 检查Prometheus数据源配置是否正确
- 检查Prometheus是否有数据:在Prometheus UI中执行查询
- 检查Grafana查询语句是否正确
- 检查时间范围是否设置正确
- 检查指标名称是否拼写正确
4. 告警不触发
问题:配置了告警规则,但指标超过阈值时告警不触发
解决方案:
- 检查告警规则配置是否正确
- 检查Prometheus是否加载了告警规则文件
- 检查指标是否符合告警条件
- 检查告警评估周期是否设置正确
- 检查Alertmanager是否正常运行
5. 告警频繁触发
问题:告警频繁触发,导致告警风暴
解决方案:
- 调整告警阈值,使其更合理
- 增加告警持续时间,避免瞬时峰值触发告警
- 配置告警抑制规则,减少重复告警
- 优化监控指标,减少噪声指标
- 建立告警聚合规则,合并相关告警
6. 19c和21c监控配置差异
问题:同一套监控配置在19c和21c上表现不同
解决方案:
- 针对不同版本创建独立的告警规则
- 针对不同版本创建独立的Grafana仪表盘
- 调整指标阈值,适应不同版本的性能特性
- 使用标签区分不同版本的实例
7. 监控系统性能影响
问题:监控系统对Oracle数据库性能产生影响
解决方案:
- 减少采集频率,避免过于频繁的查询
- 减少采集的指标数量,只采集必要指标
- 使用只读用户连接数据库,限制权限
- 优化Exporter查询,减少数据库负载
- 考虑使用Oracle Enterprise Manager Cloud Control进行更高效的监控
总结
Prometheus + Grafana集成监控Oracle数据库是一种强大的监控解决方案,具有开源、灵活、可扩展等优点。通过合理的架构设计、部署配置和最佳实践,可以实现对Oracle数据库的全面监控。
在实际生产环境中,需要根据数据库版本(19c/21c)、规模和业务需求,调整监控配置和告警策略。同时,要注意监控系统本身的性能和可用性,避免对被监控系统产生负面影响。
通过持续优化监控配置和告警策略,可以建立一个高效、可靠的数据库监控系统,确保Oracle数据库的稳定运行和良好性能。
