python利用saltstack检测所管理服务器的硬盘状态
一、在linux中安装saltstack
见此saltstack的安装博文https://www.cnblogs.com/feilu---python/p/11982951.html
二、配置python邮件发送程序
代码如下:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# datetime: 2019/11/4 13:31
# software: PyCharm
import smtplib, sys
from email.mime.text import MIMEText
import argparse
parser = argparse.ArgumentParser(description='manual to this script')
parser.add_argument('-S','--subject_title', type=str, default = None)
parser.add_argument('-s','--subject', type=str, default=None)
args = parser.parse_args()
class Msmtp():
def __init__(self, target, subject, content): # 收件人、标题、内容
self.msg_from = 'xxx@qq.com' # 邮件发送者
self.password = 'passwd'
self.sender = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)
self.msg_to = target.split(",")
self.subject = subject
self.content = content
def login(self):
self.sender.login(self.msg_from, self.password) # 邮箱登录
def msg(self):
self.msg = MIMEText(self.content) # 此处可选择文本格式或html等格式, 显示发送信息
self.msg['Subject'] = self.subject
self.msg['From'] = self.msg_from
self.msg['To'] = ",".join(self.msg_to)
def send_mail(self):
try:
self.login()
self.msg()
# sendmail 第二个参数,目的邮箱,参数类型 str 或者 list
self.sender.sendmail(self.msg_from, self.msg_to, self.msg.as_string())
except Exception as e:
print(u'邮件发送失败,原因:{}'.format(e))
else:
# print(u'邮件发送至 {} 成功!'.format(self.msg['To']))
pass
finally:
self.sender.quit()
if __name__ == '__main__':
# 收件人, 标题, 内容
receivers = xxx@qq.com'
title = "测试"
subject = "测试"
# a = Msmtp(sys.argv[1], sys.argv[2], sys.argv[3])
a = Msmtp(receivers, title, subject) # receivers收件人
a.send_mail()
三、磁盘检测代码
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# datetime: 2019/11/5 14:24
# software: PyCharm
import salt.client
import send_mail_mod
remote_server_name = '*'
remost_cmd = 'df -h |grep -v Filesystem |grep -v tmpfs |grep -v /var/lib/docker |grep -v %0'
salt_client = salt.client.LocalClient()
# 获取执行命令后的所有的服务的建
server_host = salt_client.cmd(remote_server_name,'cmd.run',[remost_cmd])
disk_list_info = []
def disk_dir_free(disk_new_list):
# 获取某个挂载目录的剩余量的值
while '' in disk_new_list:
disk_new_list.remove('')
# 移除列表中的空元素
# while循环是为了取出新列表中的空元素
disk_free = disk_new_list[4]
# 获取第五位的磁盘剩余量
disk_free_num = disk_free.replace('%', '')
return disk_free_num
def disk_check(keys):
# 删除字符串中的空字符并形成一个列表
for disk_pro in keys:
disk_new_list = disk_pro.split(' ')
disk_num = disk_dir_free(disk_new_list)
if disk_num.isdigit():
if int(disk_num) > 70:
info = ''.join(('*服务器:'+serverhost,' *磁盘名称: '+disk_new_list[0],
' *总容量:' + disk_new_list[1],' *剩余容量:'+disk_new_list[3],
' *使用率:'+disk_new_list[4],' *挂载目录:' + disk_new_list[5]))
disk_list_info.append(info)
# 如果磁盘容量大于某个数值就报警
for serverhost in server_host.keys():
disk_dev = server_host[serverhost].splitlines()
# 将获取的值以'/n'分割
disk_check(disk_dev)
if len(disk_list_info) > 0 :
infomation = '\n'.join(tuple(disk_list_info))
receivers = 'xxx@qq.com'
title = serverhost + '生产环境磁盘使用率'
a = send_mail_mod.Msmtp(receivers, title, infomation) # receivers收件人
a.send_mail()
四、邮件发送需要和检测程序放置在相同目录下。
五、放置在定时任务中
15 09 * * * python /root/bin/python/check_disk.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# author: lufei
# datetime: 2019/11/4 13:31
# software: PyCharm
import smtplib, sys
from email.mime.text import MIMEText
import argparse
parser = argparse.ArgumentParser(description='manual to this script')
parser.add_argument('-S','--subject_title', type=str, default = None)
parser.add_argument('-s','--subject', type=str, default=None)
args = parser.parse_args()
class Msmtp():
def __init__(self, target, subject, content): # 收件人、标题、内容
self.msg_from = 'xxx@qqom' # 邮件发送者
self.password = 'passwd
self.sender = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)
self.msg_to = target.split(",")
self.subject = subject
self.content = content
def login(self):
self.sender.login(self.msg_from, self.password) # 邮箱登录
def msg(self):
self.msg = MIMEText(self.content) # 此处可选择文本格式或html等格式, 显示发送信息
self.msg['Subject'] = self.subject
self.msg['From'] = self.msg_from
self.msg['To'] = ",".join(self.msg_to)
def send_mail(self):
try:
self.login()
self.msg()
# sendmail 第二个参数,目的邮箱,参数类型 str 或者 list
self.sender.sendmail(self.msg_from, self.msg_to, self.msg.as_string())
except Exception as e:
print(u'邮件发送失败,原因:{}'.format(e))
else:
# print(u'邮件发送至 {} 成功!'.format(self.msg['To']))
pass
finally:
self.sender.quit()
# if __name__ == '__main__':
# # 收件人, 标题, 内容
# receivers = 'xxx@qqom'
# title = "测试"
# subject = "测试"
# # a = Msmtp(sys.argv[1], sys.argv[2], sys.argv[3])
# a = Msmtp(receivers, title, subject) # receivers收件人
# a.send_mail()
