介绍
这篇文章主要讲解了python如何实时监控logstash日志,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
实时读取logstash日志,有异常错误keywork即触发报警。
#/usr/bin/env python3 # - * -编码:utf - 8 - * # __author__=caozhi # create_time 2018-11-12, update_time 2018-11-15 #=1.0版本 #录像高可用报警 # 1读取日志使用游标移动 # 2线上业务日志文件会切割,切割后,读取上一个切割的日志 进口操作系统 导入系统 进口json 进口的要求 导入的时间 进口再保险 cini=conf.ini& # 39; log_file=logstash.log& # 39; def readconf (): 试一试: 张开(cini & # 39; r + & # 39;) f: 参看=json.load (f) 除了: 参看={“seek": 0,“inode": 922817年,“last_file": logstash.log"} writeconf(参看=CONF) 打印(& # 39;conf。ini配置文件缺失,自动创建一个新的配置文件& # 39;) 返回相依 def writeconf(设计): 张开(cini & # 39; w + & # 39;) e: json。转储(参看,e) def read_log (log_file,寻求): 试一试: f=开放(log_file & # 39; " # 39;) 除了FileNotFoundError: f=开放(logstash.log& # 39; & # 39; " # 39;) 寻求=0 打印(& # 39;上一个文件读取失败了,请检查切割的日志文件& # 39;) 除了: 打印(& # 39;日志文件打开错误,退出程序& # 39;) sys.exit () f.seek(寻找) 行=f.readline () new_seek=f.tell () 如果new_seek==寻求: 打印(& # 39;没有追加日志,退出程序& # 39;) sys.exit () 而行: 试一试: logstash=json.loads(线) 除了: 参看={“seek": 0,“inode": 922817年,“last_file":“/数据/logs/lmr/logstash.log"} writeconf(参看=CONF) 打印(& # 39;json数据加载错误,重新创建一个新的配置文件& # 39;) sys.exit () #如果& # 39;& # 39;& # 39;re.search (time.strftime (“Y %: % H: % M", time.localtime ()), logstash.get (& # 39; log_time& # 39;))和& # 39;& # 39;& # 39;logstash.get (& # 39; rtype& # 39;)==6和logstash.get (& # 39; uri # 39;)==& # 39;/发布# 39;和logstash.get(& # 39;事件# 39;)==0: 如果logstash.get (& # 39; rtype& # 39;)==6和logstash.get (& # 39; uri # 39;)==& # 39;/发布# 39;和logstash.get(& # 39;事件# 39;)==0: 值=1 流=logstash.get(& # 39;名字# 39;) 打印(& # 39;{}{}& # 39;。格式(价值,流) 记录(价值=价值,流=流) 其他: 值=0 流=0 行=f.readline () 寻求=f.tell () f.close 返回值,流,寻求 流def记录(价值): data=[] 记录={} 记录(& # 39;指标# 39;]=& # 39;recording_high_availability_monitor& # 39; 记录(& # 39;端点# 39;]=os.uname () [1] 记录(& # 39;时间戳# 39;]=int (time.time ()) 记录(& # 39;步骤# 39;]=60 记录(& # 39;价值# 39;]=价值 记录(& # 39;相等物# 39;]=& # 39;计# 39; 记录(& # 39;标签# 39;]=& # 39;{}={}& # 39;.format (int (time.time()),流) data.append(记录) 如果数据: 打印(& # 39;这是数据的json数据& # 39;) 打印(数据) falcon_request=requests.post (“http://127.0.0.1:1988/v1/push", data=json.dumps(数据) # falcon_request=requests.post (“http://127.0.0.1:1988/v1/push", json=数据) 打印(& # 39;json参数请求返回状态码为:& # 39;+ str (falcon_request.status_code)) 打印(& # 39;json参数请求返回为:& # 39;+ str (falcon_request.text)) if __name__==& # 39; __main__ # 39;: print () 打印(& # 39;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * & # 39;) 打印(& # 39;本次执行脚本时间:{}& # 39;.format (time.strftime (“% Y % m % d_ % H % M", time.localtime ()))) 参看=readconf () 打印(& # 39;first_CONF: {} & # 39; .format(参看)) 打印(& # 39;NO1.log_file& # 39;, log_file) last_inode=参看[& # 39;inode # 39;】 inode=os.stat .st_ino (log_file) 打印(& # 39;last_inode: {} inode: {} & # 39;。格式(last_inode inode)) 如果inode==last_inode: 寻求=参看[& # 39;寻求# 39;】 next_file=0 其他: log_file=参看[& # 39;last_file& # 39;] + time.strftime (“Y - % % m % d_", time.localtime ()) + str (time.strftime (“% H % M", time.localtime ())) (: 1) + & # 39; 0 & # 39; next_file=1 寻求=参看[& # 39;寻求# 39;】 打印(& # 39;NO2.log_file& # 39;, log_file) 价值,流,寻求=read_log (log_file=log_file,寻求=寻找) 如果next_file: 参看[& # 39;寻求# 39;]=0 其他: 参看[& # 39;寻求# 39;]=参看[& # 39;inode # 39;]=os.stat .st_ino (logstash.log& # 39;) writeconf(参看=CONF) 打印(& # 39;last_CONF: {} & # 39; .format(参看))python如何实时监控logstash日志