用mongodb存储日志

最近一直在考虑架构的事情,有一个问题依然困扰着我们这些做业务系统的,那就是日志以及日志统计。大概的问题如下:

  1. 我们有很多模块,日志格式虽然类似但都写在各自的服务器和目录中。
  2. 日志中有很多信息是key=>value格式的数据。
  3. 通常一个功能上线后,PM或者需求方都会要求一些统计数据以及报表之类,用来跟踪功能的使用效果。通常PM是不懂写程序的,因此统计数据的事情多半又提给RD。
  4. 这种统计数据和报表,价值随着时间的流逝而递减,到了某个时间就不再有价值,不再有人关心,而统计程序还在跑,保不齐哪天又要维护,都忘了部署在哪了。
  5. 日志存储占用空间,需要定期删除
  6. web服务器镜像很多,日志通常也是多份,处理时需要合并
  7. web服务器有时要调整,下线了web服务器一般日志也就丢了

我是个懒人,做好了功能之后,对于这种数据统计的需求通常都很反感,因为数据挖掘这种事情总的来说很考验灵感,所以需求总变化,今儿要这样的数,明儿要那样的数。一个理想情况是PM都会SQL,然后RD把数据都灌入数据库,以前我们组的那几个NB的PM还在的时候,经常这么搞的,现在是不行了。还有一个问题就是数据库不是schema free的,格式不那么自由,需要事先设计好,这也架不住需求老变。

日志统计这种事情,通常有以下特点:

  1. 大数据量,每天可能有上G的数据(业务数据)
  2. 写频繁,读不频繁(几乎每个PV都会产生若干条日志数据)
  3. 统计服务可以任务化,不需要实时
  4. 不许要绝对的数据一致性

按照这个特点,MongoDb算是挺合适的选择,原因是:

  1. schema free,随时可以加需要的字段进去
  2. 可扩展性极佳,不用太担心存储空间不够问题
  3. 写的时候可以异步,不用太担心占用请求响应的时间
  4. 对于collection,可以规定固定大小(capped collection) ,比如100G,这样mongodb会按照LRU算法来复用空间,不用惦记着删日志
  5. 可以支持一般的查询条件和聚集,并且提供Javascript Shell,这样可以让有志于自己分析数据的PM自学编写统计脚本,最终让RD摆脱这样的工作

虽然培养RD的产品意识是好的,但统计产品使用数据这样的事情,确确实实让RD提不起兴趣,以前部门曾有过一个产品,从各产品线抓取数据然后记录在数据库并提供报表展示,但总的来说灵活性很低,一来双方要定接口,二来统计的事情其实还是要RD做好,只是省下了做数据展现的工作。

现在的想法是搭建mongodb集群,用来集中存储业务日志的数据,然后在mongodb之上搭建一个平台用于处理一般的数据统计需求,允许编写一些任务放在平台上运行,而这些任务可以用统一的javascript语言来编写。对于相对小数据量(我们的业务系统,相比较检索端的日志来说算是小数据量了,一天上G数据都算大的)的需求来说,不失为一种不错的方案,主要目的是解决维护和管理的问题。

时间: 2024-08-03 09:54:12

用mongodb存储日志的相关文章

MongoDB应用案例:使用 MongoDB 存储日志数据

线上运行的服务会产生大量的运行及访问日志,日志里会包含一些错误.警告.及用户行为等信息,通常服务会以文本的形式记录日志信息,这样可读性强,方便于日常定位问题,但当产生大量的日志之后,要想从大量日志里挖掘出有价值的内容,则需要对数据进行进一步的存储和分析. 本文以存储 web 服务的访问日志为例,介绍如何使用 MongoDB 来存储.分析日志数据,让日志数据发挥最大的价值,本文的内容同样使用其他的日志存储型应用. 模式设计 一个典型的web服务器的访问日志类似如下,包含访问来源.用户.访问的资源地

Mongodb 存储日志信息

