使用Django批量监控Oracle Job运行情况
2018-01-02 Python 宅必备
关于监控系统我们前面介绍了很多
学会了如何使用Django新建网站以及获取数据监控数据至MySQL或redis
然后将获得的数据库处理后再前端显示
往期可以到我的个人网页查看
http://www.zhaibibei.cn/domanager/
这期讲如何使用Django批量监控Oracle Job运行情况
开发环境
操作系统:CentOS 7.3
Python版本 :2.7
Django版本: 1.10.5
操作系统用户:oracle
1. 程序原理
原理为通过Django来批量连接Oracle数据库,然后查看dba_jobs视图,如果发现问题则报警出来
2 . 程序主体
#coding=utf-8
from django.core.management.base import BaseCommand
from monitor.models import oraclelist
from monitor.command.getoracleinfo import *
from monitor.command.sendmail_phone import *
class Command(BaseCommand):
def handle(self, *args, **options):
mailcontent=[]
ip=oraclelist.objects.all().order_by('tnsname')
for i in ip:
if i.monitor_type==1:
ipaddress=i.ipaddress
username=i.username
password=i.password
port=i.port
tnsname=i.tnsname
try:
db = cx_Oracle.connect(username+'/'+password+'@'+ipaddress+':'+port+'/'+tnsname ,mode=cx_Oracle.SYSDBA)
except Exception as e:
content= (i.tnsname+' is Unreachable,The reason is '+str(e)).strip()
mailcontent.append(content)
#print (mailcontent)
else:
cursor = db.cursor()
job=checkjob(cursor)
cursor.close()
db.close()
if job=='error':
jobresult= 'The Job Have Errors On '+i.tnsname
#print (jobresult)
mailcontent.append(jobresult)
if len(mailcontent) != 0:
mailcontent='\n'.join(mailcontent)
send_mail_phone(to_list,'Oracle Job Status Monitor',mailcontent)
程序路径为:
mysite/monitor/management/commands/checkoraclejob.py
该程序解释如下:
-
首先获取oraclelist表中所有的数据库信息
-
然后当monitor_type等于1时连接数据库
-
然后通过getoracleinfo.py中的checkjob函数获取job的情况
-
当返回值为error时候获取tns名称并写入mailcontent列表中
-
最后判断mailcontent是否有数据,有的话则报警
3. 获取Job执行信息的函数
我们通过如下函数获取Job的执行情况,该程序可单独于Django运行
路径为:
mysite/monitor/command/checkoraclejob.py
def checkjob(cursor):
cursor.execute('select failures from dba_jobs a where round((sysdate-this_date)*24,2) >1 or failures<>0')
row=cursor.fetchone()
if row is None:
return 'normal'
else:
return 'error'
当dba_jobs视图中的failures 不等于0 或者 Job执行时间超过1小时(可根据自己习惯调整)时我们认为该Job有异常
4. 最终结果
可以看如果有Job异常则会发邮件
5. 设置自动运行
这里我们设置每天凌晨进行一次,并重定向所有日志至一个文件
这样我们可以通过检查该日志文件判断脚本是否正常运行
59 23 * * * /usr/bin/python2.7 /ezio/website/manage.py checkoraclejob >>/home/oracle/crontab.log 2>&1
源代码位置
欢迎访问我的github主页查看源码