本文簡介Logtail採集資料時在運行環境、檔案採集、容器採集、CheckPoint管理、Logtail採集配置、機器組、效能、錯誤處理等方面的限制。
運行環境
限制項 | 限制說明 |
體繫結構 |
|
記憶體 | 負載為空白時,不開啟外掛程式最少需要20 MB記憶體,開啟外掛程式最少需要120 MB記憶體。 實際使用量與採集速率、監控目錄和檔案數量、發送阻塞程度有關。 |
系統內容 |
|
Kubernetes |
|
Docker | 採集容器標準輸出的限制說明如下:
|
ACK logtail-ds組件 |
重要 以上組件均為system-cluster-critical優先順序,叢集資源不足時請勿部署,否則可能驅逐節點上原有的Pod。 |
檔案採集
限制項 | 限制說明 |
單條日誌長度 | 預設限制為512 KB。您可通過啟動參數max_read_buffer_size進行調整,最大不能超過8 MB。具體操作,請參見設定Logtail啟動參數。 多行日誌按行首Regex劃分後,每條日誌大小限制仍為512 KB。如果日誌超過512 KB,會被強制拆分為多條進行採集。例如:單條日誌大小為1025 KB,則第一次處理512 KB,第二次處理512 KB,第三次處理1 KB,最終採集結果為多條不完整的日誌。 |
檔案編碼 | 支援UTF-8或GBK的編碼記錄檔,建議使用UTF-8編碼獲得更好的處理效能。 警告 如果記錄檔為其它編碼格式則會出現亂碼、資料丟失等問題。 |
記錄檔大小 | 無限制。 |
記錄檔輪轉 | 日誌輪轉隊列大小預設為20。您可通過啟動參數logreader_max_rotate_queue_size進行調整。具體操作,請參見設定Logtail啟動參數。 支援設定採集路徑為 重要 同一個Logtail執行個體中請勿混用兩種形式,否則可能導致同一檔案匹配多個Logtail採集配置,出現重複採集。 如果未處理完成的檔案超過20個,將導致新產生的日誌丟失。此類情況,請優先排查Logstore Shard寫入Quota是否超限,並調整Logtail並發水平。具體操作,請推薦參數值。 |
日誌解析阻塞時採集行為 | 日誌解析阻塞時,Logtail會保持該記錄檔描述符為開啟狀態,避免阻塞期間檔案被刪除,導致日誌丟失。 如果解析阻塞期間出現多次記錄檔輪轉,Logtail會將檔案放入輪轉隊列。 |
Regex | 支援Perl相容Regex。 |
JSON | 完全支援標準JSON(RFC7159、ECMA-404)。不支援非標準JSON,例如 |
同一檔案對應多個Logtail配置 | 預設一個檔案只能匹配一個Logtail採集配置。如果檔案中的日誌需要被採集多份,請參見如何?檔案中的日誌被採集多份。 重要 採集多份時,檔案讀取的IO、計算資源和網路IO都會線性增加。 |
檔案開啟行為 | Logtail會保持被採集的檔案和輪轉隊列中待採集的檔案處於開啟狀態,以保證採集資料完整性。出現以下情況,會關閉檔案。
如果無論檔案是否採集完成或仍有日誌寫入檔案,您都希望檔案在刪除後的可控時間內釋放檔案控制代碼,則您可通過啟動參數force_release_deleted_file_fd_timeout設定逾時時間。具體操作,請參見設定Logtail啟動參數。 |
首次日誌採集行為 | Logtail只採集增量的記錄檔。首次發現檔案被修改後,如果檔案大小超過1 MB(容器標準輸出為512 KB),則從最後1 MB處開始採集,否則從開始位置採集。 您可通過Logtail採集配置中的tail_size_kb參數調整新檔案首次採集的大小。具體操作,請參見Logtail配置。 如果下發Logtail採集配置後,記錄檔一直無修改,則Logtail不會採集該檔案。如果需要採集歷史檔案,請參見匯入歷史記錄檔。 |
檔案發生覆蓋的行為 | Logtail採用inode+檔案中前1024位元組的Hash識別檔案。檔案被覆蓋後,如果inode或檔案前1024位元組Hash發生變化,則檔案會作為新檔案從頭開始採集,否則不會被採集。 |
檔案發生移動的行為 | 檔案發生移動後,如果匹配Logtail採集配置,且該Logtail採集配置之前從未匹配過該檔案,則移動後的文檔將被當成新檔案從頭開始採集,否則不會被採集。 |
檔案採集歷史 | Logtail會在記憶體中保留檔案採集歷史進度,保證檔案發生變化後僅採集增量部分,超過保留範圍的日誌如果發生寫入,會導致重複採集。
|
非標準文本日誌 | 對於日誌中包含\0的行,該條日誌會被截斷到第一個\0處,之後部分丟棄。對於其他逸出字元(如ASCII顏色)或不可見字元,Logtail將按原樣上報。 |
容器採集
通過Logtail採集容器日誌時,除上述檔案採集的限制項外,還存在如下限制項。
限制項 | 限制說明 |
首次日誌採集行為 | 如果採集的是容器標準輸出,則首次發現檔案修改後,預設如果檔案大小超過512 KB,則從最後512 KB處開始採集,否則從頭採集。您可通過Logtail採集配置中的StartLogMaxOffset參數調整。具體操作,請參見通過DaemonSet-控制台方式採集容器標準輸出。 |
軟連結 | 採集容器檔案中的日誌時,不支援目錄及檔案的軟串連。 |
容器生命週期 | 預設情況下,容器生命週期至少在10秒以上,Logtail才能採集到日誌。在容器檔案採集情境下,出於效能因素,Logtail將限制3分鐘內容器更新次數為10次。您可通過啟動參數docker_config_update_interval和max_docker_config_update_times進行調整。具體操作,請設定Logtail啟動參數。 |
標準輸出日誌輪轉 | 容器的標準輸出檔案由docker或kubelet進行輪轉,kubelet記錄檔輪轉預設大小為10 MB(docker日誌輪轉在ACK上被設定為100 MB),如果容器每秒輸出標準輸出的速率大於10 MB/s,將導致檔案快速輪轉,建議改用容器檔案方式採集或修改kubelet的containerLogMaxSize參數以避免日誌丟失。 |
標準輸出日誌驅動 | 如果使用Docker作為容器運行時,必須在Docker的設定檔daemon.json中添加 |
CheckPoint管理
限制項 | 限制說明 |
CheckPoint逾時時間 | 預設情況下,如果檔案超過30天未被修改,該Checkpoint將被刪除。如果在Logtail採集配置中設定了 |
CheckPoint儲存策略 | 定期儲存(15分鐘),程式退出時會自動儲存。您可以通過啟動參數check_point_dump_interval進行調整。具體操作,請參見設定Logtail啟動參數。 |
CheckPoint儲存位置 | 儲存路徑預設為 |
宕機時的處理 | 由於CheckPoint是定期儲存,因此宕機恢複時將從上一個完整儲存的CheckPoint開始恢複,可能導致資料擷取重複。調整Checkpoint儲存策略以減少資料被重複採集。 |
Logtail採集配置
限制項 | 限制說明 |
配置更新生效的延時 | 從通過控制台或API更新配置到Logtail用戶端配置生效的延時約為30秒。 |
配置動態載入 | 支援,且其中某一配置更新不影響其他配置。 |
單個Logtail執行個體的總體可載入配置數 | 理論上無限制。建議一台伺服器中的Logtail採集配置數不超過100個。 |
第三方Flusher輸出 | 通過Log Service控制台或者API建立的配置會與Logstore建立關聯,因此,當您在外掛程式配置中使用第三方Flusher時,Logtail會預設往當前Logstore發送一份資料。 |
多帳號、跨帳號 | 支援。更多資訊,請參見多帳號情境和通過Logtail跨阿里雲帳號採集容器日誌。 |
多地區 | 預設不支援,如有需求請提工單申請。 |
Global Acceleration | 支援。需在服務側開啟後,在用戶端設定Global Acceleration。更多資訊,請參見開啟Global Acceleration服務。 |
機器組
限制項 | 限制說明 |
機器數量 | 理論上無限制,建議配置不超過100,000個,否則心跳無法正常擷取。 |
應用配置數 | 理論上無限制,建議配置數不超過1,000個。 |
效能
限制項 | 限制說明 |
Tlog吞吐能力 | 原始日誌流量預設限制為20 MB/s(資料被編碼壓縮後上傳,一般壓縮率為5~10倍)。超過該日誌流量則有可能丟失日誌,您可啟動參數max_bytes_per_sec進行調整。具體操作,請參見設定Logtail啟動參數。 |
最大效能 | 單核的能力如下:
通過啟動參數process_thread_count設定多個處理線程,可提升1.5~3倍效能。 |
最大監控目錄及檔案數 | 與記憶體使用量限制參數mem_usage_limit有關(主機情境預設為384 MB,容器情境預設為2048 MB),分為以下四個層級:
當上述任一層級所監控的目錄及檔案數達到上限時,Logtail不再對該層級中剩餘的目錄和檔案進行監控。您可以通過提高Logtail採集配置監控目錄的精度或調整啟動參數mem_usage_limit來提高監控上限。關於mem_usage_limit參數的更多資訊,請參見設定Logtail啟動參數。 另外,針對Linux系統,Logtail還支援通過inotify機制對目錄進行監聽,從而減少日誌採集的延時。inotify機制所能監控的最大目錄數(含子目錄)為3000。 |
資源超限處理策略 | 如果Logtail佔用相關資源超過最大限制的時間5分鐘,則Logtail會強制重啟,此時資料可能會丟失或重複。 |
多租戶隔離 | Logtail在配置層級實現隔離,即單個Logtail採集配置出現異常不影響其他Logtail採集配置。 |
日誌採集延遲 | 正常情況下從日誌寫入磁碟到Logtail採集到日誌的延遲不超過1秒。 |
日誌上傳策略 | Logtail會將同一檔案的日誌自動彙總上傳,彙總條件為日誌超過4000條、日誌總大小超過512 KB或者日誌採集時間超過3秒。任一條件滿足則觸發上傳行為 |
錯誤處理
限制項 | 限制說明 |
網路錯誤處理 | 在出現網路異常時會主動重試並自動調整稍候再試。在極端情況下,可能存在日誌重複採集或丟棄的風險:
|
資源配額超限處理 | 如果資料發送速率超出Logstore最大配額,Logtail會阻塞採集並自動重試。請嘗試擴大Logstore的Shard數量。 |
用戶端時間異常 | 可能因為請求時間和服務端時間差別超過15分鐘,導致最大重試5次仍然不成功,資料被丟棄。請修正用戶端機器時間。 |
Project或Logstore不存在 | 重試5次仍然不成功後丟棄資料。這種情況可能是因為您通過API刪除了Logstore。請通過API刪除對應Logtail採集配置和配置應用。 |
鑒權失敗 | 重試5次仍然不成功後丟棄資料。這種情況通常有2種可能。
|
其他未知錯誤 | 重試5次仍然不成功後丟棄資料。 |
逾時最大嘗試時間 | 如果資料持續發送失敗超過6小時,該資料將被丟棄。 |
狀態自檢 | 支援異常情況下自動重啟,例如程式異常退出及使用資源超限等。 |