Oracle 数据库在行业内应用广泛,通常存放的非常重要的数据,监控是必不可少的,本文使用 Cprobe 采集 Oracle 监控数据,极致简单,分享给大家。

安装配置 Oracle

简单起见,我使用 Docker 启动 Oracle,命令如下:

docker run -d --name oracle -p 1022:22 -p 18080:8080 -p 1521:1521 wnameless/oracle-xe-11g-r2

如上命令启动之后,Oracle 的监听端口是 1521,用户名/密码是 system/oracle,数据库 SID 是 xe,要监控 Oracle,首先得有账号连上去执行 SQL,所以这些连接信息得记住喽,待会要用。

如果是对既有的 Oracle 做监控,需要创建账号并分派权限,比如:

-- Create the monitoring user "cprobe"
CREATE USER cprobe IDENTIFIED BY <YOUR-PASSWORD>; -- Grant the "cprobe" user the required permissions
GRANT CONNECT TO cprobe;
GRANT SELECT ON SYS.GV_$RESOURCE_LIMIT to cprobe;
GRANT SELECT ON SYS.V_$SESSION to cprobe;
GRANT SELECT ON SYS.V_$WAITCLASSMETRIC to cprobe;
GRANT SELECT ON SYS.GV_$PROCESS to cprobe;
GRANT SELECT ON SYS.GV_$SYSSTAT to cprobe;
GRANT SELECT ON SYS.V_$DATAFILE to cprobe;
GRANT SELECT ON SYS.V_$ASM_DISKGROUP_STAT to cprobe;
GRANT SELECT ON SYS.V_$SYSTEM_WAIT_CLASS to cprobe;
GRANT SELECT ON SYS.DBA_TABLESPACE_USAGE_METRICS to cprobe;
GRANT SELECT ON SYS.DBA_TABLESPACES to cprobe;
GRANT SELECT ON SYS.GLOBAL_NAME to cprobe;

安装 Cprobe

Cprobe 是一个探针采集器,支持常见数据库、中间件的采集,比如 MySQL、Redis、MongoDB、Oracle、Kafka、ElasticSearch 等,最新版本是 v0.7.1,我们从 github releases 页面下载:

https://github.com/cprobe/cprobe/releases/tag/v0.7.1

我是 arm 的 linux,所以下载的是 cprobe-v0.7.1-linux-arm64.tar.gz,如果你是 x86 的,应该下载 amd64 那个包。如果你从 github 下载有困难,我这里提供一个国内的下载地址:

https://download.flashcat.cloud/cprobe-v0.7.1-linux-arm64.tar.gz
https://download.flashcat.cloud/cprobe-v0.7.1-linux-amd64.tar.gz

解压缩进入对应目录,执行 install 和 start 命令即可:

./cprobe -install
./cprobe -start
./cprobe -status

安装完成。

配置 Cprobe 采集

首先配置要采集的 Oracle 的地址,进入刚才 cprobe 解压出的目录,编辑 conf.d/oracledb/main.yaml,修改如下:

global:
scrape_interval: 15s
external_labels:
cplugin: 'oracle' scrape_configs:
- job_name: 'oracle'
static_configs:
- targets:
- 10.99.1.107:1521/xe # ip:port/service
scrape_rule_files:
- 'link.toml'
- 'comm.toml'

上面的 IP 是我的 Oracle 的 IP,你要根据你的环境做调整。这个 main.yaml 又引用了 link.toml 和 comm.toml,在 link.toml 中配置认证信息,比如:

[global]
username = "system"
password = "oracle"
options = {}

comm.toml 的内容不用动。监控 Oracle 的原理就是连上去执行一堆 SQL,comm.toml 中提前帮你准备好了一堆 SQL,其实还有 cust.toml 有更多 SQL,看你需求,如果 cust.toml 中的监控项你也需要,那就把 cust.toml 也配置到 main.yaml 中,如下:

global:
scrape_interval: 15s
external_labels:
cplugin: 'oracle' scrape_configs:
- job_name: 'oracle'
static_configs:
- targets:
- 10.99.1.107:1521/xe # ip:port/service
scrape_rule_files:
- 'link.toml'
- 'comm.toml'
- 'cust.toml'

下面我们测试一下,看看是否真的能够采集到数据:

./cprobe -no-writer -no-httpd -plugins oracledb

正常来讲,会输出很多指标,类似下面这样:

