知識中心

阿裏雲PB級Kubernetes日志平台建設實踐

2019-04-21 04:31:28 mimukeji

作者 | 元乙 編輯 | 張嬋 阿裏雲日志服務是阿裏集團針對日志分析、處理的自研產品。Kubernetes近兩年來發展十分迅速,已經成為容器編排領域的事實標准,但是Kubernetes中日志采集相對困難,本文介紹了阿裏雲Kubernetes日志平台是如何建設的。 背景

阿裏雲日志服務是阿裏集團針對日志分析、處理的自研產品,最根本的目的是讓用戶專注在“分析”上,遠離瑣碎的工作。日志服務整體功能分為3個部分:日志采集、智能查詢分析和數據分發。相比其他日志系統,阿裏雲日志服務有以下幾個特點:

采集范圍廣,支持30+種的數據采集通道,包括服務器、交換機、容器、移動端、IOT等各類設備;支持全球加速、斷點續傳等功能,使全球化數據高可靠采集成為可能。

數據規模大,支持單用戶日PB級數據寫入,提供數據通道橫向自動擴展能力,可根據數據流量進行自動擴容。

查詢能力強,提供SQL92標准的分析語法,秒級即可分析10億條數據,同時提供豐富的數據圖表,提供所見即所得的數據分析能力。

下遊渠道多,日志服務支持對接各類下遊的數據處理、分析系統,包括Flink、Storm、Spark等各類流計算系統,同時也支持Hadoop、MaxCompute等離線分析系統。

Kubernetes 日志采集難點

Kubernetes近兩年來發展十分迅速,已經成為容器編排領域的事實標准。

Kubernetes是一個大的生態系統,圍繞著Kubernetes我們需要去解決很多問題,例如CI/CD、可擴展性、安全性、可觀察性等等。日志是可觀察性中必不可少的一部分,而在Kubernetes中日志采集相對更加困難,難點主要體現在:

采集目標多,Kubernetes平台運行著多種系統組件以及眾多應用,這些日志由多種日志格式(分隔符、json、Java、Nginx等)和多種日志形式(宿主機文件、容器stdout、容器文件、syslog、journal等)組成,通常主流的Agent很難支持各種數據的采集。

環境動態性強,在Kubernetes中,各類服務都會進行自動的縮擴容,應用也會進行動態遷移,日志采集很難適應環境動態性強的系統,尤其是日志的完整性很難得到保證。

使用負擔大,隨著集群規模、使用人數、應用種類的逐漸增長,日志采集的集中式管理、采集可靠性的監控等需求就顯得尤其重要。更進一步,如何基於Kubernetes的擴展能力讓日志采集也能和Kubernetes資源一樣進行統一的管理?

阿裏雲 Kubernetes 日志平台的整體功能和核心技術

阿裏雲Kubernetes日志平台為Kubernetes日志提供接入、查詢、分析、可視化、下遊對接等日志分析整個生命周期的完整方案,並針對Kubernetes的組件日志提供通用的解決方案,例如審計日志、Ingress日志、系統組件日志等。這裏的核心技術主要有以下幾點:

全方位日志采集,能夠支持Kubernetes各類日志的實時采集,並兼顧低資源消耗、高性能、高可靠性。同時基於CRD擴展,實現采集與Kubernetes的無縫集成。

超大規模數據量,Kubernetes可輕松管理數萬台機器的集群,日數據量可能會達到數百TB甚至PB級,日志平台能夠支撐海量的數據規模,同時保證可擴展性和可靠性。

實時分析能力,日志最常用的場景是監控和問題調查,因此實時的查詢/分析能力尤其重要,平台能夠在秒級內實現對億級數據任意條件、任意維度組合的分析。

通用方案打通,基於日志平台的通用能力,對Kubernetes的通用方案進行整體封裝,並打通采集、存儲、分析、可視化、告警等整個流程,實現通用方案的開箱即用。

平台設計難點

阿裏雲在通用日志平台的建設方面有著10年的經驗,針對Kubernetes場景平台整體的複雜性增加很多,難點主要有:

支持各類采集需求,需支持采集多種日志形式和日志格式,不同的使用場景對日志采集的需求不同,需要保證數據采集具備高可靠、高性能、低資源占用、可監控的能力。

Kubernetes集成,日志的采集和管理需要和Kubernetes平台進行無縫兼容,因此需要提供CRD的擴展方式,尤其在多種方式同時操作、集群不可用等複雜場景下,CRD與服務端的同步與協調關系較難維護。

