本文介紹Logtail的採集過程,包括監聽日誌、讀取日誌、處理日誌、過濾日誌、彙總日誌和發送日誌。
採集過程
Logtail採集資料的過程如下:
監聽日誌
在伺服器上安裝Logtail及在Log Service控制台上建立Logtail採集配置後,Log Service會即時下發Logtail採集配置到Logtail,Logtail根據Logtail採集配置開始監聽檔案。Logtail根據Logtail採集配置中的日誌路徑和最大監控目錄深度,逐層掃描符合規則的日誌目錄和檔案。
將Logtail採集配置應用到機器組後,對應伺服器上沒有發生修改事件的記錄檔會被判定為歷史記錄檔,Logtail監聽到歷史記錄檔,並不會採集。當記錄檔產生了修改事件,才會觸發採集流程,Logtail開始讀取檔案。如果您要採集歷史記錄檔,請參見匯入歷史記錄檔。
為保證採集日誌的時效性以及穩定性,Logtail會對待採集的目錄註冊事件監聽(Linux下使用Inotify)以及定期輪詢。
讀取日誌
Logtail監聽到記錄檔,並確認有更新後,開始讀取。
首次讀取記錄檔時,Log Service預設首次讀取大小為1024 KB。
如果檔案小於1024 KB,則從檔案內容起始位置開始讀取。
如果檔案大於1024 KB,則從距離檔案末尾1024 KB的位置開始讀取。
說明Log Service支援自訂首次讀取大小。
控制台方式:在Logtail配置中修改首次採集大小參數。具體操作,請參見進階配置。
API方式:在Logtail配置中修改tail_size_kb參數。具體操作,請參見advanced參數說明。
如果Logtail已讀取過該記錄檔,則從上次讀取的Checkpoint處繼續讀取。
讀取記錄檔時,每次最多可以讀取512 KB,因此每條日誌的大小請控制在512 KB以內,否則無法正常讀取。
如果您修改了伺服器上的時間,請手動重啟Logtail,否則會導致日誌時間不正確、意外丟棄日誌等現象。
處理日誌
Logtail讀取日誌後,對日誌內容進行分行、解析、設定時間欄位。
分行
如果Logtail採集配置中指定了行首Regex,則Logtail根據行首Regex對每次讀取的日誌進行分行,切分成多條日誌;如果沒有指定行首Regex,則將一行日誌作為一條Tlog。
解析
根據Logtail採集配置中配置的採集模式,對每條日誌內容進行解析。
說明如果您的Regex比較複雜,可能會導致CPU佔用率過高,請使用合理高效的Regex。
如果解析失敗,會根據Logtail採集配置中是否開啟丟棄解析失敗日誌的功能進行處理。
開啟丟棄解析失敗日誌,則直接丟棄該日誌,並上報解析失敗的報錯資訊。
關閉丟棄解析失敗日誌,則上傳解析失敗的原始日誌,其中Key為raw_log、Value為日誌內容。
設定日誌時間欄位
如果未配置時間欄位,則日誌時間為當前解析日誌的時間。
如果配置了時間欄位:
日誌中記錄的時間距離目前時間12小時以內,則從解析的日誌欄位中提取時間。
日誌中記錄的時間距離目前時間12小時以上,則丟棄該日誌並上傳錯誤資訊。
過濾日誌
處理日誌後,根據Logtail採集配置中的過濾器配置過濾日誌。
在Logtail採集配置中未設定過濾器配置,則不過濾日誌,執行下一個步驟。
Logtail採集配置已設定過濾器配置,則對每條日誌中的所有欄位進行遍曆並驗證。
只有符合過濾器配置的日誌被採集。
彙總日誌
為降低網路請求次數,在Tlog、過濾完畢後,會在Logtail內部緩衝一段時間後進行彙總打包,再發送到Log Service。快取資料後,觸發打包日誌發送到Log Service的條件如下:
日誌彙總時間超過3秒。
日誌彙總條數超過4000條。
日誌彙總總大小超過512 KB。
發送日誌
Logtail將採集到的日誌彙總並發送到Log Service。如果資料發送失敗,Logtail自動根據錯誤資訊決定重試或放棄發送。
錯誤資訊 | 說明 | Logtail處理方式 |
401錯誤 | 當前帳號沒有許可權採集資料。為該帳號授予資料接入相關許可權。具體操作,請參見配置許可權助手。 | 直接丟棄日誌包。 |
404錯誤 | Logtail採集配置中指定的Project或Logstore不存在。 | 直接丟棄日誌包。 |
403錯誤 | Shard Quota超出限制。 | 等待3秒後重試。 |
500錯誤 | 服務端異常。 | 等待3秒後重試。 |
如果要調整資料的發送速度和最大並發數,您可以設定啟動參數設定檔中的max_bytes_per_sec參數和send_request_concurrency參數。具體操作,請參見設定Logtail啟動參數。