前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[打造自己的监控系统]使用Django获取Oracle系统状态数据并存放在redis中

[打造自己的监控系统]使用Django获取Oracle系统状态数据并存放在redis中

作者头像
bsbforever
发布2020-08-19 10:33:22
8350
发布2020-08-19 10:33:22
举报
文章被收录于专栏:时悦的学习笔记

开发环境

操作系统:CentOS 7.4 Python版本 :3.6 Django版本: 1.10.5 操作系统用户:oms

前面介绍了如何利用Python获取TOP SQL数据并在前端展现出来

对于Oracle数据库的运维,我们首先需要知道系统的整体运行状况,例如物理读,逻辑读,解析,命中率等

这节就讲如何将这些数据获取

获取原理

我们通过查询v$sysstat 等视图来获取信息

关于redis存储,我们选择的value的数据类型为列表

1. 新建MySQL表存放监控数据

我们无需事先建立redis的key值

2. 编写自定义命令获取指标并存入数据库

如何创建自定义命令请参考

http://www.zhaibibei.cn/oms/3.1/

2.1 主体程序

这里我们用oracle_hit_sysstat_redis.py程序来获取Oracle TOP SQL

vim monitor/management/commands/oracle_hit_sysstat_redis.py

2.2 调用的函数

上面主体程序调用了一些函数用于从Oracle数据库获取必要的数据

文件路径为monitor/command/getoracle_hit_sysstat.py

这里选取几个,具体的参见我的github主页,可根据实际情况进行调整

代码语言:javascript
复制
def getlibhit(cursor):
    fp=open(os.environ['HOME_DIR']+'/mysite/monitor/command/sql/getlibhit.sql','r')
    fp1=fp.read()
    s=cursor.execute(fp1)
    fp.close()
    row=s.fetchone()
    return row
def getdichit(cursor):
    fp=open(os.environ['HOME_DIR']+'/mysite/monitor/command/sql/getdichit.sql','r')
    fp1=fp.read()
    s=cursor.execute(fp1)
    fp.close()
    row=s.fetchone()
    return row
def getcachehit(cursor):
    fp=open(os.environ['HOME_DIR']+'/mysite/monitor/command/sql/getcachehit.sql','r')
    fp1=fp.read()
    s=cursor.execute(fp1)
    fp.close()
    row=s.fetchone()
    return row
def getloadprofile(cursor):
    s=cursor.execute('select name, abs(value) from v$sysstat where name in (\'parse count (hard)\',\'parse count (total)\',\'physical reads\',\'session logical reads\',\'user commits\',\'user rollbacks\',\'user calls\',\'sorts (disk)\',\'logons cumulative\',\'redo size\',\'execute count\',\'table fetch by rowid\',\'table fetch continued row\',\'table scan rows gotten\',\'CPU used by this session\') order by name')
    row=s.fetchall()
    return row

这个程序讲解如下:

  1. 为方便后面的数据处理,这里获取当前的绝对时间(如17:01分会保存为17:00分)
  2. 然后从oraclelist表中获取信息
  3. 遍历每个数据库,当monitor_type为1和hit_type为1时继续
  4. 利用取出来的信息连接数据库,当连接成功后执行相应的程序获取各个命中率和系统数据,获取完成后关闭数据库连接
  5. 接下来使用redis的push功能保存数据,为方便后面处理数据,如果当前时间为2017-12-12-0:00则会在2017-12-11-23:59保存一条相同数据

一些注意事项

  1. 由于我有9i的库,所以首先会判断是否为9i,是的话则不会获取DB Time的数据
  2. 关于保存的时间采用绝对时间,并且每天0点时间段会保存2次
  3. 这里调用了send_mail函数用于程序运行异常时通知我

3. 最终结果

使用如下命令运行

/usr/bin/python /home/oms/mysite/manage.py oracle_hit_sysstat_redis

可以看出数据库的信息已经保存在redis数据库中了

4. 设置自动运行

这里我们设置每小时执行一次,并重定向所有日志至一个文件

这样我们可以通过检查该日志文件判断脚本是否正常运行

0 * * * * /usr/bin/python /home/oms/mysite/manage.py oracle_hit_sysstat_redis>>/home/oms/mysite/crontab.log 2>&1

源代码位置

欢迎访问我的github主页查看源码

https://github.com/bsbforever/oms_django

好了,这节介绍了如何利用自定义命令获取Oracle数据库的性能指标并保存在redis数据库中

下节介绍如何将这些数据展示在一个页面上

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 宅必备 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取原理
  • 1. 新建MySQL表存放监控数据
  • 2. 编写自定义命令获取指标并存入数据库
    • 一些注意事项
    • 3. 最终结果
    • 4. 设置自动运行
      • 源代码位置
      相关产品与服务
      云数据库 Redis®
      腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档