1. 生成磁盘使用情况的日志文件

#!/usr/bin/env python
#!coding=utf-8import time
import osnew_time = time.strftime('%Y-%m-%d')
disk_status = os.popen('df -h').readlines()
str1 = ''.join(disk_status)
f = file(new_time+'.log','w')
f.write('%s' % str1)
f.flush()
f.close()

2. 探测Web服务质量

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 该脚本可以定位访问web页面的服务质量
# 通过Python下的pycurl模块来实现定位
# 它可以通过调用pycurl提供的方法,来探测Web服务质量
# 比如了解相应的HTTP状态码、请求延时、HTTP头信息、下载速度等import os
import time
import sys
import pycurl# 探测目标URL
URL = "http://www.baidu.com" # 创建一个Curl对象
c = pycurl.Curl()
# 定义请求的URL变量
c.setopt(pycurl.URL, URL)
# 定义请求连接的等待时间
c.setopt(pycurl.CONNECTTIMEOUT, 5)
# 定义请求超时时间
c.setopt(pycurl.TIMEOUT, 5)
# 屏蔽下载进度条
c.setopt(pycurl.FORBID_REUSE, 1)
# 指定HTTP重定向的最大数为1
c.setopt(pycurl.MAXREDIRS, 1)
# 完成交互后强制断开连接,不重用
c.setopt(pycurl.NOPROGRESS, 1)
# 设置保存DNS信息的时间为30秒
c.setopt(pycurl.DNS_CACHE_TIMEOUT,30)# 创建一个文件对象,以“wb”方式打开,用来存储返回的http头部及页面的内容
indexfile = open(os.path.dirname(os.path.realpath(__file__))+"/content.txt", "wb")
# 将返回的HTTP HEADER定向到indexfile文件
c.setopt(pycurl.WRITEHEADER, indexfile)
# 将返回的HTML内容定向到indexfile文件
c.setopt(pycurl.WRITEDATA, indexfile)# 捕捉Curl.perform请求的提交,如果错误直接报错退出
try:c.perform()
except Exception,e:print "连接错误"indexfile.close()c.close()sys.exit()# DNS解析所消耗的时间
NAMELOOKUP_TIME = c.getinfo(c.NAMELOOKUP_TIME)
# 建立连接所消耗的时间
CONNECT_TIME = c.getinfo(c.CONNECT_TIME)
# 从建立连接到准备传输所消耗的时间
PRETRANSFER_TIME = c.getinfo(c.PRETRANSFER_TIME)
# 从建立连接到传输开始消耗的时间
STARTTRANSFER_TIME = c.getinfo(c.STARTTRANSFER_TIME)
# 传输结束所消耗的总时间
TOTAL_TIME = c.getinfo(c.TOTAL_TIME)
# 返回HTTP状态码
HTTP_CODE = c.getinfo(c.HTTP_CODE)
# 下载数据包的大小
SIZE_DOWNLOAD = c.getinfo(c.SIZE_DOWNLOAD)
# HTTP头部大小
HEADER_SIZE = c.getinfo(c.HEADER_SIZE)
# 平均下载速度
SPEED_DOWNLOAD = c.getinfo(c.SPEED_DOWNLOAD)print "HTTP状态码:%d" %HTTP_CODE
print "DNS解析时间:%.2f ms"%(NAMELOOKUP_TIME*1000)
print "建立连接时间:%.2f ms" %(CONNECT_TIME*1000)
print "准备传输时间:%.2f ms" %(PRETRANSFER_TIME*1000)
print "传输开始时间:%.2f ms" %(STARTTRANSFER_TIME*1000)
print "传输结束总时间:%.2f ms" %(TOTAL_TIME*1000)
print "下载数据包大小:%d bytes/s" %(SIZE_DOWNLOAD)
print "HTTP头部大小:%d byte" %(HEADER_SIZE)
print "平均下载速度:%d bytes/s" %(SPEED_DOWNLOAD)
indexfile.close()
c.close()"""
HTTP状态码:%d
DNS解析时间:%.2f ms
建立连接时间:%.2f ms
准备传输时间:%.2f ms
传输开始时间:%.2f ms
传输结束总时间:%.2f ms
下载数据包大小:%d bytes/s
HTTP头部大小:%d byte
平均下载速度:%d bytes/s
""" %(HTTP_CODE, NAMELOOKUP_TIME*1000, CONNECT_TIME*1000, PRETRANSFER_TIME*1000, STARTTRANSFER_TIME*1000, TOTAL_TIME*1000, SIZE_DOWNLOAD, HEADER_SIZE, SPEED_DOWNLOAD)

