性能监控之 Telegraf+InfluxDB+Grafana+Python 实现 Oracle 实时监控
一、前言
监控集成选型的 Telegraf 探针,最近需要实现对 Oracle 数据库的做实时监控,查了下 Telegraf 竟然还不支持 Oracle 监控,WTF?于是自己研究了下,通过 Python + SQL 脚本折中解决了,此文去且当作小结。
二、实现的效果
三、预备知识
1、Oracle 动态性能视图
动态性能视图属于数据字典,它们的所有者为 SYS,并且多数动态性能视图只能由特权用户和 DBA 用户查询。当数据库处于不同状态时,可以访问的动态性能视图有所不同。启动例程时,ORACLE 会自动建立动态性能视图;停止例程时,ORACLE 会自动删除动态性能视图。数据字典信息是从数据文件中获得,而动态性能视图信息是从 SGA 和控制文件取得。所以,两者所反映的信息还是有很大差异的。数据库管理员利用这些动态性能视图,可以了解数据库运行的一些基本信息,为我们进行数据库维护以及数据库性能优化提供一些数据上的支持。所有动态性能视图都是以
V_$
开始的,Oracle 为每个动态性能视图提供了相应的同义词(V$开头)
通过查询 V$FIXED_TABLE
,可以列出所有可用的动态性能视图和动态性能表。
以下是不同类型的指标视图的快速表格比较:
该表的第一行是经典的等待事件和统计视图。以下几行是度量标准视图。度量标准视图是在 Oracle 10g
中引入的。
度量视图计算增量和速率,这极大地简化了解决简单问题的能力,比如 “现在我的数据库的 I/O 速率是多少?” 这个问题,在 10g 之前,处理起来出奇的乏味。要回答这个问题,你必须查询 v$sysstat
,例如:
但是仅查询一次 v$sysstat
不能解决问题,而是“自数据库启动以来已完成了多少 I / O?”的问题。要回答原始问题,必须两次查询 v$sysstat
并接受两个值之间的增量:
在时间 A 取值
在时间 B 取值
Delta = (B-A)
and/or get Rate = (B-A)/elapsed time
获得这些差值和速率可能是一项艰巨的工作。然后 10g Oracle
引入了度量标准表,这些度量表可以在一个查询中解决问题。
等待事件视图为(系统级别)
V$SYSTEM_EVENT
– 自启动以来累积的等待事件V$EVENTMETRIC
- 等待事件增量持续 60 秒DBA_HIST_SYSTEM_EVENT
– 自启动以来累计的上周按快照(小时)的等待事件
等待事件汇总到称为等待类的组中。对于等待类,有以下视图:
V$SYSTEM_WAIT_CLASS
– 自启动以来累积V$WAITCLASSMETRIC
– 持续 60 秒增量V$WAITCLASSMETRIC_HISTORY
– 最后一小时的 60 秒增量
注意:DBA_HIST_WAITCLASSMETRIC_HISTORY
用于警报或基准,而不是日常值。
其他的就不一一展开了,具体可以参考下文:http://datavirtualizer.com/wait-event-and-wait-class-metrics-vs-vsystem_event/
2、cx_Oracle
cx_Oracle 是一个 Python 扩展模块,可以访问 Oracle 数据库。它符合 Python 数据库 API 2.0 规范。
2.1、基本要求
要在 Python 和 Oracle 数据库中使用 cx_Oracle 7
,需要满足以下条件:
Python 2.7 或 3.5 及更高版本。
Oracle 客户端库。
Oracle 数据库。Oracle 的标准客户端 - 服务器版本互操作性允许
cx_Oracle
连接到较旧和较新的数据库。(推荐)
2.2、快速安装
在 Linux 上安装 cx_Oracle 的一般方法是使用 Python 的 Pip 包从 PyPI 安装 cx_Oracle
:
从 PyPI 安装 cx_Oracle:
将 Oracle 客户端库添加到操作系统库搜索路径,例如 Linux 的 LD_LIBRARY_PATH
如果你的数据库位于远程计算机上,请下 适用于你的操作系统体系结构的免费 Oracle Instant Client “Basic” 或 “Basic Light” 包
至于具体的 Oracle Client
安装,可以参考下文:https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html#installing-cx-oracle-on-linux
四、解决方案
Python:收集 Oracle 指标数据
Telegraf:收集 Python 打印的性能指标数据
InfluxDB:存储时间序列 Oracle 性能指标数据
Grafana:可视化 Dashboard
1、安装
具体的安装可以参考官方文档:
Telegraf:https://docs.influxdata.com/telegraf/v1.12/introduction/installation/
InfluxDB:https://docs.influxdata.com/influxdb/v1.7/introduction/installation/
Grafanak:https://grafana.com/docs/installation/rpm/
2、具体设置
在 InfluxDB 中创建一个 Telegraf 数据库:
编写 python+sql 脚本以收集 oracle 指标。脚本的输出内容很重要,必须是 InfluxDB line-protocol。该脚本查询 v$ SYSMETRIC
和 v$eventmetric
,获得最后一分钟时,等待类和等待事件指标。
python 代码是:
输出格式化为 InfluxDB line-protocol。
定义一个 shell 脚本执行 Python 脚本
在 oracle 主机上,配置 telegraf 以 60 秒的间隔执行 python sh,然后将输出发送到 InfluxDB。编辑 /etc/telegraf/telegraf.conf
配置文件:
启动 telegraf:
3、数据可视化
查询 InfluxDB 数据库
Grafana 效果图如下:
五、小结
通过结合 Python 脚本开发的方式,我们可以扩展部分 Telegraf 不支持的监控项,本文简单提供了一种思路。
本文资料:
https://github.com/zuozewei/blog-example/tree/master/Performance-testing/03-performance-monitoring/telegraf-Influxdb-grafana-python-oracle
参考资料:
[1]: https://cx-oracle.readthedocs.io/en/latest/index.html
[2]: http://datavirtualizer.com/wait-event-and-wait-class-metrics-vs-vsystem_event/
[3]: https://docs.influxdata.com/influxdb/v1.7/write_protocols/
版权声明: 本文为 InfoQ 作者【zuozewei】的原创文章。
原文链接:【http://xie.infoq.cn/article/c3d60b7098525beac98431a9b】。未经作者许可,禁止转载。
评论