15. Fluentd输入插件:in_tail用法详解
in_tail输入插件内置于Fluentd中,无需安装。
它允许fluentd从文本文件尾部读取日志事件,其行为类似linux的tail -F命令(按文件名来tail)。
这几乎是最常用的一个输入插件了。
- 示例配置
<source>
@type tail
path /var/log/httpd-access.log
pos_file /var/log/td-agent/httpd-access.log.pos
tag apache.access
<parse>
@type apache2
</parse>
</source>
这个示例用于tail Apache的日志。
- 工作原理
当Fluentd首次配置使用in_tail插件时,它会从path指定的日志文件尾部读取数据。
一旦日志文件被轮转重写,Fluentd则开始从新文件头部读取数据。Fluentd会持续追踪文件当前的inode编号。
当td-agent重启时,它会从重启前的位置开始读取数据,这个位置保存在pos_file指定的文件中。
- 插件参数
@type(必需)插件类型,取值为tail
tag(必需,0.14.0(最低版本要求,下同))指定生成的事件的tag,取值为一个字符串。可以使用作为占位符,会将日志文件路径中的/替换为.号,
比如:
path /path/to/file
tag foo.*
上边这个配置会产生foo.path.to.file这样的tag。
- path(必需,0.14.0)
指定日志文件路径,可使用逗号(,)作为分隔符指定多个路径。
路径中可包含*和strftime格式时间字符串,用以动态增删文件。
Fluentd会定期刷新监控文件列表。
path /path/to/%Y/%m/%d/*
这个示例监控时间字符串指定的目录,比如若日期为20140401,Fluentd会监控/path/to/2014/04/01路径下的所有文件。
path /path/to/a/*,/path/to/b/c.log
这个示例监控多个目录。
需要注意的是,*
不能用于存在日志文件轮转的情况,这会导致日志重复。这种情况建议使用单独的in_tail配置。
- path_timezone(1.8.1)若path参数中包含strftime时间字符串,可通过path_timezone设置采用的时区。in_tail默认使用系统时区,可通过如下配置来设置:
path_timezone "+00"
- exclude_path(0.14.0)指定从监控文件列表中排除哪些文件,这是一个字符串数组。
path /path/to/*
exclude_path ["/path/to/*.gz", "/path/to/*.zip"]
这个示例会排除path中的gz和zip压缩文件。
refresh_interval(0.14.0)指定监控列表刷新间隔,默认为60秒。当path中包含*时生效。
limit_recently_modified(0.14.13)只监控指定修改时间范围内的文件。该参数取值为time类型的时间,且当path中包含*时生效。
skip_refresh_on_startup(0.14.13)设置程序启动时是否刷新文件列表,默认为false。不刷新,可在path中包含*时减少启动耗时。
read_from_head(0.14.0)从文件头部读取数据,默认为false。当取值true时,in_tail会在启动阶段读取文件,若文件太大会很耗时,且会阻塞其他插件的启动。
encoding, from_encoding(0.14.0)设置in_tail输出数据的编码,默认采用ASCII-8BIT编码。
read_lines_limit(0.14.0)设置每次从文件中读取的行数,默认为1000.如果在日志中发现“chunk bytes limit exceeds for an emittedevent stream”这样的错误,应该减小此参数值。
multiline_flush_interval(0.14.0)多行处理模式下的缓存输出间隔,默认不启用此配置。该参数配合format_firstline使用。
pos_file(强烈推荐配置,0.14.0)Fluentd使用pos_file保存文件读取位置。pos_file可在一个文件中保存多个位置,每个source中配置一个pos_file即可。需要注意的是,多个in_tail不能共用一个pos_file配置,这可能导致未知的行为,比如pos_file
文件损坏。pos_file_compaction_interval(1.9.2)设置pos_file的压缩间隔,被压缩的内容包含: 已移出监控列表的文件、 无法解析的文件、 重复文件行。可在设置pos_file的情况下设置此参数。
pos_file /var/log/td-agent/tmp/access.log.pos
pos_file_compaction_interval 72h
<parse>
指令(必需)用于配置解析文件内容使用的解析器。我们会在后续的文章中了解到解析器的使用。这里有一个例子:
# json
<parse>
@type json
</parse>
# regexp
<parse>
@type regexp
expression ^(?<name>[^ ]*) (?<user>[^ ]*) (?<age>\d*)$
</parse>
- path_key(0.14.0)可以将监控文件路径添加到生成的日志事件中,path_key用于指定事件中path的key名称。
path /path/to/access.log
path_key tailed_path
使用上边这个配置,会生成如下的日志事件:
{"tailed_path":"/path/to/access.log","k1":"v1",...,"kN":"vN"}
rotate_wait(0.14.0)文件轮转等待时间。在监控文件存在轮转的情况下,Fluentd会在监测到文件轮转时,再监控老文件一段时间,以避免数据丢失。默认的等待时间为5秒。
enable_watch_timer(0.14.0)是否启用监控定时器,默认开启一个间隔1秒的定时器,关闭后会降低CPU和IO消耗。用于解决某些系统监控不准确的问题,未来版本会禁用此功能。
enable_stat_watcher(1.0.1)是否启用额外的基于inotify的监控器。默认为true,关闭后会禁用inotify事件,仅通过定时监控器来追踪文件。
emit_unmatched_lines 是否输出无法解析的文件行信息,默认为false。
3.常见问题
3.1 当无法匹配日志时会如何处理
若emit_unmatched_lines设为true,in_tail会打印出告警信息。
比如,<parse>
指定的解析器为json,而日志中包含“123,456,str,true”这样的记录,那么在fluentd运行日志中就会看到如下输出:
2018-04-19 02:23:44 +0900 [warn]: #0 pattern not match: "123,456,str,true"
3.2 in_tail为何没有开始读取日志 可能监控文件确实没有产生新的数据,试着追加一条数据看看。
3.3 in_tail输出“/path/to/file unreadable”,这是什么导致的若在运行日志中发现如下信息,可能是fluentd没有监控文件的读权限。
/path/to/file unreadable. It is excluded and would be examined next time.
3.4 如何避免监控大量文件时in_tail停止运行 可设置enable_stat_watcher为false。
15. Fluentd输入插件:in_tail用法详解的更多相关文章
- Vue插件编写、用法详解(附demo)
Vue插件编写.用法详解(附demo) 1.概述 简单来说,插件就是指对Vue的功能的增强或补充. 比如说,让你在每个单页面的组件里,都可以调用某个方法,或者共享使用某个变量,或者在某个方法之前执行一 ...
- Vue1.0用法详解
Vue.js 不支持 IE8 及其以下版本,因为 Vue.js 使用了 IE8 不能实现的 ECMAScript 5 特性. 开发环境部署 可参考使用 vue+webpack. 基本用法 1 2 3 ...
- jQuery 事件用法详解
jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jque ...
- Ubuntu kill命令用法详解
转自:Ubuntu kill命令用法详解 1. kill 作用:根据进程号杀死进程 用法: kill [信号代码] 进程ID root@fcola:/# ps -ef | grep sen ...
- linux curl用法详解
linux curl用法详解 curl的应用方式,一是可以直接通过命令行工具,另一种是利用libcurl库做上层的开发.本篇主要总结一下命令行工具的http相关的应用, 尤其是http下载方面 ...
- C语言对文件的操作函数用法详解1
在ANSIC中,对文件的操作分为两种方式,即: 流式文件操作 I/O文件操作 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef str ...
- (转)linux 中特殊符号用法详解
linux 中特殊符号用法详解 原文:https://www.cnblogs.com/lidabo/p/4323979.html # 井号 (comments)#管理员 $普通用户 脚本中 #!/b ...
- C#中string.format用法详解
C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...
- c++中vector的用法详解
c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
随机推荐
- 如何用车辆违章查询API接口进行快速开发
最近公司项目有一个车辆违章查询显示的小功能,想着如果用现成的API就可以大大提高开发效率,所以在网上的API商店搜索了一番,发现了 APISpace,它里面的车辆违章查询API非常符合我的开发需求. ...
- APISpace 未来7天生活指数API接口 免费好用
随着经济的发展,我们的生活水平在不断的提高,生活指数在我们的生活中也越来越受到关注,根据当天的生活指数,我们就可以知道在今天我们可以干什么比较好. 未来7天生活指数API,支持国内3400+个城市 ...
- 循环队列(严3.30)--------西工大NOJ习题.9
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef struct _Q ...
- IM系统-消息流化一些常见问题
原创不易,求分享.求一键三连 之前说过IM系统的一些优化,但是在网络上传输数据对于数据的流化和反流化也是处理异常情况的重点环节,不处理好可能会出现一些消息发送成功,但是解析失败的情况,本文就带大家来一 ...
- 聊聊如何用 Redis 实现分布式锁?
作者:小林coding 计算机八股文网站:https://xiaolincoding.com 哈喽,我是小林. 今天跟大家聊聊两个问题: 如何用 Redis 实现分布式锁? Redis 是如何解决集群 ...
- 2022-7-12 第五组 pan小堂 js
JavaScript Switch 语句 (熟悉掌握) 请使用 switch 语句来选择多个需被执行的代码块之一. 语法: switch(表达式){ case n: 代码块 break; case n ...
- Rust 从入门到精通01-简介
1.rust 从哪里来 Rust语言在2006年作为 Mozilla 员工 Graydon Hoare 的私人项目出现,而 Mozilla 于 2009 年开始赞助这个项目.第一个有版本号的 Rust ...
- 手把手教你 Apache DolphinScheduler 本地开发环境搭建 | 中英文视频教程
点击上方 蓝字关注我们 最近,一些小伙伴反馈对小海豚的本地开发环境搭建过程不太了解,这不就有活跃的贡献者送来新鲜的视频教程!在此感谢@Tianqi-Dotes 的细致讲解 贡献者还贴心地录制了中英文两 ...
- LuoguP1858 多人背包(DP)
第\(K\)优解这类问题可在\(DP\)过程中通过添维解决.归并出当前前\(K\)大的解. #include <iostream> #include <cstdio> #inc ...
- 解决使用 Eruda 绑定 dom 未在指定位置显示问题
前言 开发项目中,使用到 Eruda 打印控制台信息显示 文档:https://github.com/liriliri/eruda 安装 Eruda npm install eruda --save ...