您好,登錄后才能下訂單哦!
Logtail的工作原理是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
Logtail數(shù)據(jù)采集原理介紹,包括文件采集原理以及插件采集原理。
Logtail文件采集的流程包括:文件監(jiān)聽、文件讀取、日志處理、日志過濾、日志聚合和數(shù)據(jù)發(fā)送6個環(huán)節(jié)。下面將分別進行介紹:
注意:本節(jié)只介紹正常運行模式中Logtail的文件采集原理,該模式下不支持采集歷史文件,如有采集歷史文件需求,請參考采集歷史文件。
當(dāng)Logtail獲取到采集配置后,根據(jù)配置的日志路徑、文件名、最大監(jiān)控目錄深度遞歸掃描目錄下符合文件名規(guī)則的日志目錄和文件。
為保證日志采集時效性以及穩(wěn)定性,Logtail會對采集目錄注冊事件監(jiān)聽(Linux下Inotify、Windows下使用ReadDirectoryChangesW)以及定期輪詢。
當(dāng)?shù)谝淮螒?yīng)用配置時,對于目錄下存量的日志文件不會進行采集,直到文件在配置應(yīng)用后產(chǎn)生修改事件才會采集。
當(dāng)監(jiān)聽到文件修改后,會進入文件讀取環(huán)節(jié)。
每次Logtail讀取會從該文件上一次讀取的偏移處開始。
若該文件首次讀取,會檢查該文件大小,若文件小于1MB,則從文件頭開始讀取,否則從文件尾1MB處開始讀取。
每次讀取最多512KB數(shù)據(jù),因此一條日志最大支持512KB。
對于讀取的數(shù)據(jù)塊,會根據(jù)行首配置進行分行,切分成多條日志。
對于每條日志內(nèi)容執(zhí)行對應(yīng)的解析,例如正則、分隔符、JSON等。
若未配置時間字段,則日志時間為當(dāng)前解析時間;若配置了時間提取字段,則從解析的日志字段中提取時間,若時間距離當(dāng)前時間超過12小時,則丟棄該日志并上傳錯誤信息。
若該日志可以被正確解析,則進入日志過濾環(huán)節(jié)。
若該日志解析失敗且開啟 高級配置中的丟棄解析失敗日志,則直接丟棄該日志,并上報解析失敗的報錯信息
若該日志解析失敗,但未開啟 高級配置中的丟棄解析失敗日志,則將解析失敗的原始日志上傳,其中Key為__raw_log__、Value為日志內(nèi)容
若用戶未設(shè)置 高級配置 中的 過濾器配置,則跳過日志過濾環(huán)節(jié)。
若用戶已經(jīng)設(shè)置過濾器配置,則會對每條日志中的所有字段進行遍歷并驗證。
只有過濾器中配置的所有字段都在該日志出現(xiàn),且所有對應(yīng)的字段全部符合過濾器配置時,日志才會被采集,否則丟棄該日志。
為降低網(wǎng)絡(luò)請求次數(shù),當(dāng)日志處理、過濾完畢后,會在Logtail內(nèi)部緩存一段時間再進行發(fā)送。
緩存規(guī)則有3條,任一一條滿足則觸發(fā)發(fā)送:
日志聚合時間超過3秒
日志聚合條數(shù)超過4096條
日志聚合總大小超過1MB
日志發(fā)送前會進行壓縮,目前Logtail采用的是LZ4壓縮算法。
日志發(fā)送受限于max_bytes_per_sec
和 send_request_concurrency
限制,Logtail會保證發(fā)送速率以及并發(fā)不超過配置值,具體參數(shù)請參考啟動參數(shù)配置。
若數(shù)據(jù)發(fā)送失敗,則根據(jù)錯誤信息選擇重試還是丟棄數(shù)據(jù):
401錯誤,說明沒有權(quán)限采集數(shù)據(jù),直接丟棄。
404錯誤,說明project或logstore不存在,直接丟棄。
403錯誤,Quota超限,等待3秒后重試。
500錯誤,等待3秒后重試。
網(wǎng)絡(luò)超時,等待3秒后重試。
Logtail的插件采集流程主要包括以下環(huán)節(jié):插件數(shù)據(jù)采集、數(shù)據(jù)處理、日志聚合和日志發(fā)送。
插件數(shù)據(jù)采集的原理在每個插件的文檔中都有介紹,具體請參見各個插件的幫助文檔。
插件數(shù)據(jù)處理邏輯請參考插件-數(shù)據(jù)處理。
插件的日志聚合邏輯和文件采集的日志聚合邏輯一致。
插件的日志發(fā)送邏輯和文件采集的日志發(fā)送邏輯一致。
Logtail會根據(jù)配置文件中的資源限制進行工作,若資源占用長時間(5分鐘)超過限定值,則Logtail會進行強制重啟。重啟后可能會產(chǎn)生一定的數(shù)據(jù)重復(fù)。
Logtail在采集數(shù)據(jù)時,會定期將采集的點位(CheckPoint)信息保存到本地,若遇到宕機、Crash等異常時,Logtail再次啟動會從上一次記錄的位置處開始采集數(shù)據(jù),盡可能保證數(shù)據(jù)不丟失。
Logtail內(nèi)部采用了很多機制提升日志采集可靠性,但并不能保證日志絕對不會丟失。以下情況可能造成日志丟失:
Logtail未運行且日志輪轉(zhuǎn)多次。
日志輪轉(zhuǎn)速度極快,例如1秒輪轉(zhuǎn)1次。
日志采集速度長期無法達到日志產(chǎn)生速度。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。