多租戶隔離,Kubernetes日志平台的使用方較多,平台需保證從日志采集、處理、查詢、消費等各個環節的多租戶隔離,不能讓部分用戶的大量請求或非法使用而導致整個集群不可用。

超大流量壓力,在阿裏內部,即使最大規格的VIP也無法承受所有日志的流量,雙11、春節紅包等流量高峰瞬間可能會打爆集群,因此減少數據回路、削峰填穀、降級方案、系統兜底方案等尤其重要。

日志數據的使用

Kubernetes中存在各種日志,包括內核日志、系統組件日志、Ingress、ServiceMesh、中間件、應用日志等,每種日志都會有不同人員在不同的場景中應用。例如APIServer的審計(Audit)日志,安全同學會用來做入侵檢測、賬號操作審計等,運維同學會基於審計日志做變更管理、核心組件監控、節點監控等,開發同學會使用審計日志檢查變更是否生效;例如Ingress的訪問日志,運營同學會用來做用戶行為分析、業務走勢分析、運營檢測等;運維同學會用來做集群/服務監控;開發同學會基於Ingress訪問日志進行發布前後的指標對比……

從日志平台角度來看,平台需要為不同的業務角色、不同的使用場景提供通用的數據處理/分析能力,包括但不限於:智能分析、鏈路跟蹤、監控、數據清洗、流計算、數據倉庫、安全分析、BI分析等。

Kubernetes 日志平台與可觀察性的關系

“可觀察性”(Observability)從電氣角度上的解釋是:“若所有的內部狀態都可以輸出到輸出信號,此系統即有可觀察性”。CNCF-Landscape首次將“可觀察性”(Observability)引入到了IT領域。可觀察性相關的工具主要包括Logging、Metric、Tracing叁大類,這叁者之間有很多重疊部分,從表現力上來看,Metrics最弱、Tracing其次、Logging最強。Metric主要記錄了一些聚合的指標信息,例如CPU/Mem利用率、請求成功率、請求延遲等;Tracing記錄從請求發起到響應完畢的整個流程;而日志相對范疇最大,日志記錄了系統運行期間所有的信息,而從日志的字段中可以聚合出Metric、從日志的RequestID中可以提取出整個Tracing鏈路。

在Kubernetes中,通常通過Metric發現問題,然後通過Tracing定位問題模塊,最後根據日志中的詳細信息診斷錯誤。而在阿裏雲Kubernetes日志平台中可通過智能分析的功能直接基於日志發現、定位並診斷問題,大大減少問題調查時間。智能分析的能力主要有:

日志聚類,根據日志的相似性進行智能歸類,秒級即可實現億級數據自動歸類,快速掌握日志整體狀態。

異常檢測,基於變點檢測、折點檢測、多周期檢測、時序聚類等機器學習方法,自動檢測時序中的異常。

日志模式對比,通過前後兩個時間段/版本的日志模式對比,快速發現當前時間/版本的日志差異。

知識庫匹配,將問題調查經驗以知識庫形式保存下來,將日志與知識庫內容進行匹配,快速得到具體日志對應的問題和解決方案。

阿裏雲 Kubernetes 日志平台的借鑒意義

阿裏雲Kubernetes日志平台建設過程中考慮的很多問題對於大家都有一定的借鑒意義,例如:

采集方案選擇,Kubernetes中采集通常會使用DaemonSet和Sidecar兩種方式,日志也會分為stdout和文件兩種形式,文件也分為容器內文件和宿主機掛載文件等不同方式,需根據業務場景特點選擇合適的日志采集方案。

平台高可用建設,隨著應用場景的逐漸擴展,對於日志平台的可用性要求也越來越高,我們在高可靠日志采集、日志平台自監控、異常自動屏蔽與恢複、高效運維等方面積累了很多寶貴的經驗與教訓。

生態對接,平台不可能實現日志生命周期中所需的所有系統和功能,很大一部分功能需要上下遊的生態來完成(例如流計算、離線計算、Trace系統、告警系統等),因此生態的對接成為了日志平台能夠覆蓋所有日志場景必不可少的一個部分。

性能與成本取舍,成本是每個公司都需要考慮的一點,通常日志的開銷只占IT支出的1-3%左右,日志的采集、存儲、查詢等各個環節需盡可能的節省資源,同時還需保證整體性能在可接受范圍內。


本文轉載自網絡,如有侵權,請聯系刪除。

本文轉載自網絡,如有侵權,請聯系我們刪除。