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

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

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

机制图解

安装

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

  • 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

最新文章

  1. Angularjs-项目搭建
  2. sublime text3 快捷方式汇总
  3. DATAGUARD 在线重建备库
  4. .NET Web开发初学者必知的四个网站
  5. 读&gt;&gt;&gt;&gt;白帽子讲Web安全&lt;&lt;&lt;&lt;摘要→我推荐的一本书→1
  6. jump_ur.php通知模板
  7. BIGINT UNSIGNED value is out of range in … 问题的解决方法
  8. Solr导入数据库数据
  9. jssdk微信图片上传功能
  10. Android PagerAdapter的用法
  11. eclipse上的maven,添加依赖后无法自动下载相应的jar包
  12. IDEA工具教程
  13. office xml 方式
  14. 【转】UniGUI Session管理說明
  15. Mysql计算并保留两位小数
  16. CentOS上部署JAVA服务【转】
  17. convert 批量文件的格式转换
  18. 20144303石宇森《网络对抗》MSF基础应用
  19. 小程序之底部tabBar
  20. php的正则表达式完全手册

热门文章

  1. MySQL如何优化GROUP BY :松散索引扫描 VS 紧凑索引扫描
  2. vloatile总结与synchronized对比
  3. Python Redis pipeline操作(秒杀实现)
  4. Numpy用于数组的文件输入输出
  5. python并发编程之多线程2---(死锁与递归锁,信号量等)
  6. LeetCode:学生的出勤记录|【551】
  7. 01 Spring框架 基本介绍
  8. 浅谈HTTPS协议
  9. HTML系列(3)基本的HTML标签(二)
  10. 每天一个Linux命令(64)shutdown命令