阿里雲Log ServiceSLS(Log Service)是針對日誌資料的一站式服務,讓您無需開發就能快捷完成日誌資料擷取、消費、投遞以及查詢分析等功能。ACK Serverless叢集提供了Log Service託管功能。本文介紹如何在ACK Serverless叢集中配置CRD並進行應用日誌採集管理。
前提條件
已建立ACK Serverless叢集。具體操作,請參見建立叢集。
已安裝ACK Virtual Node組件,且版本≥2.7.0。關於ACK Virtual Node的更多資訊,請參見ACK Virtual Node。
注意事項
通過SLS CRD開啟日誌採集僅對後續建立的ECI Pod生效。如果想要採集存量Pod的日誌,需要對存量Pod進行一次滾動發布。
配置日誌採集
在叢集內部署alibaba-log-controller組件後,您可以通過日誌採集配置CRD(AliyunLogConfig CRD)來配置日誌採集。
在叢集頁面,單擊目的地組群名稱,進入叢集管理頁面。
在叢集中部署alibaba-log-controller組件。
在叢集管理頁左側導覽列,選擇營運管理>組件管理。
單擊日誌與監控頁簽,找到alibaba-log-controller卡片,然後單擊安裝。
在彈出的對話方塊中,單擊確定。
安裝完成後,alibaba-log-controller卡片右上方會顯示已安裝。
建立日誌採集配置CRD。
說明建立日誌採集配置CRD後,您可以在Log Service控制台查看產生的日誌庫及logtail配置。如果後續需要更新配置,可以直接編輯CRD,系統將自動同步配置到Log Service。
參考樣本編寫日誌採集配置CRD的YAML設定檔。
採集的日誌分為標準輸出(包括錯誤輸出)和檔案日誌兩種。詳細參數說明請參見Logtail配置。
標準輸出CRD YAML樣本
將以下內容儲存為log-stdout.yaml。
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: name: test-stdout #資源名,在當前Kubernetes叢集內唯一。 spec: project: k8s-log-c326bc86**** #可選配置,Project名稱,可自訂,推薦使用[k8s-log-叢集ID]命名 logstore: test-stdout #必選配置,Logstore名稱,如果不存在,Log Service會自動建立 shardCount: 2 #可選配置,Shard數量,預設為2,取值範圍為1~10 lifeCycle: 90 #可選配置,Logstore中日誌保留時間,單位為天,該參數值僅在建立Logstore時生效。預設為90,取值範圍為1~3650。3650表示持續保留 logtailConfig: #Logtail配置 inputType: plugin #採集的資料來源類型,file表示檔案日誌,plugin表示標準輸出 configName: test-stdout #Logtail配置的名稱,必須與資源名(metadata.name)相同 inputDetail: #Logtail配置的詳細資料 plugin: inputs: - type: service_docker_stdout detail: Stdout: true Stderr: true # IncludeEnv: # aliyun_logs_test-stdout: "stdout"
檔案日誌CRD YAML樣本
將以下內容儲存為log-file.yaml。
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: name: test-file #資源名,在當前Kubernetes叢集內唯一。 spec: project: k8s-log-c326bc86**** #可選配置,Project名稱,可自訂,推薦使用[k8s-log-叢集ID]命名 logstore: test-file #必選配置,Logstore名稱,如果不存在,Log Service會自動建立 logtailConfig: #Logtail配置 inputType: file #採集的資料來源類型,file表示檔案日誌,plugin表示標準輸出 configName: test-file #Logtail配置的名稱,必須與資源名(metadata.name)相同 inputDetail: #Logtail配置的詳細資料 logType: common_reg_log #對於分隔字元類型的日誌,logType可以設定為json_log logPath: /log/ #記錄檔夾 filePattern: "*.log" #檔案名稱, 支援萬用字元,例如log_*.log dockerFile: true #採集容器內的檔案,dockerFile設定為true #用作解析時間的key'' #timeKey: 'time' #時間解析方式'' #timeFormat: '%Y-%m-%dT%H:%M:%S' #避免不同採集配置中存在相同採集目錄而導致衝突 #dockerIncludeEnv: # aliyun_logs_test-file: "/log/*.log"
執行以下命令建立日誌採集配置CRD。
kubectl create -f log-stdout.yaml kubectl create -f log-file.yaml
測試日誌採集
建立日誌採集配置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
查看日誌。
單擊目標Projcect名稱。
找到目標日誌庫,單擊日誌庫名稱查看日誌。
標準輸出
檔案日誌
關閉日誌採集
建立日誌採集配置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