摘要: 今天阿里雲Kubernetes日誌解決方案再次升級,爲您帶來如下改進: 一、極致部署體驗:只需一條命令一個參數便可完成整個K8S集羣的日誌解決方案部署。 二、支持更多配置方式:除原生控制檯、SDK配置方式外,支持經過CRD方式進行配置(kubectl、控制檯、K8S openapi)。html
針對K8S日誌採集存在的採集目標多、彈性伸縮難、運維成本大、侵入性高、採集性能低等問題,在18年2月份日誌服務和容器服務團隊一塊兒發佈了阿里雲Kubernetes日誌解決方案。1分鐘內便可完成整個集羣部署,實現該節點上宿主機日誌、容器日誌、容器stdout等全部數據源的一站式採集。而且後續集羣動態伸縮無需對採集作任何二次部署。linux
今天阿里雲Kubernetes日誌解決方案再次升級,爲您帶來如下改進:golang
阿里雲的日誌服務(log service)是針對日誌類數據的一站式服務,2013年研發,有5年多線上運行經驗,經歷雙11、新春紅包等考驗。日誌採集Agent Logtail運行在100W+機器上,爲萬級別應用提供服務。主要特色以下:sql
日誌服務主要包括 實時採集與消費、數據投遞、查詢與實時分析 等功能,接下來咱們介紹下如何利用日誌服務進行Kubernetes日誌採集。
docker
阿里雲Kubernetes日誌採集方案如上圖所示:api
以CRD配置方式爲例,內部工做流程以下:服務器
kubectl
或其餘工具應用aliyunlogconfigs CRD配置。阿里雲Kubernetes用戶只需一條命令便可完成日誌採集部署,命令中只需輸入一個參數。網絡
${your_k8s_cluster_id}
替換爲您的Kubernetes集羣id,執行此命令。wget http://logtail-release.oss-cn-hangzhou.aliyuncs.com/linux64/alicloud-log-k8s-install.sh -O alicloud-log-k8s-install.sh; chmod 744 ./alicloud-log-k8s-install.sh; sh ./alicloud-log-k8s-install.sh ${your_k8s_cluster_id}
日誌採集配置默認支持控制檯配置方式,同時針對Kubernetes微服務開發模式,咱們還提供CRD的配置方式,您能夠直接使用kubectl對配置進行管理或集成到其餘編排服務。兩種配置方式特色以下:app
CRD方式 | 控制檯方式 | |
---|---|---|
操做複雜度 | 低 | 通常 |
功能項 | 支持除控制檯方式外的高級配置 | 通常 |
上手難度 | 通常 | 低 |
網絡鏈接 | 鏈接Kubernetes集羣 | 鏈接互聯網 |
與組件/應用部署集成 | 支持 | 不支持 |
鑑權方式 | Kubernetes鑑權 | 雲帳號鑑權 |
若是您剛開始使用日誌服務,建議使用控制檯的配置方式,此種方式所見即所得,很是易於上手。框架
若後續您須要將日誌採集與服務/組件發佈集成,建議使用CRD的配置方式。能夠直接將採集配置和服務配置放到同一個yaml文件部署和管理。
相比其餘採集方案,日誌服務Kubernetes採集方案具有如下優點:
在上一篇阿里雲Kubernetes日誌解決方案中咱們對容器數據採集、自定義標識機器組等技術作了相關的介紹。本次主要爲你們帶來日誌採集配置與K8S無縫集成的技術實現。
不一樣於其餘開源日誌採集Agent,日誌服務Logtail從設計之初就已經考慮到配置管理的難題。所以Logtail從第一個版本發佈就支持中心化的配置管理。支持在日誌服務控制檯或者SDK遠程對全部採集配置進行統一管理,大大下降了日誌採集的管理負擔。
但在K8S集羣環境下,業務應用/服務/組件的持續集成和自動發佈已經成爲常態,使用控制檯或SDK操做採集配置的方式很難與各種CI、編排框架集成,致使業務應用發佈後用戶只能經過控制檯手動配置的方式部署與之對應的日誌採集配置。
所以日誌服務專門爲K8S進行了擴展,用以支持原始的配置管理。
如上圖所示,日誌服務爲K8S新增了一個CustomResourceDefinition擴展,名爲AliyunLogConfig
。同時開發了alibaba-log-controller
用於監聽AliyunLogConfig
事件。
當用戶建立/刪除/修改AliyunLogConfig
資源時,alibaba-log-controller
會監聽到資源變化,並對應的在日誌服務上建立/刪除/修改相應的採集配置。以此實現K8S內部AliyunLogConfig
與日誌服務中採集配置的關聯關係。
alibaba-log-controller
主要由6個模塊組成,各個模塊的功能以及依賴關係如上圖所示:
EventListener:負責監聽AliyunLogConfig
的CRD資源。這個EventListener是廣義上的listener,主要功能有
AliyunLogConfig
資源AliyunLogConfig
監聽變化的事件AliyunLogConfig
資源防止事件出現遺漏或處理失效EventHandler:負責處理對應的Create/Update/Delete事件,做爲Controller的核心模塊,主要功能以下:
AliyunLogConfig
資源的狀態ConfigMapManager:依賴於K8S的ConfigMap機制實現Controller的checkpoint管理,包括:
LogSDKWrapper:基於阿里雲LOG golang sdk的二次封裝,功能包括:
ScheduledSyner:後臺的按期同步模塊,防止進程/節點失效期間配置改動而遺漏事件,保證配置管理的最終一致性:
AliyunLogConfig
AliyunLogConfig
資源的映射關係,若是checkpoint中出現不存在的配置,則刪除對應的資源Monitor:alibaba-log-controller
除了將本地運行日誌輸出到stdout外,還會將日誌直接採集到日誌服務,便於遠程排查問題。採集日誌種類以下:
alibaba-log-controller
運行日誌alibaba-log-controller
內部異常數據(自動聚合)阿里雲日誌服務本次帶來的提高更進一步簡化了K8S日誌採集的上手門檻以及集成體驗。讓廣大用戶真正體驗到一個字:爽,今後日誌運維人員的生活質量大大提升。
目前Logtail除支持宿主機文件、容器文件、容器stdout採集外,還支持如下多種採集方式(這些方式k8s中均支持):