python 日志入库mongodb

今天和大家分享一个python入库mongodb的脚本。。。

涉及到python和mongodb,那么安装相应的模块四必不可少的,最简单的安装方法,或者非pip不可了。

# pip install pymongo==3.0.4

顺便也记录下源码安装的方式

# wget https://pypi.python.org/packages/source/p/pymongo/pymongo-2.8.tar.gz#md5=23100361c9af1904eb2d7722f2658114 --no-check-certificate
# tar xf pymongo-2.8.tar.gz
# cd pymongo-2.8
# python setup.py install

摘自一则日志

35783	s100	android	47	5	192.168.1.100	2015-09-05 08:03:19	strengthenHeroByHeroes	{"consume_gold":{"ogold":2893821,"cgold":1700,"gold":2892121,"tag":"strengthenHeroByHeroes"},"taskInfo":[{"id":2310033,"progress":2,"status":0}],"delHeroList":{"id":102014,"id":102014,"id":102014,"id":102010,"id":102010},"id":100026,"olevel":46,"oexp":1700,"cexp":1700,"level":46,"exp":3400}	865982021462182		XiaoMi

入库mongodb的python脚本

#!/usr/bin/env python
#coding:utf8

import os
import sys
import json
from pymongo import MongoClient
from datetime import datetime, date, time

def ConMongo(host,port,cur_db,username,password):	#链接MongoDB
    client = MongoClient(host,port)
    db = client[cur_db]
    db.authenticate(username,password)
    table = db.gamelogs
    return table

def parseLog(file_log,Connection):
    dic = {}
    dl = []
    with open(file_log) as fd:
        for line in fd:
	    try:
	        tokens = line.strip().split(‘\t‘)
	        uid = tokens[0]
	        server = tokens[1]
	        system = tokens[2]
	        level = int(tokens[3])
	        vip_level = tokens[4]
	        ip = tokens[5]
	        time = datetime.strptime(tokens[6], "%Y-%m-%d %H:%M:%S")		#将时间字符串转换成时间格式
	        action = tokens[7]
	        result = json.loads(tokens[8])						#特殊字符串转换成json格式
	        uuid = tokens[9]
		if uid == ‘undefined‘:
		    if result["game_user_id"]:
			uid = result["game_user_id"]
		if len(tokens) == 12:
	            channel = tokens[11]
		else:
		    channel = ‘‘
	        dic = {‘uid‘:uid,‘server‘:server,‘system‘:system,‘level‘:level,‘vip_level‘:vip_level,‘ip‘:ip,‘time‘:time,‘action‘:action,‘result‘:result,‘uuid‘:uuid,‘channel‘:channel}
		dl.append(dic)
		if len(dl) == 20000:
		    Connection.insert_many(dl)
		    dl = []
	    except Exception,e:
		print e, line
	if len(dl) > 0:
	    Connection.insert_many(dl)

if __name__ == ‘__main__‘:
    Conn = ConMongo(‘localhost‘,27017,‘talefundb‘,‘talefun‘,‘123456‘)
    try:
        parseLog(sys.argv[1],Conn)
    except IndexError,e:
	print ‘./%s path_logfile‘ % os.path.basename(__file__)
时间: 2024-10-14 17:05:21

python 日志入库mongodb的相关文章

python高效解析日志入库

python脚本解析日志文件入库一般有三个重要的步骤:读文件.解析文件.入库.在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发) 1 读文件:一次读一行,磁盘IO太多,效率低下:一次性读如全部文件内容,可能内存不够.采取一个折中的办法,每次读若干byte(具体大小视实际情况而定). 经过测试,得到结论,在我们写代码的时候应该这样写 f = open(path,'r') for line in f : ............. 这是系统提供的一种读文件的方法,一般比我们自己每次读若干

python日志,支持彩色打印和文件大小切片写入和写入mongodb

