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

#!/usr/bin/env python
#!coding=utf-8

import time
import os

new_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的端口号是25
 smtp.login(username, passwd)          # 登录发送者的邮箱账号,密码
 # 参数分别是 发送者,接收者,第三个是把上面的发送邮件的 内容变成字符串
 smtp.sendmail(username, recv, msg.as_string())
 smtp.quit() # 发送完毕后退出smtp
 print('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-8

import psutil
import time

while 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-8

import psutil
import datetime

free = 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-8

import psutil

disk = 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-8

import 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-8

import 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-8

import paramiko

transport = 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-8

import paramiko

private_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='wupeiqi', key=private_key)
 
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
 
# 关闭连接
ssh.close()
5.2.2 SSHClient 封装 Transport脚本
#!/bin/python
#coding:utf-8

import paramiko

private_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 paramiko

t = 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-8

import 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

实战:监控采集脚本

# _*_ coding: utf-8 _*_
__author__ = 'HeYang'

import psutil
import time
import datetime

def cpu_info():
time.sleep(1)
cpu_zyl = psutil.cpu_percent()
cpu_obj = psutil.cpu_times_percent()
cpu_count = psutil.cpu_count()
cpu_wl_count = psutil.cpu_count(logical=False)

print """
===============CPU监控===================
CPU占用率:%s
CPU用户执行百分比: %s
CPU系统中断执行百分比:%s
CPU空闲百分比:%s
CPU逻辑个数:%s
CPU物理个数:%s
""" %(cpu_zyl, cpu_obj.user, cpu_obj.system, cpu_obj.idle, cpu_count, cpu_wl_count)

return True

def mem_info():
time.sleep(1)
mem_obj = psutil.virtual_memory()
swap_obj = psutil.swap_memory()

print """
===============物理内存监控===================
内存总量:%.2f M
内存已使用: %.2f M
内存未使用:%.2f M

===============SWAP内存监控===================
内存总量:%.2f M
内存已使用: %.2f M
内存未使用:%.2f M
""" %(mem_obj.total/1024/1024, mem_obj.used/1024/1024, mem_obj.free/1024/1024,
swap_obj.total/1024/1024, swap_obj.used/1024/1024, swap_obj.free/1024/1024)

def io_info():
time.sleep(1)
io_obj = psutil.disk_io_counters()

print """
===============IO监控===================
读IO总大小:%.2f G
写IO总大小: %.2f G
""" % (io_obj.read_bytes/1024/1024/1024, io_obj.write_bytes/1024/1024/1024)

def disk_info():
time.sleep(1)
disk_obj = psutil.disk_usage('/')

print """
===============硬盘监控===================
硬盘总量:%.2f G
硬盘已使用: %.2f G
硬盘未使用:%.2f G
""" % (disk_obj.total/1024/1024/1024, disk_obj.used/1024/1024/1024, disk_obj.free/1024/1024/1024)

def network_info():
time.sleep(1)
network_obj = psutil.net_io_counters()

print """
===============网络流量监控===================
出口流量:%.2f G
入口流量: %.2f G
""" % (network_obj.bytes_sent/1024/1024/1024, network_obj.bytes_recv/1024/1024/1024)

def system_info():
time.sleep(1)
user_list = psutil.users()
boottime = psutil.boot_time()

print """
===============系统监控===================
当前登录用户:%s
开机时间: %s
""" % ([user.name for user in user_list], datetime.datetime.fromtimestamp(boottime).strftime('%Y-%m-%d %H:%M:%S'))

def mem():
print"""
1 cpu监控
2 内存监控
3 io监控
4 硬盘容量监控
5 网卡ip监控
6 系统监控
7 退出系统
"""
while True:

num = raw_input("请输入要查看的内容:")
num = int(num)

if num == 1:
cpu_info()
continue
elif num == 2:
mem_info()
continue
elif num == 3:
io_info()
continue
elif num == 4:
disk_info()
continue
elif num == 5:
network_info()
continue
elif num == 6:
system_info()
continue
elif num == 7:
break
else:
print('您输入的编号不存在,请重试!!')
continue

if __name__ == '__main__':
mem()

