内容简介:拿到的文本是二进制的,在查看文件的时候可以加上-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) #插入到数据库
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
零成本实现Web性能测试
温素剑 / 电子工业出版社 / 2012-2 / 59.00元
《零成本实现Web性能测试:基于Apache JMeter》是一本关于Web性能测试的实战书籍,读者朋友们在认真阅读完《零成本实现Web性能测试:基于Apache JMeter》后,相信能够将所学知识应用到生产实践中。《零成本实现Web性能测试:基于Apache JMeter》首先介绍基础的性能测试理论,接着详细介绍如何使用JMeter完成各种类型的性能测试。实战章节中作者以测试某大型保险公司电话......一起来看看 《零成本实现Web性能测试》 这本书的介绍吧!