使用python + shell 编写,是一个简易solaris系统巡检程序
复制代码 代码如下:
#!/usr/bin/python -u
#-*- coding:utf-8 -*-
\’\’\’
程序:solaris_status.py
author: gyh9711
功能:
系统状态信息获取
语言:
sh + python
注意:
部分调用命令需要用到root权限
测试情况:
系统版本:solaris10 系统测试ok
测试服务器型号:sun 6900 6800 v445 v440 M3000 M5000
内容:
\’\’\’
import time
import sys
import os
import re
# import pprint
def getNow():
return time.strftime(\”%Y-%m-%d %H:%M:%S\”,time.localtime())
def puts(mess,_type=\”print\”):
if _type == \”log\”:
sys.stdout.write(\”[%s] %s\\n\” % (getNow(),mess))
else:
sys.stdout.write(\”%s\\n\” % mess)
#pprint.pprint(mess)
def getCommand(cmd):
return [t.rstrip() for t in os.popen(cmd).readlines()]
#通过系统状态信息:
#系统基本情况
puts(\”=\”*60)
puts(\”检查时间 %s\” % getNow())
puts(\”-\”*60)
puts(\”\\n系统基本信息\”)
for i in getCommand(\”showrev\”):
puts(i)
puts(\”=\”*60)
puts(\”\\n\”)
puts(\”主机名称: %s \” % getCommand(\”hostname\”)[0])
puts(\”处理器core数: %s \” % getCommand(\”mpstat |awk \’END{print NR-1}\’\”)[0])
puts(\”系统负载情况: %s \” % getCommand(\”uptime\”)[0])
puts(\”系统进程数: %s \” % getCommand(\”ps -ef |wc -l\”)[0])
puts(\”用户运行进程情况\”)
psAll = getCommand(\’\’\’ps -ef |awk \'{print $1}\’ |sort |uniq -c |grep -v \”UID\”\’\’\’)
puts(\”\\n%s%s\” %(\”用户\”.ljust(20),\”进程数\”.ljust(10)))
puts(\”-\”*60)
for i in psAll:
_user = re.split(r\”\\s+\”,i)[1:]
#print _user
puts(\”%s%s\” %(_user[1].ljust(20),_user[0].ljust(10)))
puts(\”-\”*60)
puts(\”\\n\”)
puts(\”%s%s%s\”%(\”=\”*30,\”状态信息\”,\”=\”*30))
puts(\”\\n\”)
puts(\”处理器使用情况: %s %%\” % getCommand(\”vmstat 1 2 |tail -1 |awk \'{print 100-$22}\’\”)[0])
puts(\”内存使用情况: %s %% 总大小:%s [M]\” % (getCommand(\’\’\’vmstat 1 2 |tail -1 |awk \'{printf(\”%d\”,$5/1024/MEMALL*100);}\’ MEMALL=`prtconf |grep -i \”^memory\” |awk \'{print $3}\’`\’\’\’)[0],getCommand(\’\’\’prtconf |grep -i \”^memory\” |awk \'{print $3}\’\’\’)[0]))
puts(\”swap使用情况: %s\” % (getCommand(\”swap -s\”)[0]))
puts(\”\\n\”)
puts(\”%s%s%s\\n\”%(\”=\”*30,\”磁盘空间使用情况\”,\”=\”*30))
for i in getCommand(\’\’\’awk \'{if($3 != \”\”) {print $3}}\’ /etc/vfstab |egrep -v \”mount|to|-\” |xargs df -h\’\’\’):
puts(i)
puts(\”\\n%s%s%s\\n\”%(\”=\”*30,\”网络情况\”,\”=\”*30))
puts(\”网络接口状态\”)
for i in getCommand(\’\’\’for i in `ifconfig -a |egrep \”^{hme|qfe|ge|ce|eri|bge|nge|e1000g}\” |cut -d: -f1`; do /sbin/dladm show-dev $i; done\’\’\’):
puts(i)
puts(\”\\n网络接口IP及数据进出情况\”)
for i in getCommand(\”netstat -in\”):
puts(i)
puts(\”\\n网络接口流量情况\”)
for i in getCommand(\’\’\’for i in `ifconfig -a |egrep \”^{hme|qfe|ge|ce|eri|bge|nge|e1000g}\” |cut -d: -f1`; do netstat -I $i; done\’\’\’):
puts(i)
puts(\”\\n 网络ARP缓存信息\”)
for i in getCommand(\”netstat -anp\”):
puts(i)
puts(\”\\n\”)
puts(\”\\n 路由表情况\”)
for i in getCommand(\”netstat -rn\”):
puts(i)
puts(\”\\n\”)
puts(\”\\n%s%s%s\\n\”%(\”=\”*30,\”系统主要服务及状态[svcs]\”,\”=\”*30))
for i in getCommand(\’\’\’svcs\’\’\’):
puts(i)
puts(\”\\n%s%s%s\\n\”%(\”=\”*30,\”服务硬件状态[prtdiag]\”,\”=\”*30))
for i in getCommand(\’\’\’prtdiag -v\’\’\’):
puts(i)
# puts(getCommand(\”showrev\”))
#硬件状态信息
#puts(getCommand(\”prtdiag -v\”))
#cpu情况
#puts(getCommand(\”mpstat\”))
#puts(getCommand(\”sar -u\”))
#物理内存大小
#puts(getCommand(\’\’\’/usr/sbin/prtdiag -v |grep \”^Memory\”\’\’\’))
#虚拟内存
#puts(getCommand(\’\’\’vmstat 1 2\’\’\’))
#puts(getCommand(\’\’\’swap -s\’\’\’))
#=================磁盘IO情况=================
#puts(getCommand(\’\’\’iostat -xtc\’\’\’)) #