最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python的關(guān)鍵字監(jiān)控及告警

 更新時間:2017年07月06日 07:55:22   作者:偉成  
這篇文章主要為大家詳細(xì)介紹了基于Python的關(guān)鍵字監(jiān)控及告警,具有一定的參考價值,感興趣的小伙伴們可以參考一下

為了解決日志文件監(jiān)控的問題, 使用python腳本完成了基于關(guān)鍵字的告警功能

環(huán)境 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:關(guān)鍵字A|關(guān)鍵字B:出現(xiàn)次數(shù):告警方式:聯(lián)系方式:聯(lián)系組:某某異常
#文件2:關(guān)鍵字C|關(guān)鍵字D:出現(xiàn)次數(shù):告警方式:聯(lián)系方式:聯(lián)系組:某某異常

#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 '匹配結(jié)果為',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):
  #文件:關(guān)鍵字:出現(xiàn)次數(shù):告警方式:聯(lián)系方式:聯(lián)系組
  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

        #分析關(guān)鍵字
        #print AposlterConfi[filename]
        matchCount , regular , resultList = rematch(text,keyDict['key'])
        print '匹配關(guān)鍵字',regular , '匹配長度為', matchCount , '關(guān)鍵字告警閾值' ,keyDict['count'] , '關(guān)鍵字' , 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,'發(fā)現(xiàn)%s 告警,關(guān)鍵字:%s ,出現(xiàn)次數(shù):%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")

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 教你pycharm運(yùn)行Django第一個項(xiàng)目

    教你pycharm運(yùn)行Django第一個項(xiàng)目

    本文主要介紹了教你pycharm運(yùn)行Django第一個項(xiàng)目的實(shí)現(xiàn),文中通過圖文示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 布同 統(tǒng)計(jì)英文單詞的個數(shù)的python代碼

    布同 統(tǒng)計(jì)英文單詞的個數(shù)的python代碼

    最近需要翻譯英文文章,所以需要統(tǒng)計(jì)單詞個數(shù)。索性寫了一段代碼在此,可以簡單的統(tǒng)計(jì)單詞的個數(shù)
    2011-03-03
  • python字符串中兩個大括號{{}}的使用及說明

    python字符串中兩個大括號{{}}的使用及說明

    這篇文章主要介紹了python字符串中兩個大括號{{}}的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python函數(shù)返回值實(shí)例分析

    Python函數(shù)返回值實(shí)例分析

    這篇文章主要介紹了Python函數(shù)返回值,實(shí)例分析了Python中返回一個返回值與多個返回值的方法,需要的朋友可以參考下
    2015-06-06
  • python3 selenium自動化 frame表單嵌套的切換方法

    python3 selenium自動化 frame表單嵌套的切換方法

    今天小編就為大家分享一篇python3 selenium自動化 frame表單嵌套的切換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 實(shí)例講解Python中的私有屬性

    實(shí)例講解Python中的私有屬性

    這篇文章主要介紹了Python中的私有屬性,本文用代碼實(shí)例來幫助理解私有屬性的一些技巧和使用方法,需要的朋友可以參考下
    2014-08-08
  • python使用mailbox打印電子郵件的方法

    python使用mailbox打印電子郵件的方法

    這篇文章主要介紹了python使用mailbox打印電子郵件的方法,涉及Python打印電子郵件的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • python中pywifi的具體使用

    python中pywifi的具體使用

    本文主要介紹了python中pywifi的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python讀取Excel數(shù)據(jù)并生成圖表過程解析

    Python讀取Excel數(shù)據(jù)并生成圖表過程解析

    這篇文章主要介紹了Python讀取Excel數(shù)據(jù)并生成圖表過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Python中利用原始套接字進(jìn)行網(wǎng)絡(luò)編程的示例

    Python中利用原始套接字進(jìn)行網(wǎng)絡(luò)編程的示例

    這篇文章主要介紹了Python中利用原始套接字進(jìn)行網(wǎng)絡(luò)編程的示例,使用sock_raw接受和發(fā)送數(shù)據(jù)包可以避開網(wǎng)絡(luò)協(xié)議的諸多限制,需要的朋友可以參考下
    2015-05-05

最新評論

通榆县| 舟山市| 利川市| 中卫市| 永年县| 麻阳| 吉木萨尔县| 呼和浩特市| 共和县| 绥德县| 萨嘎县| 四子王旗| 页游| 肇州县| 龙岩市| 当阳市| 台前县| 周宁县| 镇雄县| 南丹县| 澄城县| 巴马| 高台县| 永川市| 霍城县| 金华市| 汝城县| 出国| 肇州县| 萨迦县| 西乡县| 南通市| 三江| 蚌埠市| 将乐县| 晋江市| 阿瓦提县| 保定市| 和政县| 丹东市| 麦盖提县|