./cprobe -no-writer -no-httpd -plugins oracledb
2023-12-25T10:27:33.868Z info /Users/ulric/works/cprobe/lib/logger/flag.go:12 build version: 0.0.1-2023-12-25-08-39-11
2023-12-25T10:27:33.868Z info /Users/ulric/works/cprobe/lib/logger/flag.go:13 command-line flags
2023-12-25T10:27:33.868Z info /Users/ulric/works/cprobe/lib/logger/flag.go:20 -no-httpd="true"
2023-12-25T10:27:33.868Z info /Users/ulric/works/cprobe/lib/logger/flag.go:20 -no-writer="true"
2023-12-25T10:27:33.868Z info /Users/ulric/works/cprobe/lib/logger/flag.go:20 -plugins="oracledb"
2023-12-25T10:27:33.868Z info /Users/ulric/works/cprobe/lib/runner/runner.go:25 hostname: ulric-flashcat.local
2023-12-25T10:27:33.868Z info /Users/ulric/works/cprobe/lib/runner/runner.go:26 runtime.fd_limits: (soft=61440, hard=unlimited)
2023-12-25T10:27:33.868Z info /Users/ulric/works/cprobe/lib/runner/runner.go:27 runtime.vm_limits: (soft=unlimited, hard=unlimited)
>> __name__=oracledb_sessions_value cplugin=oracle instance=10.99.1.107:1521/xe job=oracle status=ACTIVE type=BACKGROUND 1703500053881 22.000000
>> __name__=oracledb_sessions_value cplugin=oracle instance=10.99.1.107:1521/xe job=oracle status=ACTIVE type=USER 1703500053881 1.000000
>> __name__=oracledb_resource_current_utilization cplugin=oracle instance=10.99.1.107:1521/xe job=oracle resource_name=processes 1703500053881 29.000000
>> __name__=oracledb_resource_limit_value cplugin=oracle instance=10.99.1.107:1521/xe job=oracle resource_name=processes 1703500053881 100.000000
...

上面的各个参数的含义:

  • -no-writer 表示不写入 TSDB,只是输出到控制台
  • -no-httpd 表示 Cprobe 不启动 HTTP 服务
  • -plugins oracledb 表示只启动 oracledb 插件,如果你还想启动其他插件,可以用逗号分隔,比如 -plugins oracledb,mysql,redis,如果想启动所有插件,就不加 -plugins 参数即可,默认就是启动所有插件

配置 Cprobe 写入 TSDB

监控数据采集到之后,需要写入 TSDB,Cprobe 在 conf.d 目录下提供 writer.yaml 配置文件,把其中 writers.url 部分改成你自己的时序库的 remote write 地址即可。

  • 如果时序库是 Prometheus,url 通常是:http://IP:9090/api/v1/write
  • 如果时序库是单机版本的 VictoriaMetrics,url 通常是:http://IP:8428/api/v1/write
  • 如果时序库是集群版本的 VictoriaMetrics,url 通常是:http://IP:8480/insert/0/prometheus/api/v1/write
  • 如果想把数据直接推给夜莺,url 通常是:http://IP:17000/prometheus/v1/write

配置完成之后,重启 Cprobe 即可:

./cprobe -restart

writer.yaml 的改动需要重启 Cprobe 才能生效。如果是修改各个插件目录下的配置,改完之后发给 HUP 信号给 Cprobe,Cprobe 会自动 reload 配置,不需要重启。比如:

kill -HUP `pidof cprobe`

仪表盘

笔者整理了 Oracle 的 Grafana 仪表盘,分享给大家,不过 Oracle 的指标都是通过配置文件自定义 SQL 采集的,指标差别可能比较大,这个仪表盘只能是仅供参考了:

https://github.com/cprobe/cprobe/blob/main/conf.d/oracledb/doc/dash/grafana_oracledb_01.json

告警规则暂未整理,关注我,回头整理了再分享给大家。上文提到的方法如果你在实践过程中遇到问题,欢迎留言交流哈。

