需求: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,實際效果