|
| 1 | +--- |
| 2 | +title: "Oracle" |
| 3 | +description: "Oracle 监控数据的采集有多种方式,可以使用 Categraf、Cprobe 等各类工具,其原理都是类似的,无非就是连到 Oracle 实例上,执行相关命令获取监控数据" |
| 4 | +date: 2025-07-25T17:41:46+08:00 |
| 5 | +lastmod: 2025-07-25T17:41:46+08:00 |
| 6 | +draft: false |
| 7 | +images: [] |
| 8 | +menu: |
| 9 | + docs: |
| 10 | + parent: "practice" |
| 11 | +weight: 5400 |
| 12 | +toc: true |
| 13 | +--- |
| 14 | + |
| 15 | +> 对于监控系统,基础功能的强弱确实非常关键,但是如何在不同的场景落地实践,则更为关键。在《监控实践》章节,搜罗各类监控实践经验,会以不同的组件分门别类,您如果对某个组件有好的实践经验,欢迎提 PR,把您的文章链接附到对应的组件目录下。 |
| 16 | +
|
| 17 | +Oracle 监控数据的采集有多种方式,可以使用 [Categraf](https://github.com/flashcatcloud/categraf)、[Cprobe](https://github.com/cprobe/cprobe) 等各类工具,其原理都是类似的,无非就是连到 Oracle 实例上,执行相关命令获取监控数据。本文以 Categraf 为例,介绍 Oracle 监控数据的采集配置方法。 |
| 18 | + |
| 19 | +## Oracle 插件配置概述 |
| 20 | + |
| 21 | +Categraf 的所有插件配置,默认都在 `conf` 目录下,Oracle 的配置目录是 `conf/input.oracle`,该目录下有两个配置文件: |
| 22 | + |
| 23 | +- `oracle.toml`:Oracle 插件的主配置文件,配置不同 Oracle 实例的连接、认证信息;Categraf 可以同时连接多个 Oracle 实例,配置文件中可以配置多个实例的连接信息,即不同的 `[[instances]]` 配置段。 |
| 24 | +- `metric.toml`:Oracle 插件通过执行各类 SQL 采集 Oracle 监控数据,有些 SQL 是通用的,希望所有的 Oracle 实例都去执行采集,有些 SQL 是特定实例的,只有特定实例才去执行采集,通用的 SQL 都在 `metric.toml` 中配置,特定实例的 SQL 在 `oracle.toml` 中配置。 |
| 25 | + |
| 26 | +## oracle.toml |
| 27 | + |
| 28 | +oracle.toml 配置样例如下: |
| 29 | + |
| 30 | +```toml |
| 31 | +# 默认的采集频率,下面配置的所有的 oracle 的实例默认都会使用这个采集频率 |
| 32 | +# 如果某个实例需要不同的采集频率,可以在实例配置中使用 interval_times 来调整 |
| 33 | +# 各个实例的最终采集频率 = interval * interval_times |
| 34 | +# 如果这里的 interval 也没有配置,那就使用 Categraf 全局配置中的 interval(默认是 15 秒) |
| 35 | +# 单位是秒,所以默认是 15 秒采集一次监控数据 |
| 36 | +interval = 15 |
| 37 | + |
| 38 | +# 这是第一个 Oracle 实例的配置,使用一大块 [[instances]] 来配置 |
| 39 | +# [[instances]] 使用双中括号包裹,双中括号在 TOML 中表示数组 |
| 40 | +# 即可以配置多个 [[instances]] 区块,也就是可以配置多个 Oracle 实例 |
| 41 | +[[instances]] |
| 42 | +address = "10.1.2.3:1521/orcl" |
| 43 | +username = "monitor" |
| 44 | +password = "123456" |
| 45 | +is_sys_dba = false |
| 46 | +is_sys_oper = false |
| 47 | +disable_connection_pool = false |
| 48 | +max_open_connections = 5 |
| 49 | +# 这个实例最终的采集频率是 interval * interval_times |
| 50 | +interval_times = 1 |
| 51 | +# 这里可以为当前实例附加一些维度标签,这些维度标签最终会附加到当前实例的监控数据上面 |
| 52 | +labels = { region="cloud" } |
| 53 | + |
| 54 | +# instances 下面的 metrics 配置段,表示当前实例需要采集的监控数据 |
| 55 | +# 注意,这个 metrics 配置段是当前实例特有的,其他实例不会去执行这些 SQL |
| 56 | +[[instances.metrics]] |
| 57 | +mesurement = "sessions" |
| 58 | +label_fields = [ "status", "type" ] |
| 59 | +metric_fields = [ "value" ] |
| 60 | +timeout = "3s" |
| 61 | +request = ''' |
| 62 | +SELECT status, type, COUNT(*) as value FROM v$session GROUP BY status, type |
| 63 | +''' |
| 64 | + |
| 65 | +[[instances]] |
| 66 | +address = "192.168.10.10:1521/orcl" |
| 67 | +username = "monitor" |
| 68 | +password = "123456" |
| 69 | +is_sys_dba = false |
| 70 | +is_sys_oper = false |
| 71 | +disable_connection_pool = false |
| 72 | +max_open_connections = 5 |
| 73 | +labels = { region="local" } |
| 74 | + |
| 75 | +# 第二个实例下面没有对应的 instances.metrics 配置段,说明没有独属于这个实例的采集 SQL |
| 76 | +# 即:第二个实例仅会执行 metric.toml 中配置的通用 SQL |
| 77 | +``` |
| 78 | + |
| 79 | +Oracle 监控数据采集原理:周期性执行 SQL,把返回的结果转换为 Prometheus 时序数据格式,发送到服务端。SQL 执行的结果是多行多列的二维表格,那我们就需要通过配置告诉 Categraf,哪些列作为时序数据的标签(label),哪些列作为时序数据的值(metric value)。 |
| 80 | + |
| 81 | +- mesurement: 自定义的一个指标前缀 |
| 82 | +- request: 查询监控数据的 sql 语句 |
| 83 | +- label_fields: sql 查到的内容,会有多列,哪些列作为时序数据的 label |
| 84 | +- metric_fields: sql 查到的内容,会有多列,哪些列作为时序数据的值 |
| 85 | +- field_to_append: 是否要把某列的内容附到监控指标名称里,作为指标的后缀 |
| 86 | +- timeout: sql 执行的超时时间 |
| 87 | +- ignore_zero_result: 是否忽略查询结果中值为 0 的行,如果不忽略(设置为 false)且没有查到数据,会打印一行错误日志,如果忽略了(设置为 true),则查不到数据的时候不会打印错误日志 |
| 88 | + |
| 89 | +## metric.toml |
| 90 | + |
| 91 | +这里配置了一些常用的 Oracle 监控数据采集 SQL,Categraf 会定期执行这些 SQL,获取所有 Oracle 实例的监控数据。这里的 SQL 具体含义、作用,可能 Oracle DBA 才比较熟悉,欢迎各位 Oracle DBA 写文章分享这些 SQL 的含义和作用,完事可以把您的文章链接提个 PR 放到本页文档里,让更多人受益。 |
0 commit comments