• 使用Fluentd + MongoDB构建实时日志收集系统


    Fluentd是一个日志收集系统,它的特点在于其各部分均是可定制化的,你可以通过简单的配置,将日志收集到不同的地方。

    目前开源社区已经贡献了下面一些存储插件:MongoDB, Redis, CouchDB,Amazon S3, Amazon SQS, Scribe, 0MQ, AMQP, Delayed, Growl 等等。

    本文要介绍的是在Fluentd的最新版中已经内置的MongoDB支持。主要通过一个收集Apache日志的例子来说明其使用方法:

    机制图解
    tumblr_lvpwxvhWvL1r2sums

    安装

    为了完成相关的测试,需要安装下面一些组件:

    • Fluentd with MongoDB Plugin
    • MongoDB
    • Apache (with the Combined Log Format)

    在Fluentd的最新安装包中已经包含了MongoDB插件,你也可以用命令

    gem install fluent-plugin-mongo

    来进行安装

    配置

    如果你是使用上面的deb/rpm包安装的Fluentd,那么配置文件位置在:/etc/td-agent/td-agent.conf,否则其位置应该在:/etc/fluentd/fluentd.conf

    首先我们编辑配置文件中的source来设置日志来源

    <source>
      type tail
      format apache
      path /var/log/apache2/access_log
      tag mongo.apache
    </source>

    其中:

    1. type tail: tail方式是 Fluentd 内置的输入方式,其原理是不停地从源文件中获取新的日志。
    2. format apache: 指定使用 Fluentd 内置的 Apache 日志解析器。
    3. path /var/log/apache2/access_log: 指定日志文件位置。
    4. tag mongo.apache: 指定tag,tag被用来对不同的日志进行分类

    下面再来编辑输出配置,配置日志收集后存储到MongoDB中

    <match mongo.**>
      # plugin type
      type mongo
    
      # mongodb db + collection
      database apache
      collection access
    
      # mongodb host + port
      host localhost
      port 27017
    
      # interval
      flush_interval 10s
    </match>

    match标签后面可以跟正则表达式以匹配我们指定的tag,只有匹配成功的tag对应的日志才会运用里面的配置。配置中的其它项都比较好理解,看注释就可以了,其中flush_interval是用来控制多长时间将日志写入MongoDB一次。

    测试

    用ab工具对Apache进行访问,以产生相应的访问日志以供收集

    $ ab -n 100 -c 10 http://localhost/

    然后我们在MongoDB中就能看到收集到的日志了

    $ mongo
    > use apache
    > db.access.find()
    { "_id" : ObjectId("4ed1ed3a340765ce73000001"), "host" : "127.0.0.1", "user" : "-", "method" : "GET", "path" : "/", "code" : "200", "size" : "44", "time" : ISODate("2011-11-27T07:56:27Z") }
    { "_id" : ObjectId("4ed1ed3a340765ce73000002"), "host" : "127.0.0.1", "user" : "-", "method" : "GET", "path" : "/", "code" : "200", "size" : "44", "time" : ISODate("2011-11-27T07:56:34Z") }
    { "_id" : ObjectId("4ed1ed3a340765ce73000003"), "host" : "127.0.0.1", "user" : "-", "method" : "GET", "path" : "/", "code" : "200", "size" : "44", "time" : ISODate("2011-11-27T07:56:34Z") }

    来源: blog.treasure-data.com
    翻译: http://blog.nosqlfan.com/html/3521.html

  • 相关阅读:
    STL::next_permutation();
    P2626 斐波那契数列(升级版)
    P1029 最大公约数和最小公倍数问题
    P1075 质因数分解
    4.7生日当天测
    cin,scanf,gets,getline,cin.getline对于字符串的输入
    两个互质的数不能凑出来的数证明
    简单的全排列问题(给初学者)
    紫书 例题 10-22 UVa 1640(数位统计)
    紫书 例题 10-21 UVa 11971(连续概率)
  • 原文地址:https://www.cnblogs.com/xd502djj/p/3552882.html
Copyright © 2020-2023  润新知