今天中午的时候,网站莫名奇妙地出现无法访问的现象,持续了两个多小时,等发现问题的时候立刻重启了服务器才恢复正常。为防止同样的事情再次发生,所以就想编写一个自动化脚本来监控网站服务,今天为大家分享一下使用 python 脚本实现网站自动监控并发送告警邮件的方法。

使用 python 脚本实现自动监控网站并发送邮件告警-图片1

1、编写 python 脚本

需要编写两个 python 脚本,一个用来发送邮件 sendmail.py,另一个用来监控服务 checkserver.py,其中 checkserver.py 中会调用 sendmail.py。

a. 发送邮件脚本

首先,编写发送邮件的 python 程序,并保存到指定目录下(比如 /opt),命名为 sendmail.py,文件内容如下:

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. import sys
  4. import smtplib
  5. import email.mime.multipart
  6. import email.mime.text
  7.  
  8. server = 'smtp.qq.com'
  9. port = '25'
  10.  
  11. def sendmail(server,port,user,pwd,msg):
  12. smtp = smtplib.SMTP()
  13. smtp.connect(server,port)
  14. smtp.login(user, pwd)
  15. smtp.sendmail(msg['from'], msg['to'], msg.as_string())
  16. smtp.quit()
  17. print('邮件发送成功email has send out !')
  18.  
  19.  
  20. if __name__ == '__main__':
  21. msg = email.mime.multipart.MIMEMultipart()
  22. msg['Subject'] = '服务器报警请注意!'
  23. msg['From'] = 'pieruo@foxmail.com'
  24. msg['To'] = '326709862@qq.com'
  25. user = 'pieruo@foxmail.com'
  26. pwd = 'ugndbioandhkecuj'
  27. content='%s\n%s' %('\n'.join(sys.argv[1:4]),' '.join(sys.argv[4:])) #格式处理,专门针对我们的邮件格式
  28.  
  29. txt = email.mime.text.MIMEText(content, _charset='utf-8')
  30. msg.attach(txt)
  31. # 测试发送邮件,测试的时候取消注释
  32. # sendmail(server,port,user,pwd,msg)
可以通过 python sendmail.py 命令执行上述脚本,查看能否正常接收邮件。

b. 监控服务脚本

其次,编写监控服务的 pytyon 程序,保存到指定目录下(比如 /opt),命名为 checkserver.py,文件内容如下:

  1. #!/usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3. import os
  4. import sys
  5. import smtplib
  6. import requests
  7. import email.mime.multipart
  8. import email.mime.text
  9. from requests import ReadTimeout
  10.  
  11. #sys.path.append("/root/pydir") #系统路径中填写存放.py文件地址,然后通过import方法导入
  12. from sendmail import *
  13.  
  14. if __name__ == '__main__':
  15. msg = email.mime.multipart.MIMEMultipart()
  16. msg['Subject'] = '服务器报警请注意!'
  17. msg['From'] = 'pieruo@foxmail.com'
  18. msg['To'] = '326709862@qq.com'
  19. user = 'pieruo@foxmail.com'
  20. pwd = 'ugndbioandhkecci'
  21. content='%s\n%s' %('\n'.join(sys.argv[1:4]),' '.join(sys.argv[4:])) #格式处理,专门针对我们的邮件格式
  22.  
  23. txt = email.mime.text.MIMEText(content, _charset='utf-8')
  24. msg.attach(txt)
  25. #sendmail(server,port,user,pwd,msg)
  26. try:
  27. #比如这里监控一个网址:夏日阳光
  28. r = requests.get('https://www.pieruo.com', timeout=5)
  29. if r.status_code != 200:
  30. sendmail(server,port,user,pwd,msg) # 发送状态码不是200的邮件内容
  31. else:
  32. sendmail(server,port,user,pwd,msg) # 发送状态码是200的邮件内容
  33. except (requests.exceptions.ConnectionError, ReadTimeout):
  34. print('Crawling Failed', 'https://www.pieruo.com')
  35. sendmail(server,port,user,pwd,msg) # 发送访问超时的邮件内容
同样,可以通过 python checkserver.py 命令执行上述脚本,上面 sendmail 方法的内容可以自定义,不同状态发送不同内容的提醒邮件。

2、添加定时任务

添加一个定时任务,每 5 分钟执行一次,执行上面编写好的监控脚本,检查网站服务是否正常。

  1. crontab -e

添加内容:

  1. */5 * * * * python /opt/checkserver.py >/dev/null 2>&1
可以将上述 python 脚本及此定时任务添加到备用服务器,一旦主服务器挂了我们可以及时收到告警邮件。

3、查收邮件

如果网站服务不能正常访问,我们会及时收到告警邮件。

使用 python 脚本实现自动监控网站并发送邮件告警-图片2

结束语

使用脚本可以帮我们做很多事情,本文简单分享了一下使用 python 脚本实现网站自动监控并发送告警邮件的实现方法,脚本程序来源于网络,经本人亲自调试通过。如果你喜欢本文,别忘了点赞哦。如果有任何意见或建议,欢迎在下方评论处留言。

本文已通过「原本」原创作品认证,转载请注明文章出处及链接。

夏日阳光
  • 本文由 夏日阳光 发表于 2021年10月5日
  • 本文为夏日阳光原创文章,转载请务必保留本文链接:https://www.pieruo.com/191.html
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证
加载中...