资讯专栏INFORMATION COLUMN

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

Freelander / 1189人阅读

摘要:思路拿到的文本是二进制的,在查看文件的时候可以加上以二进制读的形式打开。获取数据库获取表插入到数据库

思路

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

文件格式如下:

b’2019-03-29 10:55:00	0192.168.31.123:8080	5	12345678	0	44560	953864	2	192.168.31.123	md5
’

可以看到日志里面的分隔符是制表符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(‘	’)    #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)        #插入到数据库

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43697.html

相关文章

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

    摘要:思路拿到的文本是二进制的,在查看文件的时候可以加上以二进制读的形式打开。获取数据库获取表插入到数据库 思路 拿到的文本是二进制的,在查看文件的时候可以加上-rb以二进制读的形式打开。 文件格式如下: b’2019-03-29 10:55:00 0192.168.31.123:8080 5 12345678 0 44560 953864 2 192.168.31.123 md5 ’ ...

    Meathill 评论0 收藏0
  • 分析了京东内衣销售记录,告诉你妹子们的真Size!

    摘要:今天闲暇之余写了一个爬虫例子。后两个为分页参数,是每个商品的,通过这个去获取商品的评价记录,所以我们只需要知道每个商品的就轻而易举的获取评价了。大概了解了整个流程,就可以开始我们的爬虫工作了。 今天闲暇之余写了一个爬虫例子。通过爬虫去爬取京东的用户评价,通过分析爬取的数据能得到很多结果,比如,哪一种颜色的胸罩最受女性欢迎,以及中国女性的平均size(仅供参考哦~) 打开开发者工具-ne...

    Coly 评论0 收藏0
  • 经验拾忆(纯手工)=> MongoDB与PyMongo语法对比解析

    摘要:举个栗子你有一个箱子,里面有一个儿子级别和孙子级别的箱子共层现在你把孙子级别的箱子单独拿出来,把整个箱子替换掉就是这种思想。。。自己体会吧这种语法,好像列表的切片赋值。。官方建议我们用它的好处是把和由两个函数调用变为个参数传进去了。 阅读须知 由于是对比书写: M: 代表 Mongo原生语法 P: 代表 PyMongo书写方法 后面提到:同上 字眼: ...

    mo0n1andin 评论0 收藏0
  • scrapy 实战练习

    摘要:爬取百思不得姐首先一步一步来,我们先从爬最简单的文本开始。将百思不得姐段子保存到中别忘了将管道加到配置文件中。虽然我只是简单的爬了百思不得姐,不过这些方法可以应用到其他方面,爬取更多更有用的数据。 前一篇文章介绍了很多关于scrapy的进阶知识,不过说归说,只有在实际应用中才能真正用到这些知识。所以这篇文章就来尝试利用scrapy爬取各种网站的数据。 爬取百思不得姐 首先一步一步来,我...

    betacat 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<