in_tail輸入插件內(nèi)置于Fluentd中,,無需安裝,。它允許fluentd從文本文件尾部讀取日志事件,,其行為類似linux的tail -F命令(按文件名來tail),。這幾乎是最常用的一個(gè)輸入插件了,。
<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> 這個(gè)示例用于tail Apache的日志,。 - 當(dāng)Fluentd首次配置使用in_tail插件時(shí),它會(huì)從path指定的日志文件尾部讀取數(shù)據(jù)。一旦日志文件被輪轉(zhuǎn)重寫,,F(xiàn)luentd則開始從新文件頭部讀取數(shù)據(jù),。Fluentd會(huì)持續(xù)追蹤文件當(dāng)前的inode編號(hào)。當(dāng)td-agent重啟時(shí),,它會(huì)從重啟前的位置開始讀取數(shù)據(jù),,這個(gè)位置保存在pos_file指定的文件中。
- tag(必需,,0.14.0(最低版本要求,下同))指定生成的事件的tag,,取值為一個(gè)字符串,。可以使用*作為占位符,,*會(huì)將日志文件路徑中的/替換為.號(hào),,比如:
path /path/to/file tag foo.* 上邊這個(gè)配置會(huì)產(chǎn)生foo.path.to.file這樣的tag。 - 指定日志文件路徑,,可使用逗號(hào)(,)作為分隔符指定多個(gè)路徑。路徑中可包含*和strftime格式時(shí)間字符串,,用以動(dòng)態(tài)增刪文件,。Fluentd會(huì)定期刷新監(jiān)控文件列表。
這個(gè)示例監(jiān)控時(shí)間字符串指定的目錄,,比如若日期為20140401,,F(xiàn)luentd會(huì)監(jiān)控/path/to/2014/04/01路徑下的所有文件。
path /path/to/a/*,/path/to/b/c.log 這個(gè)示例監(jiān)控多個(gè)目錄,。 需要注意的是,,*不能用于存在日志文件輪轉(zhuǎn)的情況,這會(huì)導(dǎo)致日志重復(fù),。這種情況建議使用單獨(dú)的in_tail配置,。 - 若path參數(shù)中包含strftime時(shí)間字符串,可通過path_timezone設(shè)置采用的時(shí)區(qū),。in_tail默認(rèn)使用系統(tǒng)時(shí)區(qū),,可通過如下配置來設(shè)置:
- 指定從監(jiān)控文件列表中排除哪些文件,這是一個(gè)字符串?dāng)?shù)組,。
path /path/to/* exclude_path ["/path/to/*.gz", "/path/to/*.zip"] 這個(gè)示例會(huì)排除path中的gz和zip壓縮文件。 - 指定監(jiān)控列表刷新間隔,,默認(rèn)為60秒,。當(dāng)path中包含*時(shí)生效。
- limit_recently_modified(0.14.13)只監(jiān)控指定修改時(shí)間范圍內(nèi)的文件。該參數(shù)取值為time類型的時(shí)間,,且當(dāng)path中包含*時(shí)生效,。
- skip_refresh_on_startup(0.14.13)設(shè)置程序啟動(dòng)時(shí)是否刷新文件列表,默認(rèn)為false,。不刷新,,可在path中包含*時(shí)減少啟動(dòng)耗時(shí)。
- 從文件頭部讀取數(shù)據(jù),,默認(rèn)為false,。當(dāng)取值true時(shí),in_tail會(huì)在啟動(dòng)階段讀取文件,,若文件太大會(huì)很耗時(shí),,且會(huì)阻塞其他插件的啟動(dòng)。
- encoding, from_encoding(0.14.0)設(shè)置in_tail輸出數(shù)據(jù)的編碼,,默認(rèn)采用ASCII-8BIT編碼,。
- 設(shè)置每次從文件中讀取的行數(shù),默認(rèn)為1000.如果在日志中發(fā)現(xiàn)“chunk bytes limit exceeds for an emittedevent stream”這樣的錯(cuò)誤,,應(yīng)該減小此參數(shù)值,。
- multiline_flush_interval(0.14.0)多行處理模式下的緩存輸出間隔,默認(rèn)不啟用此配置,。當(dāng)使用format_firstline選項(xiàng)時(shí),,這個(gè)參數(shù)有用一些。
- pos_file(強(qiáng)烈推薦配置,,0.14.0)Fluentd使用pos_file保存文件讀取位置,。pos_file可在一個(gè)文件中保存多個(gè)位置,所以每個(gè)source中需要注意的是,,多個(gè)in_tail插件不能共用一個(gè)pos_file配置,這可能導(dǎo)致未知的行為,,比如pos_file文件損壞,。
- pos_file_compaction_interval(1.9.2)設(shè)置pos_file的壓縮間隔,被壓縮的內(nèi)容包含:已移出監(jiān)控列表的文件,、無法解析的文件,、重復(fù)文件行??稍谠O(shè)置pos_file的情況下
pos_file /var/log/td-agent/tmp/access.log.pos pos_file_compaction_interval 72h - 用于配置解析文件內(nèi)容使用的解析器。我們會(huì)在后續(xù)的文章中了解到解析器的使用,。這里有一個(gè)例子:
# json <parse> @type json </parse>
# regexp <parse> @type regexp expression ^(?<name>[^ ]*) (?<user>[^ ]*) (?<age>\d*)$ </parse> - 可以將監(jiān)控文件路徑添加到生成的日志事件中,,path_key用于指定事件中path的key名稱。
path /path/to/access.log path_key tailed_path 使用上邊這個(gè)配置,,會(huì)生成如下的日志事件: {"tailed_path":"/path/to/access.log","k1":"v1",...,"kN":"vN"} - 文件輪轉(zhuǎn)等待時(shí)間,。在監(jiān)控文件存在輪轉(zhuǎn)的情況下,F(xiàn)luentd會(huì)在監(jiān)測到文件輪轉(zhuǎn)時(shí),,再監(jiān)控老文件一段時(shí)間,,以避免數(shù)據(jù)丟失。默認(rèn)的等待時(shí)間為5秒,。
- enable_watch_timer(0.14.0)是否啟用監(jiān)控定時(shí)器,,默認(rèn)開啟一個(gè)間隔1秒的定時(shí)器,關(guān)閉后會(huì)降低CPU和IO消耗,。這個(gè)是用來解決某些系統(tǒng)監(jiān)控不準(zhǔn)確的問題,,未來
- enable_stat_watcher(1.0.1)是否啟用額外的基于inotify的監(jiān)控器,。默認(rèn)為true,,關(guān)閉后會(huì)禁用inotify事件,僅通過定時(shí)監(jiān)控器來追蹤文件,。
- 是否輸出無法解析的文件行信息,,默認(rèn)為false。
- 當(dāng)<parse>無法匹配日志時(shí)會(huì)如何處理若emit_unmatched_lines設(shè)為true,,in_tail會(huì)打印出告警信息,。比如,<parse>指定的解析器為json,,而日志中包含“123,456,str,true”這樣的記錄,,那么在fluentd運(yùn)行日志中就會(huì)看到如下輸出:
2018-04-19 02:23:44 +0900 [warn]: #0 pattern not match: "123,456,str,true" - 可能監(jiān)控文件確實(shí)沒有產(chǎn)生新的數(shù)據(jù),試著追加一條數(shù)據(jù)看看,。
- in_tail輸出“/path/to/file unreadable”,,這是什么導(dǎo)致的若在運(yùn)行日志中發(fā)現(xiàn)如下信息,可能是fluentd沒有監(jiān)控文件的讀權(quán)限,。
/path/to/file unreadable. It is excluded and would be examined next time. - 如何避免監(jiān)控大量文件時(shí)in_tail停止運(yùn)行可設(shè)置enable_stat_watcher為false,。
|