什么是Logtail
Logtail是日志服務(wù)提供的日志采集Agent,用于采集阿里云ECS、自建IDC或其他云廠商等服務(wù)器上的日志。本文介紹Logtail的采集流程、功能、優(yōu)勢、使用限制及配置流程等信息。
Logtail多年來一直承載著阿里巴巴集團(tuán)重要服務(wù)的數(shù)據(jù)采集。每天采集數(shù)百萬服務(wù)器上的實(shí)時數(shù)據(jù),日流量數(shù)十PB,并歷經(jīng)多次雙十一挑戰(zhàn)。
相關(guān)性能指標(biāo),請參見Logtail提升采集性能。
相關(guān)技術(shù)分享,請參見 Logtail技術(shù)分享一和Logtail技術(shù)分享二。
采集流程
監(jiān)聽日志
在服務(wù)器上安裝Logtail及在日志服務(wù)控制臺上創(chuàng)建Logtail采集配置后,日志服務(wù)會實(shí)時下發(fā)Logtail采集配置到Logtail,Logtail根據(jù)Logtail采集配置開始監(jiān)聽文件。Logtail根據(jù)Logtail采集配置中的日志路徑和最大監(jiān)控目錄深度,逐層掃描符合規(guī)則的日志目錄和文件。
將Logtail采集配置應(yīng)用到機(jī)器組后,對應(yīng)服務(wù)器上沒有發(fā)生修改事件的日志文件會被判定為歷史日志文件,Logtail監(jiān)聽到歷史日志文件,并不會采集。當(dāng)日志文件產(chǎn)生了修改事件,才會觸發(fā)采集流程,Logtail開始讀取文件。如果您要采集歷史日志文件,請參見導(dǎo)入歷史日志文件。
為保證采集日志的時效性以及穩(wěn)定性,Logtail會對待采集的目錄注冊事件監(jiān)聽(Linux下使用Inotify)以及定期輪詢。
讀取日志
Logtail監(jiān)聽到日志文件,并確認(rèn)有更新后,開始讀取。
首次讀取日志文件時,日志服務(wù)默認(rèn)首次讀取大小為1024 KB。
如果文件小于1024 KB,則從文件內(nèi)容起始位置開始讀取。
如果文件大于1024 KB,則從距離文件末尾1024 KB的位置開始讀取。
說明日志服務(wù)支持自定義首次讀取大小。
控制臺方式:在Logtail配置中修改首次采集大小參數(shù)。具體操作,請參見高級配置。
API方式:在Logtail配置中修改tail_size_kb參數(shù)。具體操作,請參見advanced參數(shù)說明。
如果Logtail已讀取過該日志文件,則從上次讀取的Checkpoint處繼續(xù)讀取。
讀取日志文件時,每次最多可以讀取512 KB,因此每條日志的大小請控制在512 KB以內(nèi),否則無法正常讀取。
如果您修改了服務(wù)器上的時間,請手動重啟Logtail,否則會導(dǎo)致日志時間不正確、意外丟棄日志等現(xiàn)象。
處理日志
Logtail讀取日志后,對日志內(nèi)容進(jìn)行分行、解析、設(shè)置時間字段。
分行
如果Logtail采集配置中指定了行首正則表達(dá)式,則Logtail根據(jù)行首正則表達(dá)式對每次讀取的日志進(jìn)行分行,切分成多條日志;如果沒有指定行首正則表達(dá)式,則將一行日志作為一條日志處理。
解析
根據(jù)Logtail采集配置中配置的采集模式,對每條日志內(nèi)容進(jìn)行解析。
說明如果您的正則表達(dá)式比較復(fù)雜,可能會導(dǎo)致CPU占用率過高,請使用合理高效的正則表達(dá)式。
如果解析失敗,會根據(jù)Logtail采集配置中是否開啟丟棄解析失敗日志的功能進(jìn)行處理。
開啟丟棄解析失敗日志,則直接丟棄該日志,并上報(bào)解析失敗的報(bào)錯信息。
關(guān)閉丟棄解析失敗日志,則上傳解析失敗的原始日志,其中Key為raw_log、Value為日志內(nèi)容。
設(shè)置日志時間字段
如果未配置時間字段,則日志時間為當(dāng)前解析日志的時間。
如果配置了時間字段:
日志中記錄的時間距離當(dāng)前時間12小時以內(nèi),則從解析的日志字段中提取時間。
日志中記錄的時間距離當(dāng)前時間12小時以上,則丟棄該日志并上傳錯誤信息。
過濾日志
處理日志后,根據(jù)Logtail采集配置中的過濾器配置過濾日志。
在Logtail采集配置中未設(shè)置過濾器配置,則不過濾日志,執(zhí)行下一個步驟。
Logtail采集配置已設(shè)置過濾器配置,則對每條日志中的所有字段進(jìn)行遍歷并驗(yàn)證。
只有符合過濾器配置的日志被采集。
聚合日志
為降低網(wǎng)絡(luò)請求次數(shù),在日志處理、過濾完畢后,會在Logtail內(nèi)部緩存一段時間后進(jìn)行聚合打包,再發(fā)送到日志服務(wù)。緩存數(shù)據(jù)后,觸發(fā)打包日志發(fā)送到日志服務(wù)的條件如下:
日志聚合時間超過3秒。
日志聚合條數(shù)超過4000條。
日志聚合總大小超過512 KB。
發(fā)送日志
Logtail將采集到的日志聚合并發(fā)送到日志服務(wù)。如果數(shù)據(jù)發(fā)送失敗,Logtail自動根據(jù)錯誤信息決定重試或放棄發(fā)送。
錯誤信息 | 說明 | Logtail處理方式 |
401錯誤 | 當(dāng)前賬號沒有權(quán)限采集數(shù)據(jù)。為該賬號授予數(shù)據(jù)接入相關(guān)權(quán)限。具體操作,請參見配置權(quán)限助手。 | 直接丟棄日志包。 |
404錯誤 | Logtail采集配置中指定的Project或Logstore不存在。 | 直接丟棄日志包。 |
403錯誤 | Shard Quota超出限制。 | 等待3秒后重試。 |
500錯誤 | 服務(wù)端異常。 | 等待3秒后重試。 |
如果要調(diào)整數(shù)據(jù)的發(fā)送速度和最大并發(fā)數(shù),您可以設(shè)置啟動參數(shù)配置文件中的max_bytes_per_sec參數(shù)和send_request_concurrency參數(shù)。具體操作,請參見設(shè)置Logtail啟動參數(shù)。
功能優(yōu)勢
基于日志文件,無侵入式采集日志。您無需修改應(yīng)用程序代碼,且采集日志不會影響您的應(yīng)用程序運(yùn)行。
除采集文本日志外,還支持采集binlog、http數(shù)據(jù)、容器日志等。
支持Docker、Kubernetes集群等容器集群的數(shù)據(jù)采集。
阿里云容器服務(wù)Kubernetes:請參見K8s容器日志提取。
自建Kubernetes:請參見K8s容器日志提取。
自建Docker集群:請參見采集Docker容器文件日志。
穩(wěn)定處理日志采集過程中的各種異常。當(dāng)遇到網(wǎng)絡(luò)異常、服務(wù)端異常等問題時會采取主動重試、本地緩存數(shù)據(jù)等措施保障數(shù)據(jù)安全。
基于日志服務(wù)的集中管理能力。安裝Logtail后,只需要在日志服務(wù)上配置機(jī)器組、Logtail采集配置等信息即可。
完善的自我保護(hù)機(jī)制。為保證運(yùn)行在服務(wù)器上的Logtail不會明顯影響您服務(wù)器上其他服務(wù)的性能,Logtail在CPU、內(nèi)存及網(wǎng)絡(luò)使用方面都做了嚴(yán)格的限制和保護(hù)機(jī)制。
配置流程
如果ECS實(shí)例且與日志服務(wù)Project屬于同一賬號且在同一地域,請參見安裝Logtail(ECS實(shí)例)。其他情況,請參見安裝Logtail(Linux系統(tǒng))、安裝Logtail(Windows系統(tǒng))。
在采集非本賬號ECS、自建IDC或其他云廠商服務(wù)器日志時需要配置用戶標(biāo)識。
日志服務(wù)Project支持使用IP地址或用戶自定義標(biāo)識創(chuàng)建機(jī)器組。
創(chuàng)建Logtail采集配置
完成上述操作后,Logtail開始采集您服務(wù)器上的日志,并發(fā)送到對應(yīng)的Logstore中。您可以通過日志服務(wù)控制臺、API、SDK或CLI查詢?nèi)罩尽?/p>
核心概念
機(jī)器組:一個機(jī)器組包含一臺或多臺待采集同類日志的服務(wù)器。將Logtail采集配置應(yīng)用到機(jī)器組后,日志服務(wù)會根據(jù)Logtail采集配置采集機(jī)器組內(nèi)所有服務(wù)器上的日志。
日志服務(wù)通過機(jī)器組管理所有需要通過Logtail采集日志的服務(wù)器,支持通過IP地址或者用戶自定義標(biāo)識的方式定義機(jī)器組。您可以通過日志服務(wù)控制臺管理機(jī)器組(包括創(chuàng)建、刪除機(jī)器組,添加、移除機(jī)器等操作)。 更多信息,請參見什么是機(jī)器組。
Logtail:日志服務(wù)提供的日志采集Agent,運(yùn)行在待采集日志的服務(wù)器上。
Linux操作系統(tǒng):Logtail安裝在/usr/local/ilogtail目錄下,啟動兩個以ilogtail開頭的獨(dú)立進(jìn)程,一個為采集進(jìn)程,另外一個為守護(hù)進(jìn)程,程序運(yùn)行日志保存在/usr/local/ilogtail/ilogtail.LOG文件中。更多信息,請參見安裝Logtail(Linux系統(tǒng))。
Windows操作系統(tǒng)
Logtail(32位程序)
安裝在Windows 32位操作系統(tǒng)中時,對應(yīng)的安裝目錄為C:\Program Files\Alibaba\Logtail。
安裝在Windows 64位操作系統(tǒng)中時,對應(yīng)的安裝目錄為C:\Program Files (x86)\Alibaba\Logtail。
說明Windows 64位操作系統(tǒng)支持運(yùn)行32/64位應(yīng)用程序,但是出于兼容性考慮,在Windows 64位操作系統(tǒng)上,Windows會使用單獨(dú)的x86目錄來存放32位應(yīng)用程序。
Logtail(64位程序)
只支持安裝在Windows 64位操作系統(tǒng)中,對應(yīng)的安裝目錄為C:\Program Files\Alibaba\Logtail。
您可以通過
,查看LogtailDaemon服務(wù)(Logtail 1.0.0.0及以上版本)或LogtailWorker服務(wù)(Logtail 0.x.x.x版本),確認(rèn)Logtail的運(yùn)行狀態(tài)。程序運(yùn)行日志保存在安裝目錄下的ilogtail.LOG
文件中。更多信息,請參見安裝Logtail(Windows系統(tǒng))。
Logtail配置:Logtail采集日志的策略集合。通過在創(chuàng)建Logtail采集配置時設(shè)置數(shù)據(jù)源、采集模式等參數(shù),實(shí)現(xiàn)定制化的采集策略。Logtail采集配置定義了如何在服務(wù)器上采集同類日志并解析、發(fā)送到指定的日志服務(wù)Logstore上。
基本功能
功能 | 說明 |
實(shí)時采集日志 | 動態(tài)監(jiān)控日志文件,實(shí)時讀取、解析增量日志。日志從生成到發(fā)送到日志服務(wù)的延遲一般在3秒內(nèi)。更多信息,請參見Logtail采集詳情。 說明 Logtail不支持采集歷史日志,對于一條日志,讀取該日志的時間減去日志中記錄的時間,差值超過12小時會被丟棄。如果您要采集歷史日志文件,請參見導(dǎo)入歷史日志文件。 |
自動處理日志輪轉(zhuǎn) | 很多應(yīng)用會按照文件大小或者日期對日志文件進(jìn)行輪轉(zhuǎn)(rotation),把原日志文件重命名,并新建一個空日志文件等待寫入。例如:app.LOG文件,通過日志輪轉(zhuǎn)會生成 app.LOG.1、app.LOG.2 等。您可以指定采集日志寫入的文件,如app.LOG,Logtail會自動檢測到日志輪轉(zhuǎn)過程,保證這個過程中不會丟失日志數(shù)據(jù)。 |
多種采集輸入源 | Logtail除支持采集文本日志外,還支持syslog、http、MySQL binlog等數(shù)據(jù)源。更多信息,請參見數(shù)據(jù)采集概述。 |
兼容開源采集Agent | Logtail支持Logstash、Beats等開源軟件采集的數(shù)據(jù)作為數(shù)據(jù)源。更多信息,請參見數(shù)據(jù)采集概述。 |
自動處理采集異常 | 因?yàn)榉?wù)端錯誤、網(wǎng)絡(luò)措施、配額超限等各種異常導(dǎo)致數(shù)據(jù)發(fā)送失敗,Logtail會按場景主動重試。如果重試失敗則將數(shù)據(jù)寫入本地緩存,等待3秒自動重發(fā)。更多信息,請參見如何使用Logtail自動診斷工具。 |
靈活配置采集策略 | 可以通過Logtail采集配置非常靈活地采集日志。您可以根據(jù)實(shí)際場景指定日志目錄和文件,支持精確匹配,也支持通配符模糊匹配。您也可以自定義提取日志的方式和提取字段的名稱,日志服務(wù)支持通過正則表達(dá)式提取日志。 由于日志服務(wù)中的日志數(shù)據(jù)模型要求每條日志必須有精確的時間戳信息,Logtail提供了自定義的日志時間格式,方便您從不同格式的日志數(shù)據(jù)中提取必要的日志時間戳信息。 |
自動同步Logtail采集配置 | 您在日志服務(wù)控制臺上新建或更新Logtail采集配置,一般情況下,Logtail在3分鐘內(nèi)即可接收并生效。更新過程中不會丟失日志數(shù)據(jù)。 |
自我監(jiān)控狀態(tài) | Logtail會實(shí)時監(jiān)控自身CPU和內(nèi)存消耗,避免Logtail消耗您太多資源而影響您的其他服務(wù)。Logtail在運(yùn)行過程中,如果資源使用超出限制將會自動重啟,避免影響服務(wù)器上的其他服務(wù)。同時,Logtail有主動的網(wǎng)絡(luò)限流保護(hù)措施,防止過度消耗帶寬。更多信息,請參見啟動參數(shù)配置文件(ilogtail_config.json)。 |
簽名數(shù)據(jù)發(fā)送 | 為保證您的數(shù)據(jù)在發(fā)送過程中不會被篡改,Logtail會通過可信通道從服務(wù)端獲取私密Token,并對所有發(fā)送日志的數(shù)據(jù)包進(jìn)行數(shù)據(jù)簽名。 說明 Logtail在獲取私密Token時采用HTTPS通道,保障相關(guān)安全性。 |
數(shù)據(jù)采集可靠性
Logtail在采集日志時,定期將采集的點(diǎn)位(CheckPoint)信息保存到本地,如果遇到服務(wù)器意外關(guān)閉、進(jìn)程崩潰等異常情況時,Logtail重啟后會從上一次記錄的位置開始采集數(shù)據(jù),盡可能保證數(shù)據(jù)不丟失。Logtail會根據(jù)啟動參數(shù)配置文件中配置進(jìn)行工作,如果資源占用超過限定值5分鐘以上,則Logtail會強(qiáng)制重啟。重啟后可能會產(chǎn)生一定的數(shù)據(jù)重復(fù)。
Logtail內(nèi)部采用了很多機(jī)制提升日志采集可靠性,但并不能保證日志一定不會丟失。以下情況可能造成日志丟失:
Logtail未運(yùn)行且日志輪轉(zhuǎn)多次。
日志輪轉(zhuǎn)速度極快,例如1秒輪轉(zhuǎn)1次。
日志采集速度長期無法達(dá)到日志產(chǎn)生速度。