3. 发送邮件告警

import smtplib
from email.mime.text import MIMEText
'''
发送邮件函数,默认使用163smtp
:param mail_host: 邮箱服务器,16邮箱host: smtp.163.com
:param port: 端口号,163邮箱的默认端口是 25
:param username: 邮箱账号 xx@163.com
:param passwd: 邮箱密码(不是邮箱的登录密码,是邮箱的授权码)
:param recv: 邮箱接收人地址,多个账号以逗号隔开
:param title: 邮件标题
:param content: 邮件内容
:return:
'''def send_mail(username, passwd, recv, title, content, mail_host='smtp.163.com', port=25):msg = MIMEText(content)  # 邮件内容msg['Subject'] = title   # 邮件主题msg['From'] = username   # 发送者账号msg['To'] = recv      # 接收者账号列表smtp = smtplib.SMTP(mail_host, port=port)   # 连接邮箱,传入邮箱地址,和端口号,smtp的端口号是25smtp.login(username, passwd)          # 登录发送者的邮箱账号,密码# 参数分别是 发送者,接收者,第三个是把上面的发送邮件的 内容变成字符串smtp.sendmail(username, recv, msg.as_string())smtp.quit() # 发送完毕后退出smtpprint('email send success.')if __name__ == '__main__':email_user = 'xxxx@163.com' # 发送者账号email_pwd = 'xxxxx' # 发送者密码,授权码maillist = 'xxxx@qq.com'title = '测试邮件标题'content = '这里是邮件内容'send_mail(email_user, email_pwd, maillist, title, content)

4. 收集系统信息

采集系统信息包括了CPU,内存,磁盘,网络等。结合自身情况。

psutil模块是一个跨平台的获取进程和系统应用情况(CPU,内存,磁盘,网络,传感器)的库。该模块用于系统监控、限制进程资源和运行进程的管理等方面。

(1) CPU信息
psutil.cpu_count() # CPU逻辑数量
psutil.cpu_count(logical=False) # CPU物理核心
psutil.cpu_percent() # CPU当前使用率(2) 内存信息
mem = psutil.virtual_memory() # 实例化内存对象
mem.total  # 系统总计内存
mem.used  # 系统已经使用内存
mem.free # 系统空闲内存
psutil.swap_memory() # swap内存信息(3) 硬盘信息
psutil.disk_usage('/')(4) 网络信息
psutil.net_io_counters(pernic=True)

4.1 CPU利用率采集脚本

#!/bin/python
#coding:utf-8import psutil
import timewhile True:time.sleep(1)cpu_liyonglv = psutil.cpu_percent()print "当前cpu利用率:\033[1;31;42m%s%%\033[0m"%cpu_liyonglv

4.2 内存使用率和用户采集脚本

