用Fluentd实现收集日志到HDFS(下)
来源:互联网 发布:女生休闲鞋推荐 知乎 编辑:程序博客网 时间:2024/06/01 20:30
本篇主要包含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的匹配模式:
*匹配单个tagFor 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.*若需要同时匹配几个模式,模式之间用空格分开
匹配顺序只是简单的按照配置文件中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>
它是怎么工作的?
靠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配置覆盖。
参考于:http://docs.fluentd.org/articles/out_webhdfs
未完待续,如果今后有需要会深入了解。
- 用Fluentd实现收集日志到HDFS(下)
- 用Fluentd实现收集日志到HDFS(上)
- fluentd收集mapreduce分布式环境下的用户日志
- flume 收集日志到HDFS
- 日志收集工具之Fluentd
- 通过fluentd收集docker日志
- Flume 日志收集、使用Flume收集日志到HDFS
- flumeng收集日志并存储到HDFS
- flumeng收集日志并存储到HDFS
- hadoop日志收集解决方案--fluentd配置文件
- docker容器日志的收集---fluentd
- Fluentd (td-agent) 日志收集系统
- Fluentd+Hadoop结合进行日志收集、分析
- 万能日志数据收集器 Fluentd
- Flume 收集Nginx日志到Hdfs Tail-to-hdfs sink
- Flume 收集Nginx日志到Hdfs Tail-to-hdfs sink
- 基于fluentd和mongod实现CloudFoundry的日志收集过程中遇到的问题!(切身感受,遇到什么写什么了)
- Redhat linux 下 fluentd+fluentd 实现桥接
- storm网上中文资料搜集大全
- spark-1.4配置
- 基于BP弱分类器用Adaboost的强分类器
- Linux环境下编程(二)——线程基础概念
- C# ArrayBuffer[转]
- 用Fluentd实现收集日志到HDFS(下)
- tcp数据包的标志位
- 黑马程序员——Java基础——数组
- 利用SwingWorker异步加载图片
- "\n" 与 '\n' 是否等价
- Junit4 单元测试的断言
- [HDOJ 4551] 生日猜猜猜
- Flash cs6 学习(二) 制作一个flash进度条
- 一致性哈希机器在分布式中的作用