支持不同logger name的日志写入不同的文件,不同logger name日志写入不同的mongodb 的collection.LogManager比较容易调用,因为里面的内部方法全都使用了下划线,使用了下划线的就是保护和私有方法不需要外界调用,也不需要看懂他,在调用时候pycharm不会自动补全提示这些带下划线的无关方法了,只暴露了get_and_add_handlers和get_without_handlers两个可能需要调用的方法,pyrcharm可以自动补全这两个方法. 主要思路和模

Python日志之Python函数

Python日志之Python函数: 一.认识函数 1.什么是函数 函数,function,通俗来说,函数,就是功能的意思,函数是用来封装特定功能的,比如,在Python中,len()是一个函数,len()这个函数实现的功能可能是返回一个字符串的长度,所以说len()这个函数他的特定功能就是返回长度,再比如,我们可以定义一个函数,然后编写这个函数的功能,之后要使用的时候再调用这个函数.所以函数分为两种类型,一种是系统自带的不用我们编写其功能的,比如len()这种函数,再一种就是我们自己定义的,需

Windows下Python连接数据库(mysql, mongodb)

一 实验平台 1 os: win7 64位旗舰版sp1 2 python: 2.7.10 x64 二 连接数据库 1 连接 mysql数据库 (1)下载mysql(5.6.25-winx64) 建议下载免安装版, 安装版的容易出现各种问题,解开压缩包,双击bin目录下的mysqld.exe, 启动数据库服务进程, 要关闭的话, 直接到任务管理器里面干掉这个进程就行了 (2)下载并安装navicat(这是一个mysql可视化管理工具, 不是必须的, 但可以方便在用python执行数据库操作的时候,

python日志分析

微秒   毫秒 datetime seek定位指针 从行尾到行首 fd.seek(-2,1)  1  当前位置 fd.tell() fd.seek(-2,2)  2   最后位置 fd.tell() fd.seek(0,0)   0  最前位置 read(1)读一位    read() 全部都读 tac与cat    行首到行尾 reversed   翻转字符串 只读一部分    通过时间判断 200 404  503  十分钟之内   第八列  apache.log 1.首先匹配时间格式, D

Python 日志工具(logging) 基础教程

什么是 logging ? 日志是跟踪软件运行时发生的事件,软件的开发人员可以通过日志快速的定位问题的位置.事件也分重要性即事件的严重程度. 什么时候使用日志? logging 提供了一组方便操作日志记录的功能,这些是 debug(), info(),warning(),error(),critical(). 通过想要执行的任务确定使用日志记录的方法. 你想要执行的任务 日志记录的最佳方法 一个脚本或程序显示在终端上 print() 程序正常运行过程中发生的事件 logging.info() o

Python日志产生器

Python日志产生器 写在前面 有的时候,可能就是我们做实时数据收集的时候,会有一个头疼的问题就是,你会发现,你可能一下子,没有日志的数据源.所以,我们可以简单使用python脚本来实现产生实时的数据,这样就很方便了 在编写代码之前,我们得知道我们的webserver日志到底长什么样,下面我找了一段的nginx服务器上真实日志,作为样例: 223.104.25.1 - - [21/Nov/2017:20:34:16 +0800] "GET / HTTP/1.1" 200 94 &qu

mongodb+python 实现自动收集mongodb的慢查询日志(附代码)

  1  简介  这个是用在生产环境中的一个MongoDB慢查询日志自动收集脚本,当初想写这个脚本的思路就是为了方便收集慢查询日志并且利于分析.由于公司的mognodb不多,就4台,所以这个小脚本也只是适用普通的生产环境. 页面主要使用了 bootstrap 为前端显示,datatable 为分析的时候使用.   2  流程 主要的流程是: 1  通过 pymongo 连接到 mongodb 2  使用find()命令查询 system.profile下的所有慢查询日志 3  使用jinjia2

python处理nginx日志入库

#usr/bin/evn python#-*- coding: utf-8 -*-import os, sysimport reimport MySQLdb db = MySQLdb.connect(host='192.168.10.94',user='inserter',passwd='****',db='gydata')cursor=db.cursor() log_file=sys.argv[1]print log_filefor line in open(log_file):element