Python_自动化运维的更多相关文章

  1. SQL Server 自动化运维系列

    本系列为SQL SERVER自动化运维的一些操作技巧点,所有内容都是根据日常运维过程中最经常遇到的问题,并为此形成了一些自动化运维的方式,皆为原创.... 供部分DBA和开发人员浏览借鉴,所应用平台基 ...

  2. CheungSSH国产自动化运维工具开源Web界面

    CheungSSH web2.0 发布文档 CheungSSH 简介 CheungSSH是一款国人自主研发的Linux运维自动化管理服务器软件,秉着为企业降低运营成本,解放管理员双手和自动化生产的理念 ...

  3. 自动化运维工具ansible部署以及使用

    测试环境master 192.168.16.74webserver1 192.168.16.70webserver2 192.168.16.72安装ansiblerpm -Uvh http://ftp ...

  4. #研发解决方案#iDB-数据库自动化运维平台

    郑昀 创建于2015/12/2 最后更新于2015/12/2 关键词:数据库,MySQL,自动化运维,AutoDDL,刷库,帐号授权,审核,回滚 提纲: 数据库自动化运维什么?别人家是怎么玩的? 我们 ...

  5. 自动化运维工具Ansible详细部署 (转载)

    自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...

  6. 自动化运维:网站svn代码上线更新(flask+saltstack)

    阶段性总结:      跌跌撞撞的用了一周左右的时间做完了网站自动升级功能,中间遇到了很多的问题,也学到了很多,在此做一个总结.   1.整体架构: 后台:nginx+uwsgi  #nginx提供w ...

  7. 自动化运维工具之 Ansible 介绍及安装使用

    一.初识Ansible 介绍: Absible 使用 模块(Modules)来定义配置任务.模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等.A ...

  8. (转)mongodb常用命令脚本化-自动化运维

    mongodb常用命令脚本化-自动化运维 把一些运维中常用到的mongodb命令写成shell脚本,极大的方便了维护   1 设置副本集   #!/bin/bash#mongodb 进入client ...

  9. 自动化运维工具之ansible

    自动化运维工具之ansible   一,ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...

随机推荐

  1. bugku-Web-多次(异或注入,判断被过滤的关键字)

    进去看到url感觉是sql注入, 加上',报错但是%23不报错,加上'--+,也不报错,说明可以用--+注释 加上' or 1=1--+,报错 尝试' oorr 1=1--+,正常 说明or被过滤了. ...

  2. MySQL的异常问题

    异常问题

  3. python np array转json

    np array转json import numpy as np import codecs, json a = np.arange().reshape(,) # a by array b = a.t ...

  4. Vue 指令 v-text v-html

    有三个指令达到的效果是一样的 {{JS表达式}}  差值表达式 v-text="JS表达式" v-html="JS表达式"   //会自动解析tag js表达式 ...

  5. 51nod1021:石子归并

    1021 石子归并 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合 ...

  6. 数据可视化BI平台——CBoard的部署与使用(笔记整理)

    CBoard作为国内自主开发的数据可视化平台,因其方便好用而受到广大用户的使用和好评.现今CBoard有社区版和企业版两个版本,本文所述为社区版的0.4.2版本.注意:所需的一切资源以及相关参考链接都 ...

  7. C基础 带你手写 redis ae 事件驱动模型

    引言 - 整体认识 redis ae 事件驱动模型, 网上聊得很多. 但当你仔细看完一篇又一篇之后, 可能你看的很舒服, 但对于 作者为什么要这么写, 出发点, 好处, 缺点 ... 可能还是好模糊, ...

  8. mysql float 这个大坑

    以后高精度的数据不要用这个字段  今天同事反应 应该是17390.7的数据 结果展示17390.6992  找了半天问题在哪 后来决定先不管  手动现在数据库改数据 结果手动改也改不过来  于是能确定 ...

  9. HDU 3484 Matrix Game 枚举暴力

    上次周赛碰到这个题目,居然都没思路,真是不应该啊,起码也应该想到枚举法. 因为题目只允许每一row进行reverse操作,而每两列可以进行交换操作,所以首先把row的变化固定下来,即枚举第一列与第1- ...

  10. DevOps云翼日志服务实践

    10月30日,全球权威数据调研机构IDC正式发布<IDCMarketScape:中国DevOps云市场2019,厂商评估>报告.京东云凭借丰富的场景和实践能力,以及高质量的服务交付和平台稳 ...