关于python+shell脚本实现nginx错误日志报警

关于python+shell脚本实现nginx错误日志报警

**

1.shell脚本

**

这是采取awk的方式通过截取nginx日志的时间 来统计一分钟内错误日志有哪些或者有多少,并打印出来


```powershell
#!/bin/bash                   
#!/usr/bin/python
# -*- coding:utf-8 -*-
#日志文件路径                                                                                           
hostname=`hostname`    
logfile=/var/log/nginx    
#当天日期,年月日                                                                                        
cur_date=`date +"%Y/%m/%d"`    
    
#开始时间(1分钟前),时分秒                                                                             
start_time=`date -d"1 minutes ago" +"%H:%M:%S"`    
    
#结束时间,时分秒                                                                                        
stop_time=`date +"%H:%M:%S"`    
    
#把新增的错误日志写到new_error_log中                                                                    
tac $logfile/error.log | awk -v st="$start_time" -v et="$stop_time" -v dt="$cur_date" '{t=$2;t1=$1; if(dt==t1 && t>=st && t<=et) {print $0}}' > $logfile/new_error_log.txt
#err_log=`tail -10 $logfile/new_error_log.txt`                                
#file_size=`du $logfile/new_error_log.txt | awk '{print $1}'`                                            
hang=`awk '{print NR}' $logfile/new_error_log.txt|tail -n1`                                                                             
if [[ $hang -lt 3 ]];then                       
        err_log=`tail -3 $logfile/new_error_log.txt`
        python /root/scripts/send_ding.py "$err_log"
else
        err_log=`tail -1 $logfile/new_error_log.txt`
        python /root/scripts/send_ding.py "$err_log
        等$hang条错误"
fi

2.python小脚本

这个主要是结合钉钉来实现群机器人报警功能

#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests 
import json
import sys 
import os

headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://oapi.dingtalk.com/robot/send?access_token=这里填入机器人的hook,就是全是数字那一串东西"

def msg(text,subject):
    json_text= {
        "actionCard": {
            "title": subject,
            "text": text,
            "hideAvatar": "0",
            "btnOrientation": "0",
            "btns": [
                {   
                    "title": subject[:12],
                    "actionURL": ""
                    }   
                ]   
            },  
            "msgtype": "actionCard"
        }   

    print(requests.post(api_url,json.dumps(json_text),headers=headers).content)

if __name__== '__main__':
    text = sys.argv[1]
    text = text.replace("\n", "\n\n")
    subject = sys.argv[1]
    msg(text, subject)

3.加入到计划任务,一分钟执行一次
*/1 * * * * sh /root/scripts/alert_nginx_hang.sh

结语

总的来说,实现起来并没有特别大难度,其实可以用zabbix专门有功能监控nginx错误日志的,但是由于公司没用这么重量级的,所以就采取这种轻量化的脚本来实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值