Oracle 作為廣泛使用的關聯式資料庫,其穩定性至關重要,本文介紹如何監控 Oracle

Oracle 監控資料的採集有多種方式,可以使用 CategrafCprobe 等各類工具,其原理都是類似的,無非就是連到 Oracle 實例上,執行相關命令取得監控資料。本文以 Categraf v0.4.15 以上版本為例,介紹 Oracle 監控資料的採集設定方法。

Oracle 外掛設定概述

Categraf 的所有外掛設定,預設都在 conf 目錄下,Oracle 的設定目錄是 conf/input.oracle,該目錄下有兩個設定檔:

  • oracle.toml:Oracle 外掛的主設定檔,設定不同 Oracle 實例的連線、認證資訊;Categraf 可以同時連線多個 Oracle 實例,設定檔中可以設定多個實例的連線資訊,即不同的 [[instances]] 設定段。
  • metric.toml:Oracle 外掛透過執行各類 SQL 採集 Oracle 監控資料,有些 SQL 是通用的,希望所有的 Oracle 實例都去執行採集,有些 SQL 是特定實例的,只有特定實例才去執行採集,通用的 SQL 都在 metric.toml 中設定,特定實例的 SQL 在 oracle.toml 中設定。

oracle.toml

oracle.toml 設定範例如下:

# 默认的采集频率,下面配置的所有的 oracle 的实例默认都会使用这个采集频率
# 如果某个实例需要不同的采集频率,可以在实例配置中使用 interval_times 来调整
# 各个实例的最终采集频率 = interval * interval_times
# 如果这里的 interval 也没有配置,那就使用 Categraf 全局配置中的 interval(默认是 15 秒)
# 单位是秒,所以默认是 15 秒采集一次监控数据
interval = 15

# 这是第一个 Oracle 实例的配置,使用一大块 [[instances]] 来配置
# [[instances]] 使用双中括号包裹,双中括号在 TOML 中表示数组
# 即可以配置多个 [[instances]] 区块,也就是可以配置多个 Oracle 实例
# 建议不要使用 sys 用户来进行采集,因为在 oracle 12c 及之后版本,go-ora 的 ping 方法在判断 oracle up 状态时,不准确
[[instances]]
address = "10.1.2.3:1521/orcl"
username = "monitor"
password = "123456"
is_sys_dba = false
is_sys_oper = false
disable_connection_pool = false
max_open_connections = 5
# 这个实例最终的采集频率是 interval * interval_times
interval_times = 1
# 这里可以为当前实例附加一些维度标签,这些维度标签最终会附加到当前实例的监控数据上面
labels = { region="cloud" }

# instances 下面的 metrics 配置段,表示当前实例需要采集的监控数据
# 注意,这个 metrics 配置段是当前实例特有的,其他实例不会去执行这些 SQL
[[instances.metrics]]
mesurement = "sessions"
label_fields = [ "status", "type" ]
metric_fields = [ "value" ]
timeout = "3s"
request = '''
SELECT status, type, COUNT(*) as value FROM v$session GROUP BY status, type
'''

[[instances]]
address = "192.168.10.10:1521/orcl"
username = "monitor"
password = "123456"
is_sys_dba = false
is_sys_oper = false
disable_connection_pool = false
max_open_connections = 5
labels = { region="local" }

# 第二个实例下面没有对应的 instances.metrics 配置段,说明没有独属于这个实例的采集 SQL
# 即:第二个实例仅会执行 metric.toml 中配置的通用 SQL

Oracle 監控資料採集原理:週期性執行 SQL,把返回的結果轉換為 Prometheus 時序資料格式,傳送到伺服端。SQL 執行的結果是多行多列的二維表格,那我們就需要透過設定告訴 Categraf,哪些列作為時序資料的標籤(label),哪些列作為時序資料的值(metric value)。

  • mesurement: 自訂的一個指標前綴
  • request: 查詢監控資料的 SQL 語句
  • label_fields: SQL 查到的內容,會有多列,哪些列作為時序資料的 label
  • metric_fields: SQL 查到的內容,會有多列,哪些列作為時序資料的值
  • field_to_append: 是否要把某列的內容附到監控指標名稱裡,作為指標的後綴
  • timeout: SQL 執行的逾時時間
  • ignore_zero_result: 是否忽略查詢結果中值為 0 的行,如果不忽略(設定為 false)且沒有查到資料的話會列印一行錯誤日誌,如果忽略了(設定為 true),則查不到資料的時候不會列印錯誤日誌

metric.toml

這裡設定了一些常用的 Oracle 監控資料採集 SQL,Categraf 會定期執行這些 SQL,取得所有 Oracle 實例的監控資料。這裡的 SQL 具體含義、作用,可能 Oracle DBA 才比較熟悉,歡迎各位 Oracle DBA 寫文章分享這些 SQL 的含義和作用,完事可以把您的文章連結提個 PR 放到本頁文件裡,讓更多人受益。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云