系统版本:centos7.9
python版本:3.6
目录:一、添加钉钉机器人
二、编写脚本
三、测试
一、添加钉钉机器人
1.1点击智能群助手
![](https://img-blog.csdnimg.cn/bd7be1a9f5be46f997cf7cd1a94f25f4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LaF6IO95Yqb5aSn6ZuE,size_18,color_FFFFFF,t_70,g_se,x_16)
1.2 添加机器人,因我已创建,所以会显示一个运维报警。
![](https://img-blog.csdnimg.cn/d296f5997a46455cbded5a5ceb0368ca.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LaF6IO95Yqb5aSn6ZuE,size_18,color_FFFFFF,t_70,g_se,x_16)
1.3 添加一个机器人
![](https://img-blog.csdnimg.cn/1093f41f7695413c95ca415b7a555a17.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LaF6IO95Yqb5aSn6ZuE,size_20,color_FFFFFF,t_70,g_se,x_16)
1.4 选择webhook自定义
![](https://img-blog.csdnimg.cn/274f4c795c954f7999c9934993a1b5a1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LaF6IO95Yqb5aSn6ZuE,size_20,color_FFFFFF,t_70,g_se,x_16)
1.5 确认添加,我选择的是IP段,把服务器公网IP填进去就行,可以去看下左侧的说明文档。
![](https://img-blog.csdnimg.cn/3c906e5b06ac4299be526eb71da0c6cc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LaF6IO95Yqb5aSn6ZuE,size_20,color_FFFFFF,t_70,g_se,x_16)
1.6 创建好后保存好webhook链接![](https://img-blog.csdnimg.cn/37edcf7b1b33451b8a31ca9c093c4ae1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LaF6IO95Yqb5aSn6ZuE,size_20,color_FFFFFF,t_70,g_se,x_16)
二、编写报警脚本,随便新建个*.py即可,该项目创建的为ding.py
2.1 编写py脚本
cd /root/
touch ding.py
vim ding.py
#######以下为py脚本内容#######
#!/usr/bin/python
# -*- coding: utf-8 -*
import urllib
import urllib2
import json,re
import sys, shutil, os, string, datetime,time
filelog = sys.argv[1]
serverip = sys.argv[2] #来标识是那个服务器发送的警报
def http_post( errmsg ):
url = "这里填写刚刚保存的机器人webhook链接"
values = {'msgtype': 'text'}
content = {}
content['content'] = serverip + errmsg
values['text'] = content
headers = {'Content-Type':'application/json;charset=UTF-8'}
jdata = json.dumps(values)
print jdata
req = urllib2.Request(url, jdata , headers)
response = urllib2.urlopen(req)
data = json.loads(response.read())
errcode = data['errcode']
print errcode
return errcode
def senderror( filepath ):
file = open(filepath)
file.seek(0, os.SEEK_END)
while 1:
where = file.tell()
line = file.readline()
if not line:
time.sleep(1)
file.seek(where)
else:
print line,
http_post(line)
senderror( filelog )
2.2 里面有两个变量,第一个是日志路径,第二个是自定义的服务器名称。
filelog = sys.argv[1]
serverip = sys.argv[2]
2.3 现在我们写一个sh脚本来引用上面的py脚本,我把该脚本放在了/etc/rc.d/下,命名为ding.sh
cd /etc/rc.d/
touch ding.sh
vim ding.sh
#######以下为sh脚本内容#######
#!/bin/bash
nohup python /root/ding.py /日志路径/php_errors.log 生产A服务器php日志报警: &
nohup python /root/ding.py /日志路径/error.log 生产A服务器前端nginx日志报警: &
nohup python /root/ding.py /日志路径/api.error.log 生产A服务器后端nginx日志报警: &
2.4 可以看到上面使用了nohup来设置后台运行,并且绝对路径写了刚刚py脚本所在的位置,变量1写了日志绝对路径,变量2写了自定义发送到钉钉的后缀机器名称。
2.5 现在把该脚本设置开机自启动。
vim /etc/rc.d/rc.local
2.6 把以下内容添加到末尾
bash /etc/rc.d/ding.sh
2.7 现在把脚本添加执行权限,注意:默认rc.local不引用,需要添加执行权限才会开机引用。
chmod +x /root/ding.py
chmod +x /etc/rc.d/ding.sh
chmod +x /etc/rc.d/rc.local
三、测试
3.1 现在我们可以进行测试,有两种方式。
3.1.1、重启机器
3.1.2、直接运行ding.sh
因该机器为线上服务器,所以选择第二种方式进行测试
3.2 运行ding.sh
cd /etc/rc.d/
./ding.sh
![](https://img-blog.csdnimg.cn/97076e54ee96479d814c975cab4f50a5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LaF6IO95Yqb5aSn6ZuE,size_16,color_FFFFFF,t_70,g_se,x_16)
直接回车就行
3.3 现在看下进程是否运行
ps aux |grep ding
![](https://img-blog.csdnimg.cn/341b08ebb3724cb4b47988ac2afa0c9e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LaF6IO95Yqb5aSn6ZuE,size_20,color_FFFFFF,t_70,g_se,x_16)
可以看到脚本正常在运行。
3.4 现在可以手动写入一个日志查看钉钉是否正常报警。
cat >> /日志路径/error.log << EOF
>测试报警
>EOF
![](https://img-blog.csdnimg.cn/0b06a56bfab84dd7b50eb37bf5f29986.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LaF6IO95Yqb5aSn6ZuE,size_20,color_FFFFFF,t_70,g_se,x_16)
有问题可以评论,看到了会回复。