在日常的运维工作中,我们的运维人员并不能24小时的盯着网站运行的状态,一出现异常可能无法第一时间知晓并进行处理,这个时候,可能会造成很严重的影响,因此我们利用python语言编写了一个网站异常检测的脚本,在网站出现宕机、无法访问等异常时会在钉钉内进行通知,便于运维人员第一时间进行处理。接下来给大家介绍如何使用:

1、既然使用了python语言进行了开发,那么我们首先需要做的就是安装python3的使用环境,这里就不举例了,因为不同的平台安装python3的方法不同,大家可以通过百度进行学习安装。

2、我们使用了python3的requests、json、datetime、logging模块,我们需要在python3环境安装后,使用命令进行模块安装。

pip3 install requests 
#这里的requests是可以替换的,需要将使用到的模块分别进行安装,安装成功后才可以使用下边的脚本

3、在安装完模块后,我们需要到钉钉获取webhook的url地址。文档说明:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

4、接下来就是我们的代码了

#!/usr/bin/env python

import requests
import json
import time
import datetime
import logging 

logfile='/app/jk/jklog.txt'

#这里是log日志文件的路径,我们需要先创建该文件哦。不然运行会提示找不到该文件

urls = [
    'http://www.baidu.com',
    'http://www.sohu.com',
    'http://www.sina.com',
    'http://www.google.com.hk'
]
#这里urls是我们的网站域名,按格式进行添加修改
curr_time = datetime.datetime.now()

def check_url_state(url,timeout=5):
    try:
        r = requests.get(url, timeout=timeout)
        return r.status_code
    except requests.exceptions.RequestException as e:
        #print(e)
        logging.error(e)
        return "timeout"

def send_ding(text):
    import requests

    url = "https://oapi.dingtalk.com/robot/send?access_token="
    #url 为webhook地址  请自行填写

    payload = "{\r\n    \"msgtype\": \"text\", \r\n    \"text\": {\r\n        \"content\": \""+text+"\"\r\n    }\r\n}"
    payload = payload.encode('utf-8')
    headers = {
        'Content-Type': 'application/json'
    }

    response = requests.request("POST", url, headers=headers, data = payload)

    print(response.text.encode('utf8'))


if __name__ == '__main__':

    logging.basicConfig(level=logging.INFO,  
                    format='%(asctime)s - [%(levelname)s] - %(filename)s - %(message)s',
                    #datefmt='%Y-%m-%d %H:%M:%S %p',  # 时间 
                    filename=logfile,  
                    filemode='a') 
    for url in urls:
        if check_url_state(url,1) == "timeout":
            time_str = datetime.datetime.strftime(curr_time,'%Y-%m-%d %H:%M:%S')
            print("报警:",url," ",time_str)
            content = '报警网站:{}'.format(url)+"\n"+time_str
            send_ding(content)
            logging.warning(content)
        else:
            print("正常:",url)
            logging.info('正常: %s',url)

有部分提示在代码中用注释的形式进行了说明,大家需要注意。

5、最后就是运行了,我们需要通过命令来运行我们的脚本哦,

python3 jk.py

#这里的话要保持在pwd当前目录 与脚本是相同的
#如果需要定时执行的话,我们还需要利用linux的cron监控任务进行设置,这里的话就不进行说明了

6、在运行后,我们就可以看到效果了

最后修改:2024 年 09 月 02 日
如果觉得我的文章对你有用,请随意赞赏