线上运行的服务会产生大量的运行及访问日志,日志里会包含一些错误.警告.及用户行为等信息,通常服务会以文本的形式记录日志信息,这样可读性强,方便于日常定位问题,但当产生大量的日志之后,要想从大量日志里挖掘出有价值的内容,则需要对数据进行进一步的存储和分析. 本文以存储 web 服务的访问日志为例,介绍如何使用 MongoDB 来存储.分析日志数据,让日志数据发挥最大的价值,本文的内容同样使用其他的日志存储型应用. 模式设计 一个典型的web服务器的访问日志类似如下,包含访问来源.用户.访问的资源地

MongoDB存储引擎(中)——WiredTiger

上一篇博文介绍了MongoDB的MMAPv1存储引擎,本文接着介绍MongoDB另一个存储引擎--WiredTiger,WiredTiger是在MongoDB3.0版本引入的,并且在MongoDB3.2版本开始成为MongoDB默认的存储引擎.相比较MMAPv1,WiredTiger功能更强大,而且具有更高的性能. 相对于MMAPv1,WiredTiger进行了一系列改进: 1. 文件空间分配方式改进 MMAPv1存储引擎是在数据库级别分配文件的,将每个数据库中所有的集合和索引都混合存储在数据库

Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录(转)

文章转自:http://www.osyunwei.com/archives/8998.html 说明: 操作系统:CentOS Mongodb安装目录:/usr/local/mongodb Mongodb数据库存放目录:/home/data/mongodb/mongodb_data Mongodb日志存放目录:/home/data/mongodb/mongodb_log 实现目的: 对Mongodb数据库日志按天保存,并且只保留最近7天的日志记录. 具体操作: 使用Mongodb数据库自带的命令

Express中使用mongodb存储session

express默认有队session的支持,但是是存储在内存中的. 我们可以使用mongodb来存储会话. 但是express的各个版本中对该功能的写法是不同的. Express 2.x: app.use(express.session({ secret: settings.cookieSecret, store: new MongoStore({ db: settings.db })})); Express 3.x: var express = require('express');var m

DS4700存储日志收集

  a)DS4700存储日志收集              1)收集all support data 1.1.启动客户端”DS Storage manger 10 client”添加控制器IP”192.168.128.101.192.168.128.102“ 1.2.打开菜单Advance-->troubleshooting-->support data-->collect 1.3.这个操作会生成一个zip文件,可以随意命名. 1.4.这个文件包含profile.MajorEvent l

【Monogdb】MongoDB的日志系统

记得前几天有个小伙伴要查看mongodb的日志,从而排查问题,可能总找不到日志放在何处,今天就系统说一下mongodb的日志系统.mongodb中主要有四种日志.分别是系统日志.Journal日志.oplog主从日志.慢查询日志等.这些 日志记录着Mongodb数据库不同方便的踪迹.下面分别介绍这四种日志: 1.系统日志 系统日志在Mongdb数据中很中重要,它记录mongodb启动和停止的操作,以及服务器在运行过程中发生的任何异常信息:配置系统日志也非常简单,在运行mongod时候增加一个参数

MySQL存储日志并使用Loganalyzer作为前端展示

MySQL存储日志并使用Loganalyzer作为前端展示 为什么要使用日志 在生产环境中我们可能需要一个较为完整的日志系统来查看运行中主机服务的状态和所作出的操作,我们可以在较大型的网络架构中使用ELK来实现对日志的收集.检索.前端显示,但是中小型架构中使用rsyslog足以对所有服务器的日志进行收集和检索来达到实时分析数据流量的目的. 本文目标 使用rsyslog将两台主机的日志信息存储到MySQL数据库中,并且编译安装Loganalyzer对MySQL中的日志信息使用httpd+php在前

[转] 【Monogdb】MongoDB的日志系统

记得前几天有个小伙伴要查看mongodb的日志,从而排查问题,可能总找不到日志放在何处,今天就系统说一下mongodb的日志系统.mongodb中主要有四种日志.分别是系统日志.Journal日志.oplog主从日志.慢查询日志等.这些 日志记录着Mongodb数据库不同方便的踪迹.下面分别介绍这四种日志: 1.系统日志 系统日志在Mongdb数据中很中重要,它记录mongodb启动和停止的操作,以及服务器在运行过程中发生的任何异常信息:配置系统日志也非常简单,在运行mongod时候增加一个参数