python监控错误语句,基于Python的关键字监控及告警
基于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的关键字监控及告警相关推荐
- Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%
Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38% 仅用 Python 和命令行就可以实现人脸识别的库开源了.该库使用 dlib 顶尖的深度学习人脸识别技术构建 ...
- Python数据分析初探项目 基于Python数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022年)
Python 数据分析初探项目 基于 Python 数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022 年) Python 数据分析初探项目 基于 Python 数据可 ...
- Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能
Python语言学习:基于python五种方法实现使用某函数名[func_01]的字符串格式('func_01')来调用该函数[func_01]执行功能 目录 问题提出 代码五种设计思路 T1方法:e ...
- Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习、深度学习、大数据、云计算等)推荐系统(包括语音生成、识别等前沿黑科技)
Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习.深度学习.大数据.云计算等)推荐系统(包括语音生成.识别等前沿黑科技) 导读 基于Python的GUI界面设计的一套 ...
- 基于python的界面自动化测试-基于Python语言的自动化测试实战第二章(上)
原标题:基于Python语言的自动化测试实战第二章(上) 测试环境搭建 2.1 Windows 下的环境搭建 如果想要学习一门编程语言,对于新手来说只需到其官方网站上去下载最新版本安装即可,但对于想要 ...
- python常见错误-新手常见Python错误及异常解决处理方案
写Python代码的小伙伴不可避免地会遇到代码执行错误和异常,这次就来详细且不失通俗地总结一下python中的错误和异常. 先抛出两个问题: 什么是Python错误和异常? 如何处理Python错误和 ...
- 基于python爬虫数据处理_基于Python爬虫的校园数据获取
苏艺航 徐海蛟 何佳蕾 杨振宇 王佳鹏 摘要:随着移动时代的到来,只适配了电脑网页.性能羸弱的校园教务系统,已经不能满足学生们的移动查询需求.为此,设计了一种基于网络爬虫的高实用性查询系統.它首先通过 ...
- python处理表格数据-基于Python快速处理PDF表格数据
我们有下面一张PDF格式存储的表格,现在需要使用Python将它提取出来. 使用Python提取表格数据需要使用pdfplumber模块,打开CMD,安装代码如下: pip install pdfpl ...
- python毕业设计开题报告-基于Python的教学互动系统的设计与实现开题报告
基于Python的教学互动系统的设计与实现开题报告 背景: 在各种信息技术与课堂的不断探索中,我们一直在寻找一个能提高教学效率的方式,同时可以发现要提高教学效率,在课堂教学中必不可少的就是师生间的互动 ...
最新文章
- 余额宝技术架构读后感
- mysql topn_TopN语句
- mysql 各种恢复_Mysql数据库备份和还原常用的命令
- 洛谷 P1849 [USACO12MAR]拖拉机Tractor
- android 渲染流程
- sonar-scanner debug 模式设置(sonar-scanner调试)
- height:auto 火狐没边框
- awk按分隔符的不同取出不同的列
- Python抽象类介绍
- tab键怎么关闭_C/C++应用无障碍化如何支持Tab键浏览
- 数据库mysql,oracle,sqlite,mariadb 相关收藏
- iOS面试题系列之常见算法
- 工业嵌入式移动软件设计
- Kaldi中文语音识别:各种开源的已经训练好的语音识别模型
- 《给李彦宏先生的一封信》
- region proposal
- 终端便捷ssh(免密)连接
- 2017国培计算机研修计划,2017年国培计划个人研修计划
- [办公软件]怎么在WPS表格里设置完成率公式?
- DS18B20读取温度
热门文章
- 步步为营 .NET 代码重构学习笔记 十一
- Linux安装软件命令小结
- swift3.0:NSURLSession的使用
- Lintcode: Kth Smallest Number in Sorted Matrix
- 关于web.xml的格式
- ASP.NET Web Services Tutorial
- 实验6 VRRP网关备份(下)
- linux solusos 软件包管理工具 eopkg 简介
- linux 设备事件管理服务 systemd-udevd.service 简介
- linux shell sleep usleep 延时命令 秒 毫秒 微秒