使用Fluentd + MongoDB構建實時日志收集系統

jopen 9年前發布 | 16K 次閱讀 MongoDB 日志處理

本文要介紹的是在Fluentd的最新版中已經內置的MongoDB支持。

Fluentd是一個日志收集系統,它的特點在于其各部分均是可定制化的,你可以通過簡單的配置,將日志收集到不同的地方。

目前開源社區已經貢獻了下面一些存儲插件:MongoDBRedisCouchDB,Amazon S3Amazon SQSScribe0MQAMQPDelayedGrowl 等等。

本文要介紹的是在Fluentd的最新版中已經內置的MongoDB支持。主要通過一個收集Apache日志的例子來說明其使用方法:

機制圖解
使用Fluentd + MongoDB構建實時日志收集系統

安裝

為了完成相關的測試,需要安裝下面一些組件:

  • Fluentd with MongoDB Plugin

    </li>

  • MongoDB

    </li>

  • Apache (with the Combined Log Format)

    </li> </ul>

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

    gem install fluent-plugin-mongo

    來進行安裝

    • Debian Package

      </li>

    • RPM Package

      </li>

    • MongoDB Downloads

      </li> </ul>

      配置

      如果你是使用上面的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 內置的輸入方式,其原理是不停地從源文件中獲取新的日志。

        </li>

      2. format apache: 指定使用 Fluentd 內置的 Apache 日志解析器。

        </li>

      3. path /var/log/apache2/access_log: 指定日志文件位置。

        </li>

      4. tag mongo.apache: 指定tag,tag被用來對不同的日志進行分類

        </li> </ol>

        下面再來編輯輸出配置,配置日志收集后存儲到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></pre>

        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") }



        </div>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!