本文介紹在ACK Serverless叢集中,如何通過SLS CRD來配置日誌採集,實現通過阿里雲Log ServiceSLS自動採集容器日誌。
背景資訊
阿里雲Log ServiceSLS(Log Service)是針對日誌資料的一站式服務,您無需開發就能快捷完成日誌資料擷取、消費、投遞以及查詢分析等功能。更多資訊,請參見Log Service簡介。
前提條件
已開通Log Service。登入Log Service控制台時,如果沒有開通Log Service,將收到相關提示,您可以根據頁面提示開通。
注意事項
通過SLS CRD開啟日誌採集僅對後續建立的ECI Pod生效。如果想要採集存量Pod的日誌,需要對存量Pod進行一次滾動發布。
配置日誌採集
在叢集內部署alibaba-log-controller組件後,您可以通過日誌採集配置CRD(AliyunLogConfig CRD)來配置日誌採集。
部署alibaba-log-controller組件
在叢集頁面,單擊目的地組群名稱,進入叢集管理頁面。
在叢集中部署alibaba-log-controller組件。
在叢集管理頁左側導覽列,選擇營運管理>組件管理。
單擊日誌與監控頁簽,找到alibaba-log-controller卡片,然後單擊安裝。
在彈出的對話方塊中,單擊確定。
安裝完成後,alibaba-log-controller卡片右上方會顯示已安裝。
建立Logtail採集配置
串連ACK Serverless叢集。
編寫日誌採集配置CRD的YAML設定檔。
重要建立日誌採集配置CRD後,您可以在Log Service控制台查看產生的日誌庫及logtail配置。通過CRD方式建立的配置,在控制台上對其修改不會同步到CRD中。如果後續需要更新配置,請直接修改CRD資源,不要在控制台操作,避免導致配置不一致。
建立日誌採集配置CRD。
命令樣本如下。Logtail配置生效後,Logtail開始採集各個容器上的標準輸出或文本日誌,並發送到Log Service中。
kubectl apply -f log-file.yaml kubectl apply -f log-stdout.yaml
重要採集到日誌後,您需要先建立索引,才能在Logstore中查詢和分析日誌。具體操作,請參見建立索引。
測試日誌採集
建立日誌採集配置CRD後,Log Service會自動採集後續建立的Pod的日誌。您可以建立以下應用來測試日誌採集效果。
建立應用。
以Deployment為例,YAML內容樣本如下,樣本中容器啟動後會執行相關命令,不斷列印標準輸出和記錄檔。
apiVersion: apps/v1 kind: Deployment metadata: name: eci-sls-demo labels: app: sls spec: replicas: 1 selector: matchLabels: app: sls template: metadata: name: sls-test labels: app: sls alibabacloud.com/eci: "true" spec: containers: - args: - -c - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;done command: - /bin/sh image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/busybox:1.30 imagePullPolicy: Always name: busybox
將以上YAML儲存為test-sls-crd.yaml,執行以下命令建立應用。
kubectl create -f test-sls-crd.yaml
確認應用狀態。
kubetcl get pod
預期返回:
NAME READY STATUS RESTARTS AGE eci-sls-demo-7bf8849b9f-cgpbn 1/1 Running 0 2m14s
查看日誌。
單擊目標Project名稱。
找到目標日誌庫,單擊日誌庫名稱查看日誌。
文本日誌
標準輸出
關閉日誌採集
建立日誌採集配置CRD後,系統會自動採集所有合格Pod的日誌。對於一些不想要採集日誌的Pod,您可以配置Annotation(k8s.aliyun.com/eci-sls-enable: "false"
)來關閉日誌採集,避免系統自動建立Logtail而造成資源浪費。
Annotation請添加在Pod的metadata下,例如:建立Deployment時,Annotation需添加在spec>template>metadata下。
僅支援在建立ECI Pod時添加ECI相關Annotation來生效ECI功能,更新ECI Pod時添加或者修改ECI相關Annotation均不會生效。
配置樣本如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: eci-sls-demo2
labels:
app: sls
spec:
replicas: 1
selector:
matchLabels:
app: sls
template:
metadata:
name: sls-test
labels:
app: sls
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-sls-enable: "false" #關閉日誌採集
spec:
containers:
- args:
- -c
- mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;
done
command:
- /bin/sh
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
imagePullPolicy: Always
name: busybox