基于Python的关键字监控及告警

来源:中文源码网    浏览: 次    日期:2018年9月2日

【下载文档:  基于Python的关键字监控及告警.txt 】

(友情提示:右键点上行txt文档名->目标另存为)

基于Python的关键字监控及告警 为了解决日志文件监控的问题, 使用python脚本完成了基于关键字的告警功能

环境 python 2.7

依赖包 time \ traceback \ filelock \ logging

代码如下:

#!/bin/python

#coding:utf-8

import sys

reload(sys)

sys.setdefaultencoding('utf8')

import re

import os

from urllib import urlencode

import logging

import filelock

import time

import traceback#config.conf

#文件1:关键字A|关键字B:出现次数:告警方式:联系方式:联系组:某某异常

#文件2:关键字C|关键字D:出现次数:告警方式:联系方式:联系组:某某异常#rc.local增加

#sudo -u monitor /bin/bash -x /home/apps/logmon-job/deploy_py.shlogging.basicConfig(level=logging.DEBUG,

format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',

datefmt='%a, %d %b %Y %H:%M:%S',

filename='/home/logs/monitor/logmon.log',

#filename='/Users/mac/Desktop/logmon/logmon.log',

filemode='a')basDir='/home/apps/logmon-job/'posFiles=basDir+'/pos.log'

configFile=basDir+'config.conf'def readOnly(filename):

return open(filename,'r')

# passdef readWrite(filename):

return open(filename,'rw')

# pass

def writeOnly(filename):

return open(filename,'w')

# pass# def closesfile():

# passdef getStartPosLog(posFiles):

txt=readOnly(posFiles)

result={}

for i in txt :

filename,pos=i.split(':')

if filename != '' :

result[filename]=pos

return result

txt.close()def rematch(txt,regular):

resultList=[]

for t in txt.split(r'\n') :

# print t

# pattern = re.compile(r':')

pattern = re.compile(regular) resultList=(pattern.findall(t))

try :

# print '匹配结果为',resultList

return len(resultList),regular , resultList[0]

except Exception as e :

print e

return 0 , regular , ''

# passdef getEndPost(f):

filename=readOnly(f)

try :

nowpos=filename.tell()

filename.seek(0,2)

endpos=filename.tell()

filename.seek(nowpos,0)

except :

endpos = 0

filename.close()

return endpos

# passdef getDistinct(startpos,endpos):

return endpos-startposdef getText(f,startpos,endpos): filename=readOnly(f)

filename.seek(startpos,0)

textLength=getDistinct(startpos,endpos)

text=filename.read(textLength)

filename.close()

return textdef updatePosLog(posResult,posFiles):

f=writeOnly(posFiles)

# print 'posResult ',posResult

for k in posResult.keys() :

v=posResult[k]

f.writelines('%s:%s\n' %(k,v))

f.close() passdef getAlterConfi(filename):

#文件:关键字:出现次数:告警方式:联系方式:联系组

f=readOnly(filename)

result={}

for lines in f.readlines():

# print lines

try :

filename , key , count , alterType , alterAddress , alterGroup ,alterMessage= lines.strip('\n').split(":")

result[filename]={}

result[filename]["key"] =key

result[filename]["count"] =count

result[filename]["alterType"] =alterType

result[filename]["alterAddress"]=alterAddress

result[filename]["alterGroup"] =alterGroup

result[filename]["alterMessage"]=alterMessage

except Exception as e:

print e

print '错误的配置 %s' % (lines.strip('\n'))

pass

return resultdef sendSms(account,message): data={

'accounts':account ,

'templateName':'opalert' ,

'alertcontent':message ,

}

encodeMessage=urlencode(data) #正式时需要开启

os.system('curl -I "http://10.1.1.146:8080/sms/send?%s" ' % ( encodeMessage ) )def main():

global posFiles

global configFile AlterConfi=getAlterConfi(configFile)

print AlterConfi

posResult=getStartPosLog(posFiles)

posResult_bak=getStartPosLog(posFiles)

# print posResult

for filename in AlterConfi.keys() :

keyDict=AlterConfi[filename]

print '开始检查文件 ',filename

#print rematch(filename,r'#')[0]

if not os.path.exists(filename):

print 'file "%s" not exist ,pass' % (filename)

# continue

if os.path.exists(filename):

endpos = getEndPost(filename) if endpos == 0 :

print 'file "%s" is empty ,pass' % (filename)

else :

try :

startpos= int(posResult[filename])

except :

startpos = 0

print 'startpos is %.f , endpos is %.f' %(startpos ,endpos) #处理切割后,偏移量归位

if startpos > endpos :

startpos = 0 text = getText(filename,startpos,endpos)

# print '%s text is : '%(filename) , text #分析关键字

#print AposlterConfi[filename]

matchCount , regular , resultList = rematch(text,keyDict['key'])

print '匹配关键字',regular , '匹配长度为', matchCount , '关键字告警阈值' ,keyDict['count'] , '关键字' , resultList if int(matchCount) >= int(keyDict['count']) :

print 'alterGroup len is ',len(keyDict['alterGroup'])

print 'alterType len is ' ,len(keyDict['alterType'])

if len(keyDict['alterGroup']) > 0:

pass

if len(keyDict['alterType']) >0:

