python实现巡检系统(solaris)示例


Posted in Python onApril 02, 2014

使用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'''))  #
Python 相关文章推荐
Python 流程控制实例代码
Sep 25 Python
python输出当前目录下index.html文件路径的方法
Apr 28 Python
详解Python如何获取列表(List)的中位数
Aug 12 Python
matplotlib作图添加表格实例代码
Jan 23 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
Pycharm之快速定位到某行快捷键的方法
Jan 20 Python
python3使用print打印带颜色的字符串代码实例
Aug 22 Python
解决Python对齐文本字符串问题
Aug 28 Python
浅析python中的del用法
Sep 02 Python
Python类class参数self原理解析
Nov 19 Python
python 视频下载神器(you-get)的具体使用
Jan 06 Python
python 破解加密zip文件的密码
Apr 22 Python
python实现apahce网站日志分析示例
Apr 02 #Python
python实现数通设备端口监控示例
Apr 02 #Python
使用python解析xml成对应的html示例分享
Apr 02 #Python
Python爬虫框架Scrapy安装使用步骤
Apr 01 #Python
使用python绘制人人网好友关系图示例
Apr 01 #Python
python异步任务队列示例
Apr 01 #Python
用Python编程实现语音控制电脑
Apr 01 #Python
You might like
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
php指定函数参数默认值示例代码
2013/12/04 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
7个Javascript地图脚本整理
2009/10/20 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
2014/02/12 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
jsp 自动编译机制详细介绍
2016/12/01 Javascript
js闭包用法实例详解
2016/12/13 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
基于JavaScript实现焦点图轮播效果
2017/03/27 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
Django 实现下载文件功能的示例
2018/03/06 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
面试感谢信范文
2015/01/22 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
故意杀人案辩护词
2015/05/21 职场文书
年终工作总结范文
2019/06/20 职场文书
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang