Oracle 作為廣泛使用的關聯式資料庫,其穩定性至關重要,本文介紹如何監控 Oracle
Oracle 監控資料的採集有多種方式,可以使用 Categraf、Cprobe 等各類工具,其原理都是類似的,無非就是連到 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 放到本頁文件裡,讓更多人受益。