Logtail是Log Service提供的日誌採集Agent,用於採集阿里雲ECS、自建IDC或其他雲廠商等伺服器上的日誌。本文介紹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啟動參數。
功能優勢
基於記錄檔,無侵入式採集日誌。您無需修改應用程式代碼,且採集日誌不會影響您的應用程式運行。
除採集文本日誌外,還支援採集binlog、http資料、容器日誌等。
支援Docker、Kubernetes叢集等容器叢集的資料擷取。
阿里雲Container ServiceKubernetes:請參見K8s容器日誌提取。
自建Kubernetes:請參見K8s容器日誌提取。
自建Docker叢集:請參見採集Docker容器檔案日誌。
穩定處理日誌採集過程中的各種異常。當遇到網路異常、服務端異常等問題時會採取主動重試、本機快取資料等措施保障資料安全。
基於Log Service的集中管理能力。安裝Logtail後,只需要在Log Service上配置機器組、Logtail採集配置等資訊即可。
完善的自我保護機制。為保證運行在伺服器上的Logtail不會明顯影響您伺服器上其他服務的效能,Logtail在CPU、記憶體及網路使用方面都做了嚴格的限制和保護機制。
配置流程
如果ECS執行個體且與Simple Log ServiceProject屬於同一帳號且在同一地區,請參見安裝Logtail(ECS執行個體)。其他情況,請參見安裝Logtail(Linux系統)、安裝Logtail(Windows系統)。
在採集非本帳號ECS、自建IDC或其他雲廠商伺服器日誌時需要配置使用者標識。
Simple Log ServiceProject支援使用IP地址或使用者自訂標識建立機器組。
建立Logtail採集配置
完成上述操作後,Logtail開始採集您伺服器上的日誌,並發送到對應的Logstore中。您可以通過Log Service控制台、API、SDK或CLI查詢日誌。
核心概念
機器組:一個機器組包含一台或多台待採集同類日誌的伺服器。將Logtail採集配置應用到機器組後,Log Service會根據Logtail採集配置採集機器組內所有伺服器上的日誌。
Log Service通過機器組管理所有需要通過Logtail採集日誌的伺服器,支援通過IP地址或者使用者自訂標識的方式定義機器組。您可以通過Log Service控制台管理機器組(包括建立、刪除機器組,添加、移除機器等操作)。 更多資訊,請參見什麼是機器組。
Logtail:Log Service提供的日誌採集Agent,運行在待採集日誌的伺服器上。
Linux作業系統:Logtail安裝在/usr/local/ilogtail目錄下,啟動兩個以ilogtail開頭的獨立進程,一個為採集進程,另外一個為守護進程,程式作業記錄儲存在/usr/local/ilogtail/ilogtail.LOG檔案中。更多資訊,請參見安裝Logtail(Linux系統)。
Windows作業系統
Logtail(32位程式)
安裝在Windows 32位作業系統中時,對應的安裝目錄為C:\Program Files\Alibaba\Logtail。
安裝在Windows 64位作業系統中時,對應的安裝目錄為C:\Program Files (x86)\Alibaba\Logtail。
說明Windows 64位作業系統支援運行32/64位應用程式,但是出於相容性考慮,在Windows 64位作業系統上,Windows會使用單獨的x86目錄來存放32位應用程式。
Logtail(64位程式)
只支援安裝在Windows 64位作業系統中,對應的安裝目錄為C:\Program Files\Alibaba\Logtail。
您可以通過
,查看LogtailDaemon服務(Logtail 1.0.0.0及以上版本)或LogtailWorker服務(Logtail 0.x.x.x版本),確認Logtail的運行狀態。程式作業記錄儲存在安裝目錄下的ilogtail.LOG
檔案中。更多資訊,請參見安裝Logtail(Windows系統)。
Logtail配置:Logtail採集日誌的策略集合。通過在建立Logtail採集配置時設定資料來源、採集模式等參數,實現定製化的採集策略。Logtail採集配置定義了如何在伺服器上採集同類日誌並解析、發送到指定的Log ServiceLogstore上。
準系統
功能 | 說明 |
即時採集日誌 | 動態監控記錄檔,即時讀取、解析增量日誌。日誌從產生到發送到Log Service的延遲一般在3秒內。更多資訊,請參見Logtail採集詳情。 說明 Logtail不支援採集歷史日誌,對於一條日誌,讀取該日誌的時間減去日誌中記錄的時間,差值超過12小時會被丟棄。如果您要採集歷史記錄檔,請參見匯入歷史記錄檔。 |
自動處理日誌輪轉 | 很多應用會按照檔案大小或者日期對記錄檔進行輪轉(rotation),把原記錄檔重新命名,並建立一個空記錄檔等待寫入。例如:app.LOG檔案,通過日誌輪轉會產生 app.LOG.1、app.LOG.2 等。您可以指定採集日誌寫入的檔案,如app.LOG,Logtail會自動檢測到日誌輪轉過程,保證這個過程中不會丟失日誌資料。 |
多種採集輸入源 | Logtail除支援採集文本日誌外,還支援syslog、http、MySQL binlog等資料來源。更多資訊,請參見資料擷取概述。 |
相容開源採集Agent | Logtail支援Logstash、Beats等開源軟體採集的資料作為資料來源。更多資訊,請參見資料擷取概述。 |
自動處理採集異常 | 因為服務端錯誤、網路措施、配額超限等各種異常導致資料發送失敗,Logtail會按情境主動重試。如果重試失敗則將資料寫入本機快取,等待3秒自動重發。更多資訊,請參見如何使用Logtail自動診斷工具。 |
靈活配置採集策略 | 可以通過Logtail採集配置非常靈活地採集日誌。您可以根據實際情境指定日誌目錄和檔案,支援精確匹配,也支援萬用字元模糊比對。您也可以自訂提取日誌的方式和提取欄位的名稱,Log Service支援通過Regex提取日誌。 由於Log Service中的日誌資料模型要求每條日誌必須有精確的時間戳記資訊,Logtail提供了自訂的日誌時間格式,方便您從不同格式的日誌資料中提取必要的日誌時間戳記資訊。 |
自動同步Logtail採集配置 | 您在Log Service控制台上建立或更新Logtail採集配置,一般情況下,Logtail在3分鐘內即可接收並生效。更新過程中不會丟失日誌資料。 |
自我監控狀態 | Logtail會即時監控自身CPU和記憶體消耗,避免Logtail消耗您太多資源而影響您的其他服務。Logtail在運行過程中,如果資源使用超出限制將會自動重啟,避免影響伺服器上的其他服務。同時,Logtail有主動的網路限流保護措施,防止過度消耗頻寬。更多資訊,請參見啟動參數設定檔(ilogtail_config.json)。 |
簽名資料發送 | 為保證您的資料在發送過程中不會被篡改,Logtail會通過可信通道從服務端擷取私密Token,並對所有發送日誌的資料包進行資料簽名。 說明 Logtail在擷取私密Token時採用HTTPS通道,保障相關安全性。 |
資料擷取可靠性
Logtail在採集日誌時,定期將採集的點位(CheckPoint)資訊儲存到本地,如果遇到伺服器意外關閉、進程崩潰等異常情況時,Logtail重啟後會從上一次記錄的位置開始採集資料,儘可能保證資料不丟失。Logtail會根據啟動參數設定檔中配置進行工作,如果資源佔用超過限定值5分鐘以上,則Logtail會強制重啟。重啟後可能會產生一定的資料重複。
Logtail內部採用了很多機制提升日誌採集可靠性,但並不能保證日誌一定不會丟失。以下情況可能造成日誌丟失:
Logtail未運行且日誌輪轉多次。
日誌輪轉速度極快,例如1秒輪轉1次。
日誌採集速度長期無法達到日誌產生速度。