需求:1, 使用 grep 查找关键字的方式,查找日志中的错误信息,并输出到文件;
2, 判断文件 不为空 则 使用 钉钉机器人反馈附件到 日志监控报警群;
3, 做好计划任务,每8时自动执行一次;
4,要求群机器人分享的链接标题要包含日志行数,时间,日志为空则不发送链接。
钉钉开发平台上面对群机器人开发语言有限制,我唯一熟悉点的就是python,所以用sh脚本输出日志到文件,然后用python脚本发送信息到群机器人。
1,sh脚本查找日志并输出到txt文件
#!/bin/bash
#2020-03-12
now_time=`date "+%Y%m%d_%H%M"`
grep '404 -' /data/logs/apache_access/* > /data/logs/20200312/apache_access_404_$now_time.txt
2,python脚本发送信息给群机器人
# encoding: utf-8
import json
import requests
import sys
import datetime
now_time=datetime.datetime.now().strftime('%Y%m%d_%H%M')
print now_time #脚本执行时间
log_name="/data/logs/20200312/apache_access_404_%s.txt" % now_time #文件名
count = len(open(r'%s' % log_name,'rU').readlines()) #日志行数
def send_msg(url):
headers = {'Content-Type': 'application/json;charset=utf-8'}
data = {
"msgtype": "link",
"link": {
"text": "%s sh_yx_cong3 \n日志行数:%s" %(now_time, count), #群机器人分享的标题
"title": "sh_yx_cong3 %s apache_access_404_log" %(now_time), #群机器人分享的内容
"picUrl": "", #群机器人分享链接的图片
"messageUrl": "群机器人分享的链接" %(now_time) #群机器人分享链接的地址
}
}
r = requests.post(url,data = json.dumps(data),headers=headers)
return r.text
if __name__ == '__main__':
url = 'https://oapi.dingtalk.com/robot/send?access_token=你自己的群机器人地址'
if count != 0: #如果日志为空,则不发送
print(send_msg(url))
else:
print('log_len != 0')
3,设置cron定时执行脚本
crontab -e
1 */8 * * * /usr/bin/bash /root/script/f1_greplog.sh && /usr/bin/python/2.7 /root/script/f2_error_404log.py
4,实际效果