适用环境:因服务器网站系统宕机及崩溃可做到及时发现及时处理。现因好多项目服务器多为堡垒机登陆,不能安装监控软件,所以我开发了个主动防御脚本,可在运维电脑中运行实时监控,出现问题第一时间发送邮件提醒运维人员及时处理。
准备工作:
- python3.8环境安装
- 网易163邮箱开启smtp服务
- 建议使用钉钉邮箱(接收告警信息,手机端有声音提醒),任何邮箱都能接收邮件
- python3下载安装,建议百度搜索国内网站下载安装,国外网站下载较慢.
安装注意事项:
windows系统:一定要勾选PATH)
Linux系统:默认是python2 (没有测试,不知道是否可以直接用,我使用python3编写的如果不能使用建议安装python3)
- 网易163邮箱开启SMTP服务
- 钉钉邮箱钉钉账号中可自行查找
- 以下为脚本代码,复制到文本文档中,另存为.py 文件,变更代码中标注的相关信息即可,代码启动方法:python xxx.py
以下为脚本代码:
from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr
import smtplib,time,urllib.request
url = "http://www.xxxxx.com"
#自行更改需要监控的网站系统地址
class SendEmail:
outbox = "xxxx@163.com"
# 发件箱地址
password = ""
# 授权密码 不是邮箱登录密码
inbox = "xxxx@dingtalk.com"
# 收件箱地址
smtp_server = "smtp.163.com"
# 发件箱服务器地址
def __init__(self):
pass
@classmethod
def _format_address(cls, text):
name, address = parseaddr(text)
return formataddr((Header(name, "utf-8").encode(), address))
@classmethod
def send_email_text(cls):
msg = MIMEText('服务器故障时间:' +time.strftime('%Y-%m-%d %H:%M:%S') , "plain", "utf-8")
msg["From"] = SendEmail._format_address("预警报告 <%s>" % SendEmail.outbox)
# 发件人姓名与发件箱地址
msg["To"] = SendEmail._format_address("管理员 <%s>" % SendEmail.inbox)
# 收件人姓名与收件箱地址
msg["Subject"] = Header("服务器预警报告", "utf-8").encode()
# 邮件标题
try:
server = smtplib.SMTP(SendEmail.smtp_server, 25)
server.login(SendEmail.outbox, SendEmail.password)
server.sendmail(SendEmail.outbox, [SendEmail.inbox], msg.as_string())
server.quit()
print("邮件发送成功")
except Exception as es:
print(str(es))
print("邮件发送失败")
class e:
def __init__(self,surl):
while True:
time.sleep(2)
try:
res = urllib.request.urlopen(surl)
if res.getcode() == 200:
print(surl+' ------ '+time.strftime('%Y-%m-%d %H:%M:%S'))
else:
SendEmail.send_email_text()
break
except:
SendEmail.send_email_text()
break
if __name__ == '__main__':
e(url)