全部產品
Search
文件中心

Simple Log Service:Logtail限制說明

更新時間:Jun 30, 2024

本文簡介Logtail採集資料時在運行環境、檔案採集、容器採集、CheckPoint管理、Logtail採集配置、機器組、效能、錯誤處理等方面的限制。

運行環境

限制項

限制說明

體繫結構

  • Linux Logtail版本支援x86_64和arm64。

  • Windows Logtail版本支援x86_32和x86_64。

記憶體

負載為空白時,不開啟外掛程式最少需要20 MB記憶體,開啟外掛程式最少需要120 MB記憶體。

實際使用量與採集速率、監控目錄和檔案數量、發送阻塞程度有關。

系統內容

  • Linux Kernel 2.6.32及以上版本。

  • glibc 2.5及以上版本。

  • Windows Server 2004及以上版本。

Kubernetes

  • 使用DaemonSet方式採集日誌時,要求Kubernetes為1.10.0及以上版本(支援Mount propagation: HostToContainer)。

  • 使用CRD方式(alibaba-log-controller組件)採集日誌時,要求Kubernetes為1.16.0及以上版本。

    Kubernetes 1.7.0及以上版本提供的apiextensions.k8s.io/v1beta1 API也支援CRD能力,但Beta版本的API穩定性取決於具體的Kubernetes版本,穩定性未知。

Docker

採集容器標準輸出的限制說明如下:

  • 必須在Docker的設定檔daemon.json中添加"log-driver": "json-file"

  • 如果是Centos 7.4及以上版本(除Centos 8.0以外),需設定fs.may_detach_mounts=1。更多資訊,請參見Bug 1468249Bug 1441737issue 34538

ACK logtail-ds組件

  • logtail-ds:每個節點至少預留0.1 Core CPU,256 MB記憶體。

  • alibaba-log-controller:每個節點至少預留0.05 Core CPU,100 MB記憶體。

重要

以上組件均為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啟動參數

支援設定採集路徑為xxx.logxxx.log*形式。

重要

同一個Logtail執行個體中請勿混用兩種形式,否則可能導致同一檔案匹配多個Logtail採集配置,出現重複採集。

如果未處理完成的檔案超過20個,將導致新產生的日誌丟失。此類情況,請優先排查Logstore Shard寫入Quota是否超限,並調整Logtail並發水平。具體操作,請推薦參數值

日誌解析阻塞時採集行為

日誌解析阻塞時,Logtail會保持該記錄檔描述符為開啟狀態,避免阻塞期間檔案被刪除,導致日誌丟失。

如果解析阻塞期間出現多次記錄檔輪轉,Logtail會將檔案放入輪轉隊列。

Regex

支援Perl相容Regex。

JSON

完全支援標準JSON(RFC7159ECMA-404)。不支援非標準JSON,例如{"name": "\xE5\xAD\xA6"}

同一檔案對應多個Logtail配置

預設一個檔案只能匹配一個Logtail採集配置。如果檔案中的日誌需要被採集多份,請參見如何?檔案中的日誌被採集多份

重要

採集多份時,檔案讀取的IO、計算資源和網路IO都會線性增加。

檔案開啟行為

Logtail會保持被採集的檔案和輪轉隊列中待採集的檔案處於開啟狀態,以保證採集資料完整性。出現以下情況,會關閉檔案。

  • 檔案超過5分鐘未被修改。

  • 發生輪轉且採集完畢。

  • 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會在記憶體中保留檔案採集歷史進度,保證檔案發生變化後僅採集增量部分,超過保留範圍的日誌如果發生寫入,會導致重複採集。

  • 預設最多保留1個月內的歷史檔案。

  • 如果同一目錄下歷史檔案超過5,000個時,僅保留最近1周的記錄。

  • 如果同一目錄下歷史檔案超過10,000個時,僅保留1天內的記錄。

非標準文本日誌

對於日誌中包含\0的行,該條日誌會被截斷到第一個\0處,之後部分丟棄。對於其他逸出字元(如ASCII顏色)或不可見字元,Logtail將按原樣上報。

容器採集

說明

通過Logtail採集容器日誌時,除上述檔案採集的限制項外,還存在如下限制項。

限制項

限制說明

首次日誌採集行為

如果採集的是容器標準輸出,則首次發現檔案修改後,預設如果檔案大小超過512 KB,則從最後512 KB處開始採集,否則從頭採集。您可通過Logtail採集配置中的StartLogMaxOffset參數調整。具體操作,請參見通過DaemonSet-控制台方式採集容器標準輸出

軟連結

採集容器檔案中的日誌時,不支援目錄及檔案的軟串連。

容器生命週期

