python如何实时监控logstash日志

  介绍

这篇文章主要讲解了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日志