在日常的运维工作中,我们的运维人员并不能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、在运行后,我们就可以看到效果了