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

发布于 2020-06-05

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

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

1、编写 python 脚本

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

a. 发送邮件脚本

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import smtplib
import email.mime.multipart
import email.mime.text

server = 'smtp.qq.com'
port = '25'

def sendmail(server,port,user,pwd,msg):
    smtp = smtplib.SMTP()
    smtp.connect(server,port)
    smtp.login(user, pwd)
    smtp.sendmail(msg['from'], msg['to'], msg.as_string())
    smtp.quit()
    print('邮件发送成功email has send out !')


if __name__ == '__main__':
    msg = email.mime.multipart.MIMEMultipart()
    msg['Subject'] = '服务器报警请注意!'
    msg['From'] = 'pieruo@foxmail.com'
    msg['To'] = '326709862@qq.com'
    user = 'pieruo@foxmail.com'
    pwd = 'ugndbioandhkecuj'
    content='%s\n%s' %('\n'.join(sys.argv[1:4]),' '.join(sys.argv[4:])) #格式处理,专门针对我们的邮件格式

    txt = email.mime.text.MIMEText(content, _charset='utf-8')
    msg.attach(txt)
    
    # 测试发送邮件,测试的时候取消注释
    # sendmail(server,port,user,pwd,msg)

[mark_a]可以通过 python sendmail.py 命令执行上述脚本,查看能否正常接收邮件。[/mark_a]

b. 监控服务脚本

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

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os
import sys
import smtplib
import requests
import email.mime.multipart
import email.mime.text
from requests import ReadTimeout

#sys.path.append("/root/pydir")     #系统路径中填写存放.py文件地址,然后通过import方法导入
from sendmail import *  

if __name__ == '__main__':
    msg = email.mime.multipart.MIMEMultipart()
    msg['Subject'] = '服务器报警请注意!'
    msg['From'] = 'pieruo@foxmail.com'
    msg['To'] = '326709862@qq.com'
    user = 'pieruo@foxmail.com'
    pwd = 'ugndbioandhkecci'
    content='%s\n%s' %('\n'.join(sys.argv[1:4]),' '.join(sys.argv[4:])) #格式处理,专门针对我们的邮件格式

    txt = email.mime.text.MIMEText(content, _charset='utf-8')
    msg.attach(txt)
    #sendmail(server,port,user,pwd,msg)
    
    try:
        #比如这里监控一个网址:夏日阳光
        r = requests.get('https://www.pieruo.com', timeout=5)
        if r.status_code != 200:
            sendmail(server,port,user,pwd,msg) # 发送状态码不是200的邮件内容
        else:
            sendmail(server,port,user,pwd,msg) # 发送状态码是200的邮件内容
    except (requests.exceptions.ConnectionError, ReadTimeout):
        print('Crawling Failed', 'https://www.pieruo.com')
        sendmail(server,port,user,pwd,msg)     # 发送访问超时的邮件内容

[mark_a]同样,可以通过 python checkserver.py 命令执行上述脚本,上面 sendmail 方法的内容可以自定义,不同状态发送不同内容的提醒邮件。[/mark_a]

2、添加定时任务

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

crontab -e

添加内容:

*/5 * * * * python /opt/checkserver.py >/dev/null 2>&1

[mark_a]可以将上述 python 脚本及此定时任务添加到备用服务器,一旦主服务器挂了我们可以及时收到告警邮件。[/mark_a]

3、查收邮件

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

结束语

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

喜欢 0
奋楫笃行,臻于至善!

相关文章

Chevereto 首页显示图片托管数量的实现方法

使用过 chevereto 图床程序的朋友可能都有在自己的网站首页显示托管图片的数量的需求,而这个功能需要我们手动去实现,网上有很多这方面的教程,但大多都过于繁琐。本文分享一种比较简单通用的方法,供大...
阅读全文

Chevereto 图床程序注册页面添加通过邀请码注册功能

Chevereto 是一个图床程序,如果开启注册功能的话,那么所有人都可以在平台注册帐号,为了防止某些人上传非法照片,我们可以添加一个邀请码注册的权限,那么,如果想注册帐号,就需要先得到邀请码。可以根...
阅读全文

网站图片从 wordpress 搬迁到图床 图片路径批量替换实现方法

之前发表过一篇 WordPress 图片路径批量替换方法 的文章,简单介绍了 Wordpress 图片路径批量替换的方法,但这个方法仅限于修改图片部分路径,比如替换域名。今天为大家简单介绍一下网站图片...
阅读全文

wordpress 添加评论回复邮件通知提醒功能开关

wordpress 添加评论回复邮件通知提醒功能开关 实现方法 首先将邮件回复html部分进行结构调整至如下形式,主要就是外层盒子加上mail-notify类,而input标签加上“notify”类。...
阅读全文

关于网站优化及提升网站流量的几点建议

可能好多站长有这样的困惑,自己辛辛苦苦经营了好多年的网站,网站的流量却迟迟没有变化。网站的流量的多少,是网站生命力最直接的体现,如果网站的流量较高,这在很大程度上会激励站长们继续创作下去,反之,站长们...
阅读全文

CSS3 属性 font-smoothing 字体平滑处理和抗锯齿渲染

在浏览网页的时候,偶然看到某个网页的字体特别清晰细致,所以就很想知道它使用了什么字体或样式。后来才发现原来是 -webkit-font-smoothing 这个 CSS 属性渲染的结果,这个属性可以对...
阅读全文

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注