if keyDict['alterType'].upper() == 'SMS' :

for account in keyDict['alterAddress'].split(',') :

if len(account) >0 :

sendSms(account,'发现%s 告警,关键字:%s ,出现次数:%s ' %(keyDict['alterMessage'] , resultList , matchCount ))

pass

#记录末尾偏移量

posResult_bak[filename]=endpos

print '打印文件偏移量信息',posResult_bak

#正式时需要开启

updatePosLog(posResult_bak,posFiles)

if __name__ == '__main__':

lock = filelock.FileLock("/home/apps/logmon-job/logmon.py.lock")

if lock:

logging.info("CaiWeiCheng Get Lock.start!!!")

try:

with lock.acquire(timeout=5):

while 1 :

main()

time.sleep(60)

# pass

#except filelock.timeout :

except Exception as e :

print traceback.format_exc()

print "timeout"

logging.warning("get file lock timeout")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持中文源码网。

亲,试试微信扫码分享本页! *^_^*

python监控错误语句,基于Python的关键字监控及告警相关推荐

  1. Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%

    Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38% 仅用 Python 和命令行就可以实现人脸识别的库开源了.该库使用 dlib 顶尖的深度学习人脸识别技术构建 ...

  2. Python数据分析初探项目 基于Python数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022年)

    Python 数据分析初探项目 基于 Python 数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022 年) Python 数据分析初探项目 基于 Python 数据可 ...

  3. Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能

    Python语言学习:基于python五种方法实现使用某函数名[func_01]的字符串格式('func_01')来调用该函数[func_01]执行功能 目录 问题提出 代码五种设计思路 T1方法:e ...

  4. Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习、深度学习、大数据、云计算等)推荐系统(包括语音生成、识别等前沿黑科技)

    Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习.深度学习.大数据.云计算等)推荐系统(包括语音生成.识别等前沿黑科技) 导读 基于Python的GUI界面设计的一套 ...

  5. 基于python的界面自动化测试-基于Python语言的自动化测试实战第二章(上)

    原标题:基于Python语言的自动化测试实战第二章(上) 测试环境搭建 2.1 Windows 下的环境搭建 如果想要学习一门编程语言,对于新手来说只需到其官方网站上去下载最新版本安装即可,但对于想要 ...

  6. python常见错误-新手常见Python错误及异常解决处理方案

    写Python代码的小伙伴不可避免地会遇到代码执行错误和异常,这次就来详细且不失通俗地总结一下python中的错误和异常. 先抛出两个问题: 什么是Python错误和异常? 如何处理Python错误和 ...

  7. 基于python爬虫数据处理_基于Python爬虫的校园数据获取

    苏艺航 徐海蛟 何佳蕾 杨振宇 王佳鹏 摘要:随着移动时代的到来,只适配了电脑网页.性能羸弱的校园教务系统,已经不能满足学生们的移动查询需求.为此,设计了一种基于网络爬虫的高实用性查询系統.它首先通过 ...

  8. python处理表格数据-基于Python快速处理PDF表格数据

    我们有下面一张PDF格式存储的表格,现在需要使用Python将它提取出来. 使用Python提取表格数据需要使用pdfplumber模块,打开CMD,安装代码如下: pip install pdfpl ...

  9. python毕业设计开题报告-基于Python的教学互动系统的设计与实现开题报告

    基于Python的教学互动系统的设计与实现开题报告 背景: 在各种信息技术与课堂的不断探索中,我们一直在寻找一个能提高教学效率的方式,同时可以发现要提高教学效率,在课堂教学中必不可少的就是师生间的互动 ...

最新文章

  1. 余额宝技术架构读后感
  2. mysql topn_TopN语句
  3. mysql 各种恢复_Mysql数据库备份和还原常用的命令
  4. 洛谷 P1849 [USACO12MAR]拖拉机Tractor
  5. android 渲染流程
  6. sonar-scanner debug 模式设置(sonar-scanner调试)
  7. height:auto 火狐没边框
  8. awk按分隔符的不同取出不同的列
  9. Python抽象类介绍
  10. tab键怎么关闭_C/C++应用无障碍化如何支持Tab键浏览
  11. 数据库mysql,oracle,sqlite,mariadb 相关收藏
  12. iOS面试题系列之常见算法
  13. 工业嵌入式移动软件设计
  14. Kaldi中文语音识别:各种开源的已经训练好的语音识别模型
  15. 《给李彦宏先生的一封信》
  16. region proposal
  17. 终端便捷ssh(免密)连接
  18. 2017国培计算机研修计划,2017年国培计划个人研修计划
  19. [办公软件]怎么在WPS表格里设置完成率公式?
  20. DS18B20读取温度

热门文章

  1. 步步为营 .NET 代码重构学习笔记 十一
  2. Linux安装软件命令小结
  3. swift3.0:NSURLSession的使用
  4. Lintcode: Kth Smallest Number in Sorted Matrix
  5. 关于web.xml的格式
  6. ASP.NET Web Services Tutorial
  7. 实验6      VRRP网关备份(下)
  8. linux solusos 软件包管理工具 eopkg 简介
  9. linux 设备事件管理服务 systemd-udevd.service 简介
  10. linux shell sleep usleep 延时命令 秒 毫秒 微秒