python检索日志内容,生成json格式数据,存入kafak,及消费

需求:

    1.检索日志里的mediaType:151,mediaType:2738,mediaType:4814三种信息。

    2.日志检索出来的内容“### storeUCTweets at : 2018-05-15 11:20:00|campaignId:25096|docId:2018050800006514832|bolgId:1944393495885542_2087707064887517|mediaType:151”
    3.根据docId的前8为。例如20180508.找出7天前的日志。
    4.把数据格式转为{"docId": "2018050800006514196", "campaignId": "22101"}存到kafka里面

#!/usr/bin/python 
#-*- coding:utf-8 -*-
#
import json
from os.path import getsize
import re
from sys import exit
from re import compile, IGNORECASE
import sys, getpass
import datetime
from kafka import KafkaProducer

tomcat_log = '/data/server/tomcats/tomcat7_8480_storeService/logs/catalina.out'
# 该文件是用于记录上次读取日志文件的位置
last_position_logfile = '/data/server/tomcats/tomcat7_8480_storeService/last_position.txt'

fb = compile('mediaType:151', IGNORECASE)
yt = compile('mediaType:2738', IGNORECASE)
ig = compile('mediaType:4814', IGNORECASE)

producer = KafkaProducer(bootstrap_servers=['smm-info05.wisers.com:9092','smm-info06.wisers.com:9092'])
#定义检索日志函数
def search_log(mes):
  send_kafka={}
  ret=re.match('.*campaignId:(\d+)\|docId:(\d{8})(\d+)\|.*',mes)
  write_time=ret.groups()[1]
  #print(write_time)
  write_time_date=datetime.datetime.strptime(write_time, "%Y%m%d").date()
  today = datetime.date.today()
  three_day_ago=today - datetime.timedelta(days=7)
  if write_time_date <= three_day_ago:
    c_id=ret.groups()[0]
    d_id=ret.groups()[1] + ret.groups()[2]
    send_kafka['campaignId']= c_id
    send_kafka['docId']= d_id
    j=json.dumps(send_kafka)
    #print(j)
    producer.send('WISERS_CT_HISTORY_DOC', j)
#读取上一次日志文件的读取位置
def get_last_position(file):
  try:
    data = open(file, 'r')
    last_position = data.readline()
    if last_position:
      last_position = int(last_position)
    else:
      last_position = 0
  except:
      last_position = 0
  return last_position

#写入本次日志文件的读取到的本次位置
def write_this_position(file, last_position):
  try:
    data = open(file, 'w')
    data.write(str(last_position))
    data.write('\n' + "Don't Delete This File,It is Very important for Looking Tomcat Error Log !! \n")
    data.close()
  except:
    print "Can't Create File !" + file
    exit()

#分析文件找出Outofmemory
def analysis_log(file):
  try:
    data = open(file, 'r')
  except:
    exit()
  last_position = get_last_position(last_position_logfile)
  this_position = getsize(tomcat_log)
  if this_position < last_position:
    data.seek(0)
  elif this_position == last_position:
    exit()
  elif this_position > last_position:
    data.seek(last_position)
  for line in data:
    if fb.search(line):
      search_log(line)
    elif yt.search(line):
      search_log(line)
    elif ig.search(line):
      search_log(line)
  write_this_position(last_position_logfile, data.tell())
  data.close()
analysis_log(tomcat_log)
producer.close()

2.需求,消费kafka数据

#!/usr/bin/python 
#-*- coding:utf-8 -*-
#
from kafka import KafkaConsumer

consumer = KafkaConsumer('WISERS_CT_HISTORY_DOC',
                         auto_offset_reset='earliest',
                         bootstrap_servers=['smm-info05.wisers.com:9092'])

for message in consumer:
    print ("%s:%d:%d: key=%s value=%s" % (message.topic, message.partition,
                                          message.offset, message.key,
                                          message.value))

 

posted @ 2018-05-16 17:25  cornerxin  阅读(271)  评论(0)    收藏  举报