快速监控 Oracle 数据库的更多相关文章

  1. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  2. 搜索表字段包含某字符串的SQL和监控Oracle数据库的SQL。

    1.第一个SQL 背景:需要找到SQL Server数据库中,包含某个字符串的表,输出表和包含该字符串的列. )='=' --这里填要搜索的字符串 DECLARE @sql NVARCHAR(MAX) ...

  3. 利用zabbix监控oracle数据库

    一.概述 zabbix是一款非常强大,同时也是应用最为广泛的开源监控软件,本文将给大家介绍如何利用zabbix监控oracle数据库. 二.环境介绍 以下是我安装的环境,实际部署时并不需要跟我的环境一 ...

  4. 8个DBA最常用的监控Oracle数据库的常用shell脚本

    本文介绍了8个常用的监控数据shell脚本.首先回顾了一些DBA常用的Unix命令,以及解释了如何通过Unix Cron来定时执行DBA脚本.网上也有好多类似的文章,但基本上都不能正常运行,花点时间重 ...

  5. 【Zabbix】zabora监控Oracle数据库

    zabora监控Oracle数据库 它作为一个开源项目,通过shell脚本有效的监控Oracle基础指标.本文档旨在通过实战,在Zabbix 3.0版本之下,监控生产环境下的多台Oracle数据库. ...

  6. Zabbix+Orabbix监控oracle数据库表空间

    Orabbix 是设计用来为 zabbix 监控 Oracle 数据库的插件,它提供多层次的监控,包括可用性和服务器性能指标. 它提供了从众多 oracle 实例采集数据的有效机制,进而提供此信息的监 ...

  7. Spotlight监控Oracle数据库的链接创建

    最近在做性能测试时,由于要挂载空间数据,开发人员直接将所有业务表都挂到了Oracle数据库中.最近做了几次测试发现响应时间和吞吐量都不是很理想,进行一番分析后怀疑可能在Oracle中出现问题,因此再网 ...

  8. Zabbix通过Orabbix监控Oracle数据库

    一.背景 公司业务使用的是一直Oracle数据库,因为多次出现表空间满的时候不能及时发现,每次都是业务组的人员通知处理,这样下来DBA这边就比较被动,所以老大要求监控表空间剩余大小并且当剩余过小时能够 ...

  9. 【风哥干货】快速解决Oracle数据库故障必备的20个脚本与命令

    1.操作系统性能(通常故障出现时最先检查的内容)top.topas.vmstat.iostat.free.nmon 2.万能重启方法 如应急情况,需要重启数据库:tail -100f <对应路径 ...

  10. 分享知识-快乐自己:Excel快速导入Oracle 数据库

    需求: oracle 数据库有一个student表,现有一个excel表:student.xlsx,需导入oracle数据库student表中. student表的拥有者是c##MLQ1  密码为:x ...

随机推荐

  1. 牛客网-SQL专项训练12

    ①SQL中属于分组查询的语句是?(C) 解析: A Where: 条件筛选B 联盟链: 非相关内容C Group By:分组D Having: 条件筛选 区块链大致可以分为公有链(Public Blo ...

  2. EasyNLP带你玩转CLIP图文检索

    简介: 本文简要介绍CLIP的技术解读,以及如何在EasyNLP框架中玩转CLIP模型. 作者:熊兮.章捷.岑鸣.临在 导读 随着自媒体的不断发展,多种模态数据例如图像.文本.语音.视频等不断增长,创 ...

  3. 长文解析:作为容器底层技术的半壁江山, cgroup如何突破并发创建瓶颈?

    ​简介: io_uring 作为一种新型高性能异步编程框架,代表着 Linux 内核未来的方向,当前仍处于快速发展中.阿里云联合 InfoQ 发起<io_uring 介绍及应用实践>的技术 ...

  4. [FAQ] Smart Contract: xxx has not been deployed to detected network (network/artifact mismatch)

    在前端用 web3 与 contract 交互时,需要获取到已部署的 contract 实例进行操作,如果没有获取到就会报此错. 比如如下的 .deployed() 阶段: /* 伪代码 */ con ...

  5. Docker的Portainer认识、安装、使用

    一.认识 docker的图形化界面 Portainer 是一个轻量级的容器管理界面,可以让用户更轻松地管理 Docker 容器.镜像.网络和数据卷等.Portainer 提供了一个用户友好的 Web ...

  6. [ABC345D] Tiling 位运算の极致运用

    [ABC345D] Tiling 原题解地址:Editorial by Kiri8128 神写法. 将 \(H \times W\) 的网格展开为 \(H \times (W + 1)\) 的序列, ...

  7. Codeforces Round 932 (Div. 2) ABCD

    A. Entertainment in MAC 题意:给定字符串 \(S\),有两种操作,每次操作其中之一: 把 \(S\) 变为 \(S\) 的翻转 \(T\). 把 \(S\) 变为 \(S + ...

  8. SAP集成技术(十三)SAP Cloud Integration

    异构应用环境给IT带来了各种问题.在这种情况下,混合集成环境尤其受到影响.同时,对于建立在混合IT环境上的数字化转型项目,数据集成和跨系统访问已经开始发挥核心作用.为了满足不断增长的需求,SAP Bu ...

  9. 七、Doris Colocation Join

    Colocation Join 是在 Doris 0.9 版本中引入的新功能.旨在为某些 Join 查询提供本地性优化,来减少数据在节点间的传输耗时,加速查询. 1.基本理论 Join 的常见连接类型 ...

  10. 深入了解 Java 字节码

    1.1 什么是字节码? Java 在刚刚诞生之时曾经提出过一个非常著名的口号: "一次编写,到处运行(write once,run anywhere)",这句话充分表达了软件开发人 ...