目录
-
环境准备
-
整体架构与组件说明
-
编写 Docker-Compose 配置
3.1 oracledb_exporter 服务
3.2 Prometheus 服务
3.3 Grafana 服务
-
配置 Prometheus 抓取 Oracle 指标
-
启动并验证各组件
-
在 Grafana 中导入或自建 Dashboard
-
自定义大屏展示示例
-
结束语
- 环境准备
-
Docker ≥ 20.10
-
Docker-Compose ≥ 1.29
-
能连通 Oracle 实例,且已有只读账号(建议建名为 `metrics`、只授予查询 V$ 视图权限)。
-
本机开放端口:
-
9090(Prometheus)
-
3000(Grafana)
-
9161(oracledb_exporter 默认端口)
- 整体架构与组件说明
-
oracledb_exporter:专门抓取 Oracle 性能指标并暴露 Prometheus 格式的 `/metrics`
-
Prometheus:定时拉取 oracledb_exporter 的指标,存储和告警规则未在本文展开
-
Grafana:读取 Prometheus 存储数据显示大屏
- 编写 Docker-Compose 配置
在任意目录新建 `docker-compose.yml`,内容如下:
```yaml
version: "3.7"
services:
# 1) OracleDB Exporter
oracledb-exporter:
image: quay.io/prometheuscommunity/oracledb-exporter:latest
container_name: oracledb-exporter
restart: always
ports:
- "9161:9161"
environment:
# 替换成你的 Oracle 连接信息
- DATA_SOURCE_NAME=metrics/metrics_pwd@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.10)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))
# 采集频率(秒),若省略默认为 60
- COLLECTION_INTERVAL=30
networks:
- monitoring
# 2) Prometheus
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: always
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
ports:
- "9090:9090"
networks:
- monitoring
# 3) Grafana
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: always
user: "472" # grafana 默认 uid
volumes:
- grafana_data:/var/lib/grafana
ports:
- "3000:3000"
networks:
- monitoring
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin # 默认管理员密码
volumes:
prometheus_data:
grafana_data:
networks:
monitoring:
driver: bridge
```
3.1 oracledb_exporter 服务
-
使用官方社区镜像 `quay.io/prometheuscommunity/oracledb-exporter`
-
`DATA_SOURCE_NAME` 格式与官方相同,`user/password@(DESCRIPTION=...)`
-
`COLLECTION_INTERVAL` 可选,单位秒
3.2 Prometheus 服务
-
挂载当前目录下的 `prometheus.yml`
-
持久化数据到 `prometheus_data`
-
暴露 9090 端口供 Grafana 拉取
3.3 Grafana 服务
-
使用官方镜像
-
持久化数据到 `grafana_data`
-
默认账号 admin/admin(建议启动后立即修改密码)
- 配置 Prometheus 抓取 Oracle 指标
在 `docker-compose.yml` 同级目录,创建 `prometheus.yml`:
```yaml
global:
scrape_interval: 30s
evaluation_interval: 30s
scrape_configs:
# Prometheus 自身监控
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# OracleDB Exporter
- job_name: 'oracledb'
metrics_path: /metrics
static_configs:
- targets: ['oracledb-exporter:9161']
# 可根据需要打标签
relabel_configs:
- source_labels: [__address__]
target_label: instance
```
> 注意:`static_configs.targets` 中使用 `docker-compose` 服务名 `oracledb-exporter:9161`。
- 启动并验证各组件
在上述目录运行:
```
docker-compose up -d
```
等待数秒后:
- oracledb_exporter `/metrics` 验证
`curl http://localhost:9161/metrics | head -n 20`
- Prometheus targets
浏览器访问 `http://<服务器IP>:9090/targets`,确保 `oracledb` job 显示 UP
- Grafana 登录
浏览器访问 `http://<服务器IP>:3000`,admin/admin 登录
- 在 Grafana 中导入或自建 Dashboard
方式一:导入社区现成 Dashboard
1)登录 Grafana → 左侧 "+" → "Import"
2)输入社区编号(例如 10991、11107 等与 Oracle 相关的 Dashboard)
3)选择数据源 Prometheus → 点击导入
方式二:自建大屏
-
新建 Dashboard → 添加 Row/Panel
-
查询示例:
• 活跃会话数
```
promql
oracledb_database_active_sessions
```
• 平均执行时间
```promql
oracledb_sql_avg_elapsed_time{instance="oracledb-exporter:9161"}
```
• 表空间使用率
```promql
oracledb_tablespace_used_percent
```
• PGA/SGA 大小
```promql
oracledb_sga_target_size_bytes
oracledb_pga_aggregate_target_size_bytes
```
• CPU 与 I/O 活动
```promql
rate(oracledb_sysmetric_cpu_usage_percent[1m])
rate(oracledb_sysmetric_physical_reads_per_sec[1m])
```
- 自定义大屏展示示例
下面是一张简单示例架构,分成 2×2 四格 Panel:
| Panel | PromQL 示例 |
|-------------------------|-------------------------------------------------------------------|
| Active Sessions | oracledb_database_active_sessions |
| Tablespace Used % | oracledb_tablespace_used_percent |
| SQL 平均执行时长(ms) | oracledb_sql_avg_elapsed_time * 1000 |
| CPU/Read Rate (1m) | rate(oracledb_sysmetric_cpu_usage_percent[1m]) vs rate(oracledb_sysmetric_physical_reads_per_sec[1m]) |
-
设置 Panel 类型:Graph、Gauge、Bar Gauge、Stat 视需求
-
在 Dashboard Setting → Auto-reload 开启自动刷新(例如 30s)
-
大屏模式下可隐藏侧边栏与面包屑,达到可视化运维大屏效果
- 结束语
至此,已经完成了:
-
oracledb_exporter 的容器化部署
-
Prometheus 定时拉取 Oracle 指标
-
Grafana 导入/自建 Dashboard 做深度监控大屏
后续可按需:
-
为 Prometheus 增加 Alert Rule 并接入 Alertmanager
-
扩展监控其他中间件(MySQL、Redis、Kafka......)
-
自定义更精细的 Panel 和变量(Template)
祝监控顺利上线!