使用pymongo解析文本格式日志后放入mongo

栏目: Python · 发布时间: 5年前

内容简介:拿到的文本是二进制的,在查看文件的时候可以加上-rb以二进制读的形式打开。文件格式如下:可以看到日志里面的分隔符是制表符t,行末尾有换行符n

思路

拿到的文本是二进制的,在查看文件的时候可以加上-rb以二进制读的形式打开。

文件格式如下:

b’2019-03-29 10:55:00\t0\192.168.31.123:8080\t5\t12345678\t0\t44560\t953864\t2\t192.168.31.123\tmd5\n’

可以看到日志里面的分隔符是制表符t,行末尾有换行符n

处理日志文件的基本逻辑

  1. 链接数据库
  2. 逐行读txt
  3. 将一行的数据分割为数组
  4. 将数据放入list
  5. 将list逐条转化为json
  6. 存入数据库

分片集群的mongo链接

用于存储日志的mongo集群有三个分片:flux-stat-1.mongo:27017,flux-stat-2.mongo:27017和flux-stat-3.mongo:27017.

假设用户名是flux-stat,密码是flux-stat-mongo123,登录方法:

from pymongo import MongoClient
import urllib.parse
#创建 MongoDB 链接对象
username = urllib.parse.quote_plus(‘flux-stat’)
password = urllib.parse.quote_plus(‘flux-stat-mongo123’)
uri = 'mongodb://%s:%s@flux-stat-1.mongo:27017, flux-stat-2.mongo:27017, flux-stat-3.mongo:27017/admin' % (username,password)
client = MongoClient(uri)

注意:username和password必须要进行转换,否则链接不正确

pymongo逐行读取日志文本

with open(“d:/user/ServerLog/test.txt”,’rb’) as file:
    for line in file:
        #这里放操作
file.close()

分割日志内容转化为json,并把每行json放到数组中

#引入json模块
import json
total=[]
logList = line.split(‘\t’)    #line分割为list
keyList = [‘time’,’status’,’ip’,’type’,’userid’,’v1’,’v2’,’v3’,’v4’,’ip’,’md5’]    #key的list
logDict = dict(zip(keyList, logList))    #把二者以字典的方式拼起来
logJson = json.dumps(logDict)    #把字典转换为string形式的json
#json转字典的方法为dictinfo = json.loads(json_str)
total.append(logJson)

日志存入mongo

insert_one和insert_many是两种插入的方式,但是采用insert_one进行逐条插入会进行大量的访问,大幅降低插入效率,采用insert_many进行json为基本单位的list批量插入,效率明显提高。

db = client['log']             #获取数据库
coll = db[‘data’]              #获取表
coll.insert_many(total)        #插入到数据库

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Everything Store

The Everything Store

Brad Stone / Little, Brown and Company / 2013-10-22 / USD 28.00

The definitive story of Amazon.com, one of the most successful companies in the world, and of its driven, brilliant founder, Jeff Bezos. Amazon.com started off delivering books through the mail. Bu......一起来看看 《The Everything Store》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换