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