Grafana + OracleDB Exporter深度监控大屏(docker-compose版)

目录

  1. 环境准备

  2. 整体架构与组件说明

  3. 编写 Docker-Compose 配置

3.1 oracledb_exporter 服务

3.2 Prometheus 服务

3.3 Grafana 服务

  1. 配置 Prometheus 抓取 Oracle 指标

  2. 启动并验证各组件

  3. 在 Grafana 中导入或自建 Dashboard

  4. 自定义大屏展示示例

  5. 结束语


  1. 环境准备
  • Docker ≥ 20.10

  • Docker-Compose ≥ 1.29

  • 能连通 Oracle 实例,且已有只读账号(建议建名为 `metrics`、只授予查询 V$ 视图权限)。

  • 本机开放端口:

  • 9090(Prometheus)

  • 3000(Grafana)

  • 9161(oracledb_exporter 默认端口)

  1. 整体架构与组件说明
  • oracledb_exporter:专门抓取 Oracle 性能指标并暴露 Prometheus 格式的 `/metrics`

  • Prometheus:定时拉取 oracledb_exporter 的指标,存储和告警规则未在本文展开

  • Grafana:读取 Prometheus 存储数据显示大屏

  1. 编写 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(建议启动后立即修改密码)

  1. 配置 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`。

  1. 启动并验证各组件

在上述目录运行:

复制代码
```
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 登录

  1. 在 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])
    ```
  1. 自定义大屏展示示例

下面是一张简单示例架构,分成 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)

  • 大屏模式下可隐藏侧边栏与面包屑,达到可视化运维大屏效果

  1. 结束语

至此,已经完成了:

  • oracledb_exporter 的容器化部署

  • Prometheus 定时拉取 Oracle 指标

  • Grafana 导入/自建 Dashboard 做深度监控大屏

后续可按需:

  • 为 Prometheus 增加 Alert Rule 并接入 Alertmanager

  • 扩展监控其他中间件(MySQL、Redis、Kafka......)

  • 自定义更精细的 Panel 和变量(Template)

祝监控顺利上线!

相关推荐
Sweet_vinegar2 小时前
腾讯轻型服务器外网访问不上?
服务器·docker·腾讯云·arl
jiayong232 小时前
Kubernetes 高级特性与实战面试题详解
容器·贪心算法·kubernetes
jiayong232 小时前
Kubernetes 基础概念面试题详解
云原生·容器·kubernetes
杨靳言先10 小时前
✨【运维实战】内网服务器无法联网?巧用 SSH 隧道实现反向代理访问公网资源 (Docker/PortForwarding)
服务器·docker·ssh
fyakm12 小时前
K8s故障排查:常见问题定位与解决
docker·容器·kubernetes
2301_8107463112 小时前
CKA冲刺40天笔记 - day10 K8S namespace
笔记·容器·kubernetes·k8s
abcy07121312 小时前
k8s ipc-namespace进程间通信隔离类型详解
docker·容器·kubernetes
Justice link12 小时前
K8S基本配置
运维·docker·容器
月亮不营业啦12 小时前
docker 教程(带详细图文)
docker