這個話題忱嘹,你學(xué)習(xí)了解Filebeat關(guān)鍵構(gòu)件
他們之間是怎么樣工作, 理解這些概念耕渴,
在配置filebeat的時候拘悦,幫助你做出正確的決定。
filebeat有倆個主要的組件: prospectors or harversters
Harvester
- 負(fù)責(zé)讀取一個單個文件的內(nèi)容
- 逐行讀取一個文件橱脸,并發(fā)送內(nèi)容到輸出端
- 從文件的開始讀取础米,通過文件描述符控制關(guān)閉和打開文件
- 如果文件被移走或者重命名,依然會讀取該文件
- 默認(rèn)情況下,Filebeat保持打開該文件,直到到達(dá)close_inactive
關(guān)閉harverter會有一下結(jié)果
- 如果之前正在讀取一個刪除的日志文件添诉,此時關(guān)閉harverter屁桑,則這個文件將被關(guān)閉,釋放潛在的資源
- scan_frequency運(yùn)行后栏赴,將被開始讀取文件
- 當(dāng)文件被刪除或者移走蘑斧,關(guān)閉harvester,文件不在被讀取
- 控制harvester的關(guān)閉,使用close_* 選項(xiàng)配置
Prospector
- 負(fù)責(zé)管理harvesters和尋找資源來讀取
- 當(dāng)input_type是log的時候竖瘾,它將發(fā)現(xiàn)所有匹配定義的路徑文件沟突,為每個文件開始啟動一個harvester,每個prospector都跑自己的例程
- 支持倆中prospector類型: log and stdin
- 每個prospector類型可以被定義多次
- 對每個文件檢查是否需要啟動harvester准浴,是否已經(jīng)啟動事扭,是否被忽略等定義
- 如果harvester是關(guān)閉的,文件的尺寸改變了乐横,新行只是被收錄進(jìn)來
保持文件狀態(tài)
- 保持文件狀態(tài)求橄,頻繁寫入registry file中
- 文件狀態(tài)記錄最后讀取文件的偏移量,確保所有日志文件被發(fā)送
- 跟蹤發(fā)送的最后一行日志葡公,繼續(xù)閱讀日志罐农,直到輸出端恢復(fù)正常
- filebeat運(yùn)行的時候,每個prospector狀態(tài)信息被保存在內(nèi)存中
- filebeat被重啟催什,將讀取registry文件來恢復(fù)文件狀態(tài)涵亏,確認(rèn)位置
- 為了發(fā)現(xiàn)每個prospertor保持文件狀態(tài),對于每個文件蒲凶,filebeat將存儲唯一驗(yàn)證號來探測一個文件是否被獲取了
保證至少一次成功投遞
- filebeat為每個事件存儲投遞狀態(tài)到registry file中
- 在定義的輸出被阻塞的情況下并沒有證實(shí)所有事件,Filebeat將試圖發(fā)送事件,直到輸出承認(rèn)已收到事件
- 如果在發(fā)送事件中气筋,filebeat關(guān)閉,它不會等待事件成功投遞返回結(jié)果宠默,當(dāng)再次啟動filebeat的時候,會再次發(fā)送一次事件灵巧,確保至少事件有一次被發(fā)送,但也可以在結(jié)束的時候刻肄,發(fā)送倆條事件瓤球,或者可以指定等待超時時間 通過shutdown_timeout
限制
- 當(dāng)輸出端不可達(dá)的時候,文件被刪除了卦羡,數(shù)據(jù)可能會丟失
- 寫入磁盤的速度一定要大雨filebeat進(jìn)程的速度
- linux上還有可能inode重用,filebeat會跳過inode重用文件