Python实现日志文件监控并进行钉钉告警

使用Python实现对日志文件的监控,并进行钉钉告警,通过查询服务器日志文件,找寻日志文件中关键字,向钉钉群聊中发送存在关键字行的日志,并艾特配置的相关人员,从而实现对日志文件的监控并告警,具体实现代码如下:

# -*- coding: utf-8 -*
import io
import os
import zipfile
import dingtalkchatbot.chatbot as cb
import datetime
import sys
reload(sys)
sys.setdefaultencoding('utf8')
class LOG():

    def haszipfile(self,targetDir):
        """
        判断文件夹下是否存在zip
        :param targetDir:
        :return:
        """
        for file in os.listdir(targetDir):
            targetFile = os.path.join(targetDir, file)
            if os.path.isfile(targetFile) and targetFile[-4:].lower == '.zip':
                return True
        return False
    def print_log(self,file,at_mobiles):
        try:

            for service in services:


                yesterday = (datetime.date.today() + datetime.timedelta(days=-1)).strftime("%Y-%m-%d")
                targetDir=file+service+'/logs' #logs目录
                if self.haszipfile(targetDir):
                    os.popen(
                        'unzip -o ' + file + service + '/logs/'+ service+ yesterday + '.zip -d ' + file + service + '/logs')

                    log_file = file + service + '/logs/' +service+ yesterday
                else:

                    log_file =file + service + '/logs/' +service+ yesterday+ '.log'
                f = io.open(log_file, "r", encoding='UTF-8')



                lines = f.readlines()
                # 查找关键字
                for line in lines:
                    if "exception" in line:
                        secret= 'SECfe866b317f4f760af6071bb32a518b8bfc898394e67970ebd3100cae5c882086'  #密签

                        webhook = 'https://oapi.dingtalk.com/robot/send?access_token=06e13726e305020c65c32c5b530460e2f88503cb573318dfd0c16359d98e36ef' #机器人发送消息url
                        ding = cb.DingtalkChatbot(webhook,secret=secret,)

                        ding.send_text(msg=service+'服务'+log_file+'日志文件存在异常关键词,所在行内容为:'+line,at_mobiles=at_mobiles)
                        # print(log_file+'日志文件存在异常关键词,所在行内容为:'+line)
                    else:
                        pass

                f.close()
        except Exception as e:
            print(str(e))


if __name__ == '__main__':
    """
     设置每天8点定时执行.
     1.在服务器输入命令:crontab -e
     2.输入 0 8 * * * python /mnt/app/log.py,然后wq保存退出(py文件路径根据实际填写)

    """
    services=['gateway','uaa-pg','cache-server'] #可配置多个服务日志目录下文件监控
    file = '/mnt/app/'  #服务根目录
    at_mobiles=['12345678911']  #需要艾特人的手机号,支持配置多个
    log=LOG()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gcs12345

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值