#!/bin/python
#coding:utf-8import psutil
import datetimefree = str(round(psutil.virtual_memory().free / (1024.0 * 1024.0 * 1024.0), 2))
total = str(round(psutil.virtual_memory().total / (1024.0 * 1024.0 * 1024.0), 2))
memory = int(psutil.virtual_memory().total - psutil.virtual_memory().free) / float(psutil.virtual_memory().total)
print(u"物理内存: %s G" % total)
print(u"剩余物理内存: %s G" % free)
print(u"物理内存使用率: %s %%" % int(memory * 100))
# 系统启动时间
print(u"系统启动时间: %s" % datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S"))users_count = len(psutil.users())users_list = ",".join([u.name for u in psutil.users()])
print(u"当前有%s个用户,分别是 %s" % (users_count, users_list))

4.3 硬盘使用率采集脚本

#!/bin/python
#coding:utf-8import psutildisk = psutil.disk_partitions()
for i in disk:print "磁盘:%s   分区格式:%s"%(i.device,i.fstype)disk_use = psutil.disk_usage(i.mountpoint)print "使用了:%sM,空闲:%sM,总共:%sM,使用率\033[1;31;42m%s%%\033[0m,"%(disk_use.used/1024/1024,disk_use.free/1024/1024,disk_use.total/1024/1024,disk_use.percent)

4.4 网络流量采集脚本

#!/bin/python
#coding:utf-8import psutil
import time#网卡,可以得到网卡属性,连接数,当前流量等信息
net = psutil.net_io_counters()
bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024)
print(u"网卡接收流量 %s 网卡发送流量 %s" % (bytes_rcvd, bytes_sent))

5. 系统批量运维管理

paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。

5.1 用户名和密码连接脚本

5.1.1 未封装脚本
#!/bin/python
#coding:utf-8import paramiko# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='192.168.1.22', port=22, username='root', password='admin123')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('ls')
# 获取命令结果
result = stdout.read()# 关闭连接
ssh.close()
5.1.2 SSHClient 封装 Transport脚本
#!/bin/python
#coding:utf-8import paramikotransport = paramiko.Transport(('192.168.1.22', 22))
transport.connect(username='root', password='admin123')
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('ifconfig')
print stdout.read()
transport.close()

5.2 公钥和私钥连接脚本

5.2.1 未封装脚本
#!/bin/python
#coding:utf-8import paramikoprivate_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='c1.salt.com', port=22, username='xxx', key=private_key)# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()# 关闭连接
ssh.close()
5.2.2 SSHClient 封装 Transport脚本
#!/bin/python
#coding:utf-8import paramikoprivate_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
transport = paramiko.Transport(('192.168.1.22', 22))
transport.connect(username='root', pkey=private_key)
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df')
print stdout.read()
transport.close()

5.3 sftp上传和下载脚本

#!/bin/python
import os,sys
import paramikot = paramiko.Transport(('192.168.1.22',22))
t.connect(username='root',password='admin123')
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('C:\Users\yunwei\Desktop\error.jpg','/home/yunwei/error.jpg')
#将error.jpg上传到服务器/home/yangmv目录
sftp.get('/home/yunwei/sftp.txt','C:\Users\yunwei\Desktop\sftp.txt')
#将sftp.txt下载到本机桌面
t.close()

5.4 批量主机命令执行脚本

#!/bin/python
#coding:utf-8import paramiko
port=22
username="root"
file=open("ip.list")
for line in file:hostname=str(line.split("\t")[0])password=str(line.split("\t")[4]).strip()print "##########################",hostname,"########################"s=paramiko.SSHClient()s.set_missing_host_key_policy(paramiko.AutoAddPolicy())s.connect(hostname,port,username,password)stdin,stdout,sterr=s.exec_command("df -Th")print stdout.read()s.close()
file.close()# ip.list
test1   192.168.1.22    22      root    admin123
test2   192.168.1.23    22      root    Aa123456