預設情況下,容器生命週期至少在10秒以上,Logtail才能採集到日誌。在容器檔案採集情境下,出於效能因素,Logtail將限制3分鐘內容器更新次數為10次。您可通過啟動參數docker_config_update_intervalmax_docker_config_update_times進行調整。具體操作,請設定Logtail啟動參數

標準輸出日誌輪轉

容器的標準輸出檔案由docker或kubelet進行輪轉,kubelet記錄檔輪轉預設大小為10 MB(docker日誌輪轉在ACK上被設定為100 MB),如果容器每秒輸出標準輸出的速率大於10 MB/s,將導致檔案快速輪轉,建議改用容器檔案方式採集或修改kubelet的containerLogMaxSize參數以避免日誌丟失。

標準輸出日誌驅動

如果使用Docker作為容器運行時,必須在Docker的設定檔daemon.json中添加"log-driver": "json-file"

CheckPoint管理

限制項

限制說明

CheckPoint逾時時間

預設情況下,如果檔案超過30天未被修改,該Checkpoint將被刪除。如果在Logtail採集配置中設定了preserve:false,則檔案超過30分鐘未被修改,該Checkpoint將被刪除。

CheckPoint儲存策略

定期儲存(15分鐘),程式退出時會自動儲存。您可以通過啟動參數check_point_dump_interval進行調整。具體操作,請參見設定Logtail啟動參數

CheckPoint儲存位置

儲存路徑預設為/tmp/logtail_checkpoint。您可以通過啟動參數check_point_filename進行調整。具體操作,請參見設定Logtail啟動參數

宕機時的處理

由於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啟動參數

最大效能

單核的能力如下:

  • 極簡模式日誌最大處理能力為100 MB/s。

  • 正則預設最大處理能力為20 MB/s(與Regex的複雜度有關)。

  • 分隔字元日誌最大處理能力為40 MB/s。

  • JSON日誌最大處理能力為30 MB/s。

通過啟動參數process_thread_count設定多個處理線程,可提升1.5~3倍效能。

最大監控目錄及檔案數

與記憶體使用量限制參數mem_usage_limit有關(主機情境預設為384 MB,容器情境預設為2048 MB),分為以下四個層級:

  • 最大監控目錄總數:⌊mem_usage_limit/100⌋×5000(目錄不包含Logtail採集配置中指定的目錄黑名單)。

  • 最大監控目錄和檔案總數:⌊mem_usage_limit/100⌋×50000(目錄不包含Logtail採集配置中指定的目錄黑名單,檔案包含未被Logtail採集配置匹配的檔案)。

  • 單個採集配置監控目錄和檔案總數:⌊mem_usage_limit/100⌋×5000(目錄不包含Logtail採集配置中指定的目錄黑名單,檔案包含未被Logtail採集配置匹配的檔案)。

  • 單個目錄中被監控的子目錄和檔案總數:⌊mem_usage_limit/100⌋×5000(目錄包含Logtail採集配置中指定的目錄黑名單,檔案包含未被Logtail採集配置匹配的檔案)。

當上述任一層級所監控的目錄及檔案數達到上限時,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秒。任一條件滿足則觸發上傳行為

錯誤處理

限制項

限制說明

網路錯誤處理

在出現網路異常時會主動重試並自動調整稍候再試。在極端情況下,可能存在日誌重複採集或丟棄的風險:

  • 用戶端發出的包被服務端接收,而服務端回應的包未能在15秒內被用戶端接收時,用戶端的重試將導致資料的重複採集。

  • 網路鏈路異常導致用戶端收到的包損壞,連續產生5次錯誤,最終導致資料被丟棄。

資源配額超限處理

如果資料發送速率超出Logstore最大配額,Logtail會阻塞採集並自動重試。請嘗試擴大Logstore的Shard數量。

用戶端時間異常

可能因為請求時間和服務端時間差別超過15分鐘,導致最大重試5次仍然不成功,資料被丟棄。請修正用戶端機器時間。

Project或Logstore不存在

重試5次仍然不成功後丟棄資料。這種情況可能是因為您通過API刪除了Logstore。請通過API刪除對應Logtail採集配置和配置應用。

鑒權失敗

重試5次仍然不成功後丟棄資料。這種情況通常有2種可能。

  • 在Logtail剛啟動時出現,與網路不穩定,無法獲得鑒權有關。

  • 如果持續出現,與機器無法通過HTTPS協議與Log ServiceEndpoint建立串連獲得鑒權有關。

其他未知錯誤

重試5次仍然不成功後丟棄資料。

逾時最大嘗試時間

如果資料持續發送失敗超過6小時,該資料將被丟棄。

狀態自檢

支援異常情況下自動重啟,例如程式異常退出及使用資源超限等。