Prometheus 监控 Oracle 全栈实战:从表空间到等待事件的终极可观测性

Prometheus 监控 Oracle 全栈实战:从表空间到等待事件的终极可观测性
Prometheus 监控 Oracle 全栈实战从表空间到等待事件的终极可观测性Oracle 数据库承载着金融、电信等关键业务其表空间使用率、会话并发、等待事件、SGA 命中率等指标必须 7×24 可视化。Prometheus 生态借助oracledb_exporter将 Oracle 的V$动态性能视图转化为 Prometheus 指标让 DBA 首次能像监控微服务一样监控 Oracle。本文将覆盖从 Exporter 部署到高级等待事件告警的全部细节帮你实现 Oracle 的可观测性跨越。1. 部署 oracledb_exporter推荐使用prometheus-community/oracledb_exporter基于 Go支持 Oracle 11g/12c/19c/21c 及多租户。1.1 创建监控用户并授权以 SYSDBA 身份登录 SQL*Plus创建最小权限的监控账户CREATEUSERprometheus IDENTIFIEDBYStrongPassword;GRANTCONNECT,CREATESESSIONTOprometheus;GRANTSELECTONV_$INSTANCETOprometheus;GRANTSELECTONV_$SYSSTATTOprometheus;GRANTSELECTONV_$SYSTEM_EVENTTOprometheus;GRANTSELECTONV_$SESSIONTOprometheus;GRANTSELECTONV_$WAITCLASSMETRICTOprometheus;GRANTSELECTONV_$PROCESSTOprometheus;GRANTSELECTONDBA_TABLESPACESTOprometheus;GRANTSELECTONDBA_DATA_FILESTOprometheus;GRANTSELECTONDBA_FREE_SPACETOprometheus;GRANTSELECTONV_$DATABASETOprometheus;GRANTSELECTONV_$ASM_DISKGROUPTOprometheus;-- 若使用 ASMGRANTSELECTONV_$ASM_DISKTOprometheus;-- 以下用于捕获 SQL 等待如果启用扩展GRANTSELECTONV_$SQLTOprometheus;GRANTSELECTONV_$SQLAREATOprometheus;如果 Oracle 版本支持也可以直接授予SELECT_CATALOG_ROLE但生产环境建议精细赋权。1.2 安装 Oracle Instant ClientExporter 依赖于 Oracle 客户端库。在监控主机不必是数据库服务器安装 Instant Client# 示例Oracle Linux / CentOSsudoyuminstalloracle-instantclient19.18-basic-19.18.0.0.0-1.x86_64.rpmsudoldconfig或者下载 ZIP 包解压设置环境变量exportLD_LIBRARY_PATH/opt/oracle/instantclient_19_18:$LD_LIBRARY_PATH1.3 运行 exporter二进制部署wgethttps://github.com/prometheus-community/oracledb_exporter/releases/download/v0.5.0/oracledb_exporter-0.5.0.linux-amd64.tar.gztarxzf oracledb_exporter-0.5.0.linux-amd64.tar.gzcdoracledb_exporter-0.5.0.linux-amd64通过环境变量传入连接串支持完整的 Easy Connect 或 TNS 连接exportDATA_SOURCE_NAMEoracle://prometheus:StrongPassword//db-host:1521/ORCLPDB1./oracledb_exporter --web.listen-address:9161Docker 部署推荐因为封装了客户端库dockerrun-d\--nameoracledb_exporter\-p9161:9161\-eDATA_SOURCE_NAMEoracle://prometheus:StrongPassword//192.168.1.50:1521/ORCLPDB1\iamseth/oracledb_exporter:latest访问http://host:9161/metrics应看到大量oracledb_*指标。2. 配置 Prometheus 抓取scrape_configs:-job_name:oraclescrape_interval:30sstatic_configs:-targets:-10.0.0.30:9161labels:instance:oracle-proddb:ORCL重载 Prometheus 后即可查询。3. 核心监控指标与 PromQL分类关键指标含义PromQL 示例实例存活oracledb_up1 可连接并查询直接判断会话数oracledb_sessions_total当前会话总数结合sessions_limit计算使用率活跃事务oracledb_transactions_active_total当前活跃事务数告警阈值等待事件oracledb_wait_time_seconds_total(按 event 标签)各类等待事件累计时间rate(oracledb_wait_time_seconds_total{eventdb file scattered read}[5m])看变化率CPU 使用oracledb_cpu_usage_percentOracle 内部计算的 CPU 利用率直接看趋势表空间使用率oracledb_tablespace_free_bytesoracledb_tablespace_size_bytes表空间空闲/总大小(1 - oracledb_tablespace_free_bytes / oracledb_tablespace_size_bytes) * 100SGA 命中率oracledb_sga_buffer_cache_hit_ratiooracledb_sga_library_cache_hit_ratio缓冲区缓存/库缓存命中率直接查看百分比越低越需要调整PGA 内存oracledb_pga_aggregate_target_bytes和oracledb_pga_total_allocated_bytesPGA 使用情况oracledb_pga_total_allocated_bytes / oracledb_pga_aggregate_target_bytes重做日志oracledb_redo_log_switch_count日志切换次数rate(oracledb_redo_log_switch_count[5m])ASM 磁盘组oracledb_asm_diskgroup_free_mb/total_mbASM 使用率类似表空间公式不同版本 exporter 指标名可能稍有差异最新版大多带oracledb_前缀。利用 Grafana Explore 直接查看oracledb_开头的指标可快速熟悉。等待事件分析是 Oracle 监控的黄金指标重点关注db file sequential read(索引读延迟)db file scattered read(全表扫描)log file sync(提交延迟)enq: TX - row lock contention(行锁争用)4. Grafana 仪表盘推荐Oracle Database OverviewDashboard ID3333最经典适合 12c/19c涵盖会话、等待、表空间、SGA、PGA、IO、RAC 等。Oracle DB Exporter (Prometheus)ID14500更现代适配新版本 exporter。Oracle ASMID4546若使用 ASM。导入后修改变量instance指向你的 Oracle target。5. 告警规则实战groups:-name:oracle_alertsrules:-alert:OracleInstanceDownexpr:oracledb_up 0for:1mlabels:severity:criticalannotations:summary:Oracle 实例 {{ $labels.instance }} 不可用-alert:OracleTablespaceFullexpr:(1-oracledb_tablespace_free_bytes / oracledb_tablespace_size_bytes) * 10090for:5mlabels:severity:criticalannotations:summary:表空间 {{ $labels.tablespace }} 使用率超过 90%-alert:OracleHighSessionUsageexpr:oracledb_sessions_total / oracledb_sessions_limit0.8for:5mlabels:severity:warningannotations:summary:会话数使用率超过 80%-alert:OracleDeadlockexpr:rate(oracledb_deadlocks_total[5m])0labels:severity:criticalannotations:summary:检测到死锁-alert:OracleWaitEventSpikeexpr:rate(oracledb_wait_time_seconds_total{eventlog file sync}[5m])0.2for:10mlabels:severity:warningannotations:summary:log file sync 等待时间 0.2 s/s提交可能变慢-alert:OracleBufferCacheHitRatioLowexpr:oracledb_sga_buffer_cache_hit_ratio 0.95for:10mlabels:severity:warningannotations:summary:Buffer Cache 命中率低于 95%根据实际数据库负载调整阈值。6. 进阶多租户、RAC 和自定义指标6.1 监控容器数据库 (CDB/PDB)oracledb_exporter 默认连接到一个 PDB 或 CDB。若要集中监控多个 PDB可以在连接串中指定每个 PDB 的 service name并运行多个 exporter 实例或使用--custom.metrics参数执行跨 PDB 查询。6.2 Oracle RAC 环境每个 RAC 节点有独立的实例需要为每个节点启动一个 exporter在 Prometheus 中标记不同的instance标签。集群层面的指标如全局缓存融合需自行编写查询并在 exporter 中注入。6.3 自定义业务 SQL 监控利用 exporter 的--custom.metrics参数加载一个 TOML 配置文件来执行自定义 SQL 并将结果作为指标暴露。例如custom_metrics.toml[[metric]] context big_transactions request big_transactions metrics [ { metric_name big_transactions_count, metric_type gauge, value_column cnt } ] queries [ { name big_transactions, sql SELECT count(*) cnt FROM v$transaction WHERE used_ublk 10000 } ]启动时添加--custom.metricscustom_metrics.toml。7. 性能与安全抓取开销默认 30~60 秒抓取一次对 Oracle 压力很小但若启用大量自定义查询需评估 SQL 执行成本。最小权限严格遵循上述授权绝不使用 DBA 角色。网络加密在DATA_SOURCE_NAME中启用 Oracle Native Network Encryption 或 TLS如?ssl_server_dn_matchfalse等参数。Exporter 安全监听端口限定在内网用防火墙保护必要时通过反向代理加 BasicAuth。通过这套方案Oracle 的“黑盒”被彻底打开表空间即将满、会话拥堵、某类等待事件飙升……所有异常都会第一时间变成 Prometheus 告警配合 Grafana 历史趋势让 DBA 从被动救火转向主动预防。你的整个数据库监控体系也因此与服务器、应用监控无缝统一真正实现全栈可观测。