Python自动化运维脚本相关推荐

  1. python自动化运维脚本(仅供参考)

    1.生成磁盘使用情况的日志文件 #!/usr/bin/env python#!coding=utf-8import timeimport osnew_time = time.strftime('%Y- ...

  2. python运维自动化脚本案例-python自动化运维脚本范例

    1.列举当前目录以及所有子目录下的文件,并打印出绝对路径#!/usr/bin/python# coding=utf8import osimport sys if len(sys.argv) < ...

  3. python自动化办公 51cto_利用python实现批量自动化运维脚本案例

    本文为通过密码或密钥实现python批量自动化运维脚本案例分享,是老男孩linux培训 python课程教学案例内容,后续会分享多线程并发执行这个脚本的更高级的功能(http://oldboy.blo ...

  4. 云计算Python自动化运维开发实战 三、python文件类型

    为什么80%的码农都做不了架构师?>>>    云计算Python自动化运维开发实战 三.python文件类型 导语: python常用的有3种文件类型 1. 源代码     py ...

  5. python运维开发培训_运维架构师-Python 自动化运维开发-014

    运维架构师-Python 自动化运维开发-014 九.标准数据类型 1.为什么编程语言中要有类型 类型有以下几个重要角色:对机器而言,类型描述了内存中的电荷是怎么解释的. 对编译器或者解释器而言,类型 ...

  6. python 自动运维架构师_运维架构师-Python 自动化运维开发-013

    *运维架构师-Python 自动化运维开发-013 5.常用快捷键(附加课余研究) 1.Ctrl + Enter:在下方新建行但不移动光标: 2.Shift + Enter:在下方新建行并移到新行行首 ...

  7. python自动化运维之python2.6升级2.7和集中病毒扫描

    1.因为我linux的python是2.6.6,所以因为有些模块是2.7的,先进行升级. 步骤地址:http://www.linuxidc.com/Linux/2014-07/104555.htm 2 ...

  8. python自动化运维之路~DAY1

    python自动化运维之路~DAY1 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件大小单位单位换算 我们一起看一下下面的图: 没错,都是数字,而且这些数字都是二进制的数字 ...

  9. 如何做好python自动化运维,python在运维中的应用

    这篇文章主要介绍了一个有趣的事情,具有一定借鉴价值,需要的朋友可以参考下.希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下. 1.如何做好python自动化运维 随着移动互联网的普及, ...

最新文章

  1. 通过手写Spring MVC来理解其原理
  2. windows xp系统驱动安装问题
  3. chap10 构建Web内容的技术
  4. 网络协议之:socket协议详解之Socket和Stream Socket
  5. 转载-glance的用法
  6. sql通用防注入程序php,sql通用防注入系统_PHP教程
  7. 微信公众号小程序开发
  8. Electron实现桌面日历
  9. pycharm的python_stubs
  10. 【原创】差分线——差模,共模,奇模,偶模傻傻的分不清楚
  11. Winedit 10的使用方法,网上修改注册表的已经不管用了。
  12. 综述文章:支持自闭症谱系障碍青少年灵活认知和行为的大脑机制
  13. 笔记:Bootstrap导航与router-link 不和谐
  14. 用yara实现分析恶意样本_Yara –识别和分类恶意软件样本
  15. mysql查看主机名_mysql怎么看主机名
  16. 关闭电脑时提示有人远程使用计算机,关机时提示有人正在远程使用
  17. 常用联网方式和名词解释
  18. simulink bus总线创建方法
  19. 【考研】数据结构考点——冒泡排序(含408真题)
  20. 【滤波】多元卡尔曼滤波器

热门文章

  1. Qsetting本地缓存PC端数据
  2. Android音频AAC硬编码
  3. 详细过程MD5加密的原理+java实现
  4. 类蛇毒肽、蛇毒肽、 三肽-3、823202-99-9
  5. 一加8T,一加8和一加8Pro有什么区别哪个好?分析优缺点?
  6. 计算机系统结构——量化研究方法(第三版)
  7. 三口烧瓶规格有哪些_什么是三口烧瓶,应该如何制作 | | 化工资讯网
  8. JS小数取整以及保留小数点后两位
  9. stm32延时us寄存器_自己写一个STM32 HAL库的US微秒延时函数
  10. 7.0.高等数学四-隐函数存在定理