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