Logtail從入門到精通(一):日誌採集雜談
摘要: 目前logtail已承載阿里雲全站、所有雲產品服務、全球各Region部署、阿里巴巴集團(淘寶、天貓、菜鳥等)上重要服務的數據採集。每天採集接近百萬伺服器上數PB的實時數據,對接數千個應用與消費者。
什麼是日誌
提到日誌,很多人的第一印象就是系統打到本地的Log文件,出問題的時候看一下這個Log文件,用來排查問題。更進一步可以根據這個Log文件做實時的監控、第三方審計、入侵檢測、行為分析、數據大盤製作等等。
馬老師說過:阿里巴巴不是零售,我們是一家數據公司,為了數據才做電商、做物流、賣東西。我們認為日誌是記錄世間人和物所有行為的一種方式,是數據中極其重要又極其龐大的一個組成部分。會產生日誌的設備有:伺服器、交換機、手機、感測器、IOT設備、智能設備...產生的日誌類型有:網路的七層日誌、OS日誌、訂單日誌、支持日誌、GPS定位日誌、用戶點擊日誌...產生的日誌形式有:文本文件、二進位文件、syslog、udp日誌...如何充分利用這些日誌資源才是我們的核心技術和競爭力。
什麼是日誌採集
數據的價值是什麼?數據的價值在於把數據變成行動。這裡一個非常重要的過程是數據分析。提到數據分析,大部分人首先想到的都是Hadoop、流計算、機器學習等數據加工的方式。如果從整個過程來看,數據分析其實包含了4個過程:採集,存儲,計算和理解四個主要步驟:
- 採集:從各種產生數據的源頭,將數據集中到存儲系統。包括硬碟上的歷史數據、用戶網頁的點擊、感測器等等。
- 存儲:以各種適合計算的模式集中式存儲數據,其中既包含大規模的存儲系統(例如數倉),也有例如臨時的存儲(例如Kafka類消息中間件)。
- 計算:形態多種多樣,但大部分計算完成後會將結果再放入存儲,而這個過程也可能迭代多次。
- 理解:利用機器學習、可視化、通知等手段提煉出結論性或具有代表意義的數據並將結果呈現出來。
數據的採集是一門很大的範疇,從實時性上和每次傳輸數據規模上分,一般可以分為3類:
- 實時採集:例如access log、database change log等
- 定時任務:例如每隔5分鐘從FTP或數據源去批量導出數據
- 線下導數據:例如郵寄硬碟、AWS Snowmobile 卡車、阿里雲的閃電立方等從數據的價值以及體量上而言,實時數據採集毫無疑問最重要的,而其中最大的部分就是日誌實時採集。
為何使用Agent
實現日誌的實時採集一般有2種方式:
- 直接上傳:在應用程序(或依賴的框架)中將日誌直接上傳到服務端。例如各種日誌上傳的SDK、Log4j的appender、docker driver等
- 通過Agent採集:應用本身只產生日誌,由Agent作為代理採集到服務端。例如將日誌打到磁碟、syslog轉發、從中間框架(docker engine、mysql、應用自帶的monitor模塊)中抽取等
下面我們來詳細剖析一下二者區別:
從以上分析來看,兩種採集方式各有優缺點、也有各自適應的場景:
- 直采:適用於對性能/資源要求較高的場景,例如IOT/智能設備等對於資源要求極高,沒有額外的資源獨立部署採集Agent;例如負載均衡設備、CDN節點等日誌產生量極高(每秒數百MB或者數GB的日誌),只有直接上傳方能滿足性能要求
- Agent採集:只要應用可以將日誌輸出(以文件形式保存到磁碟、syslog等)或者支持通用的介面拉取,Agent即可將日誌採集到。大部分場景下松耦合、可擴展性、可維護性相比Agent額外開銷更具優勢
為何選用Logtail
日誌採集Agent有很多,例如Logstash、Fluentd、Beats系列(FileBeats、MetricBeats、Packetbeat、Winlogbeat、Auditbeat、Heartbeat)、Nxlog、Telegraf、Heka、Nifi、Logspout、Datadog agent、Sematext agent、Splunk addon系列、Sumologic collector。。。
業界有那麼多的Agent,每個Agent各種各樣的功能和特性看起來讓人眼花繚亂。但圍繞日誌採集這個最原始的需求展開,無非也就是功能、性能、穩定性、運維代價這4個方面:
- 功能:作為選擇Agent最基本需求,主要分為輸入源、數據處理(除日誌解析外,還包括過濾、壓縮等)、數據輸出。
- 性能:不同類型Agent之間會有數十倍的性能差距。當日誌產生速率較低且資源充足時,此項可以忽略;但大部分情況下採集Agent是作為整個集群的基礎軟體,在集群規模龐大的情況下,即使每台機器節省1%的CPU、10MB的內存也是很大一筆資金節省。
- 穩定性:穩定的重要性無需多言,除保證自身運行的穩定外,Agent還需保證不能超出限定的資源使用Quota,以免對應用產生影響。
- 運維代價:日誌採集的運維主要包括:Agent部署、動態伸縮、配置管理、Agent升級、Agent異常監控。當只有數台主機時,Agent可以使用人肉的方式進行管理,但當集群規模擴大到數百及以上時,運維必須依賴有效的機制。
阿里雲日誌服務也有自己的採集Agent--Logtail。目前logtail已承載阿里雲全站、所有雲產品服務、全球各Region部署、阿里巴巴集團(淘寶、天貓、菜鳥等)上重要服務的數據採集。每天採集接近百萬伺服器上數PB的實時數據,對接數千個應用與消費者。之所以使用Logtail作為採集Agent也是經過上述四個方面的綜合考慮。由於採集Agent數量眾多,這裡我們選擇目前最主流的3款Agent進行對比:
相對主流的採集Agent,Logtail在採集功能上有一定的不足,對於輸入源、處理方式等支持沒有開源軟體的多,但從目前的功能來看,可以滿足95%以上的日誌採集需求。但日誌採集並不是能夠採集到就可以。相對開源軟體,Logtail的優勢是有集團百萬伺服器、上萬應用的練兵環境,很多問題純粹從Agent和開源社區的角度並不會考慮到。因此經歷了數年的迭代優化,在性能、穩定性、運維代價上,Logtail相對更加成熟,在性價比上具有絕對的優勢。
原文鏈接
更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎
推薦閱讀:
※常用資源合集 | AE插件+腳本
※Sketch插件開發總結
※這個牛的碎片化效果是怎麼做出來的?
※基於MHA插件的MySQL高可用切換架構