本篇主要包含Fluentd的配置文件格式,in_tail输入插件,out_webhdfs输出插件的部分内容。
Fluentd的配置文件主要包含以下字段
- source,决定数据来源
- match,决定输出目的地
- filter,在输入与输出之间,用来过滤
- system,用来进行系统设置
from:http://docs.fluentd.org/articles/config-file
source字段
指定input plugin,input plugin提交事件到路由引擎。一个事件包含3个实体:tag,time,record。
tag是一个用点号分隔的字符串,用来指示内部路由引擎的方向。
time是由input plugins指定的,必须是Unix时间格式。
record是一个JSON对象。
强烈建议tag只使用小写字母,数字和下划线。
例如:
<source>
type http
port 9880
</source>
curl -X POST -d 'json={"json":"message"}' http://127.0.0.1:9880/td.temp
td.temp就是tag,{"json":"message"}
就是record,time由系统自动确定。
match字段
处理符合其tag的事件。
match的匹配模式:
*匹配单个tag
For example, the pattern a.* matches a.b, but does not match a or a.b.c
**匹配0或多个tag
{X,Y,Z}匹配X,Y,或Z, 这里的X, Y, Z也可以是匹配模式
例如,a.{b,c}.*匹配a.b.*和a.c.*
若需要同时匹配几个模式,模式之间用空格分开
---------------------
本文来自 liuyuan185442111 的CSDN 博客 ,全文地址请点击:
匹配顺序只是简单的按照配置文件中match标签的顺序。
过滤器
Input -> filter 1 -> … -> filter N -> Output
system标签
用来进行系统设置,可以通过命令选项进行同样的设置。
in_tail插件
从文本文件的末尾读取,它的行为类似tail -F命令。
in_tail内置于Fluentd的内核。
一个例子:
<source>
type tail
path /var/log/httpd-access.log
pos_file /var/log/td-agent/httpd-access.log.pos
tag apache.access
format apache2
</source>
---------------------
本文来自 liuyuan185442111 的CSDN 博客 ,全文地址请点击:
它是怎么工作的?
靠inode号来识别文件,首次配置成in_tail时,将从日志文件的尾部而不是开头读取,但如果log文件发生rotate,其inode发生改变,将从文件的开头读取。比如日志文件太大,将其重命名为其他名字,然后新建一个原名字的日志文件。
参数
type,必须
值必须是tail。
tag,必须
可用*作为占位符,此时它将path参数的/替换为.。
path,必须
读取的路径,多个路径用逗号分隔。
可以用*和时间格式字符串来动态添加/删除文件,每过refresh_interval间隔,Fluentd将刷新监视文件列表,例如:
path /path/to/%Y/%m/%d/*
假设现在是20140401,Fluentd将监视/path/to/2014/04/01路径下的所有文件。
注意:
如果文件会有rotation,不要使用*,因为这会引起重复。
exclude_path
用来从path中排除一些文件。例如:
path /path/to/*
exclude_path ["/path/to/*.gz", "/path/to/*.zip"]
refresh_interval
刷新监控文件列表的时间间隔,默认60s。
read_from_head
从开头读取日志文件,而不是从结尾,默认false。
如果你要监控*表示的多个文件,或时间字符串指定的动态路径,需将其设置为true;
否则,应该保证log rotation不会出现在*路径里。
format,必须
日志文件的格式,支持regexp,apache2,apache_error,nginx,syslog等。
如果值以/开始和结尾,被认为是一个正则表达式。正则式至少一个命名的捕获(?<name>pattern)
,每个名字都作为json字符串的key值。例如:
(?<name>[a-z])(?<list>[a-z]+)
将fsfd匹配成:
{"name":"f","list":"sfd"}
如果正则式中有time这个名字的捕获,你可以用time_format参数来指定时间的格式。
pos_file,推荐进行设置
用来记录上次读取的位置。
time_format
只有当format包含time字段时才有效。
参考于:http://docs.fluentd.org/articles/in_tail
out_webhdfs
默认情况下,每一小时在HDFS上创建一次文件。这意味着,当你第一次导入记录时,并没有立刻生成文件。time_slice_format条件达到时,才会创建文件。
参数
type (required)
The value must be webhfds.
host (required)
The namenode hostname.
port (required)
The namenode port number.
path,必须
HDFS上的路径,请在path中包含${hostname}来避免在多个Fluentd实例中写入同一个HDFS文件。path可以包含时间占位符,此时自动配置time_slice_fomat。
高级使用,你可以通过修改下面的参数来调整Fluentd的内部缓存机制。
time_slice_format
此参数用来作为文件名的一部分,当创建文件时下面的字符将被替换为实际值:
• %Y: year including the century (at least 4 digits)
• %m: month of the year (01..12)
• %d: Day of the month (01..31)
• %H: Hour of the day, 24-hour clock (00..23)
• %M: Minute of the hour (00..59)
• %S: Second of the minute (00..60)
默认格式是%Y%m%d%H,一小时创建一个。此参数可能被path配置覆盖。