为了解决日志文件监控的问题, 使用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.sh
logging.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')
# pass
def readWrite(filename):
return open(filename,'rw')
# pass
def writeOnly(filename):
return open(filename,'w')
# pass
# def closesfile():
# pass
def 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 , ''
# pass
def 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
# pass
def getDistinct(startpos,endpos):
return endpos-startpos
def getText(f,startpos,endpos):
filename=readOnly(f)
filename.seek(startpos,0)
textLength=getDistinct(startpos,endpos)
text=filename.read(textLength)
filename.close()
return text
def 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()
pass
def 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 result
def 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中关键字nonlocal和global的声明与解析
# Python爬虫:通过关键字爬取百度图片
# Python 中的with关键字使用详解
# 深入解析Python编程中super关键字的用法
# 编写Python小程序来统计测试脚本的关键字
# Python查询阿里巴巴关键字排名的方法
# python关键字and和or用法实例
# Python中super关键字用法实例分析
# Python中关键字is与==的区别简述
# phpsir 开发 一个检测百度关键字网站排名的python 程序
# 偏移量
# 时需
# 大家多多
# 长度为
# 完成了
# filemode
# basDir
# mac
# Desktop
# pos
# configFile
# log
# posFiles
# lineno
# levelname
# filename
# line
# message
# asctime
# Users
相关文章:
济南网站制作的价格,历城一职专官方网站?
高防服务器租用指南:配置选择与快速部署攻略
javascript中的try catch异常捕获机制用法分析
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
如何在VPS电脑上快速搭建网站?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
建站之星备案流程有哪些注意事项?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
网站制作免费,什么网站能看正片电影?
家庭建站与云服务器建站,如何选择更优?
如何快速重置建站主机并恢复默认配置?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何在景安云服务器上绑定域名并配置虚拟主机?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
盐城做公司网站,江苏电子版退休证办理流程?
定制建站哪家更专业可靠?推荐榜单揭晓
如何选择高性价比服务器搭建个人网站?
网站制作企业,网站的banner和导航栏是指什么?
如何通过建站之星自助学习解决操作问题?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
如何通过wdcp面板快速创建网站?
TestNG的testng.xml配置文件怎么写
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
建站之星安装后界面空白如何解决?
制作门户网站的参考文献在哪,小说网站怎么建立?
建站主机与虚拟主机有何区别?如何选择最优方案?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
独立制作一个网站多少钱,建立网站需要花多少钱?
如何高效搭建专业期货交易平台网站?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
黑客如何通过漏洞一步步攻陷网站服务器?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
如何在建站宝盒中设置产品搜索功能?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
潮流网站制作头像软件下载,适合母子的网名有哪些?
兔展官网 在线制作,怎样制作微信请帖?
如何在IIS7上新建站点并设置安全权限?
教学论文网站制作软件有哪些,写论文用什么软件
?
家具网站制作软件,家具厂怎么跑业务?
网站网页制作专业公司,怎样制作自己的网页?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
建站之星如何助力网站排名飙升?揭秘高效技巧
如何通过远程VPS快速搭建个人网站?
c# 在ASP.NET Core中管理和取消后台任务
如何彻底卸载建站之星软件?
小程序网站制作需要准备什么资料,如何制作小程序?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。