内容简介:拿到的文本是二进制的,在查看文件的时候可以加上-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
处理日志文件的基本逻辑
- 链接数据库
- 逐行读txt
- 将一行的数据分割为数组
- 将数据放入list
- 将list逐条转化为json
- 存入数据库
分片集群的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) #插入到数据库
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 把 GitHub 放入口袋,“开箱” 官方客户端
- 把数据库放入Docker是一个好主意吗?
- Azure云连接放入白名单可以给Office 365提速?
- 解决手动运行脚本执行正常而放入crontab后不正常的方法
- java – 将大型JSON(InputStream)放入字符串时出现内存不足错误
- 在制作跨平台的 NuGet 工具包时,如何将工具(exe/dll)的所有依赖一并放入包中
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!