Fluentd是一个日志收集系统,它的特点在于其各部分均是可定制化的,你可以通过简单的配置,将日志收集到不同的地方。
本文要介绍的是在Fluentd的最新版中已经内置的MongoDB支持。主要通过一个收集Apache/nginx日志的例子来说明其使用方法:
机制图解
安装Fluentd
设置yum源
vi /etc/yum.repos.d/td.repo
[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/x86_64/
gpgcheck=1
gpgkey=http://packages.treasure-data.com/redhat/RPM-GPG-KEY-td-agent
yum clean all
yum makecache
yum -y install td-agent
在Fluentd的最新安装包中已经包含了MongoDB插件,所以不需要安装mongo插件
配置
如果你是使用上面的deb/rpm包安装的Fluentd,那么配置文件位置在:/etc/td-agent/td-agent.conf,否则其位置应该在:/etc/fluentd/fluentd.conf
首先我们编辑配置文件中的source来设置日志来源
type tail
format apache
pos_file /var/log/td-agent/nginx-access.log.pos
path /usr/local/nginx/logs/www.access.log
tag mongo.apache
其中:
①type tail: tail方式是 Fluentd 内置的输入方式,其原理是不停地从源文件中获取新的日志。
②format apache: 指定使用 Fluentd 内置的 Apache 日志解析器。
③path /var/log/apache2/access_log: 指定日志文件位置。
④tag mongo.apache: 指定tag,tag被用来对不同的日志进行分类
下面再来编辑输出配置,配置日志收集后存储到MongoDB中
match标签后面可以跟正则表达式以匹配我们指定的tag,只有匹配成功的tag对应的日志才会运用里面的配置。配置中的其它项都比
# plugin type
type mongo
# mongodb db + collection
database apache
collection access
# mongodb host + port
host 192.168.30.113
port 3306
# interval
flush_interval 10s
较好理解,看注释就可以了,其中flush_interval是用来控制多长时间将日志写入MongoDB一次。
注意:如果是收集的是nginx日志的话,日志格式要保持默认的。
启动td-agent
service td-agent start
然后我们在MongoDB中就能看到收集到的日志了
/usr/local/mongodb/bin/mongo 192.168.30.113:3306
MongoDB shell version: 2.0.4
connecting to: 192.168.30.113:3306/test
> use apache
switched to db apache
> db.access.find()
{ "_id" : ObjectId("530fee3753357d2437000001"), "host" : "192.168.30.1", "user" : "-", "method" : "GET", "path" : "/api?callback=jQuery172014558692439459264_1393552941396&do=show_workspace&MEMBER_ID=80&os=w&webtoken=1b43342c1f&_=1393552941501", "code" : "301", "size" : "178", "referer" : "http://www.weiduoa.com/", "agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36", "time" : ISODate("2014-02-28T02:02:29Z") }
{ "_id" : ObjectId("530fee3753357d2437000002"), "host" : "192.168.30.1", "user" : "-", "method" : "GET", "path" : "/api?callback=jQuery172014558692439459264_1393552941397&do=inboxmemberlist&MEMBER_ID=80&os=w&webtoken=1b43342c1f&_=1393552941505", "code" : "301", "size" : "178", "referer" : "http://www.weiduoa.com/", "agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36", "time" : ISODate("2014-02-28T02:02:29Z") }