Container Compute Service (ACS)整合了阿里雲Log ServiceSLS。您可在建立叢集時啟用Log Service,快速採集ACS叢集的容器日誌,包括容器的標準輸出以及容器內的文字檔。本文介紹如何在ACS叢集中通過AliyunLogConfig CRD採集容器應用日誌。
步驟一:啟用Log Service組件
您可以在建立ACS叢集時勾選使用Log Service來自動啟用Log Service組件。若建立時未勾選,您也可以通過以下步驟為已有叢集啟用Log Service組件。
登入容器計算服務控制台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理。
在日誌與監控地區找到alibaba-log-controller。單擊安裝,並在安裝組件對話方塊中單擊確定。
如果您已安裝的alibaba-log-controller組件為舊版本,可以對組件進行升級。升級組件後,叢集會重設組件參數。如果您曾自訂alibaba-log-controller的配置和環境變數,參數將被覆蓋,請重新設定。
步驟二:建立AliyunLogConfig CRD日誌採集配置
AliyunLogConfig CRD支援採集特定應用的標準輸出日誌和檔案日誌。您可以通過叢集左側導覽列自訂資源 > 資源定義(CustomResourceDefinition) > 使用YAML建立資源來建立AliyunLogConfig CRD。AliyunLogConfig CRD的主要配置參數如下表所示。
配置參數 | 說明 | 樣本值 |
| 日誌採集配置資源名,在當前ACS叢集內唯一。 | test-stdout |
| 可選配置,Project名稱。可自訂,推薦使用 | k8s-log-c326bc86**** |
| 必選配置,Logstore名稱。如果不存在,Log Service會自動建立。 | test-stdout |
| 採集的資料來源類型, | plugin |
| Logtail配置的名稱,必須與資源名 | test-stdout |
| Logtail配置的詳細資料。其中主要包括採集標準輸出日誌和採集檔案日誌等配置。 | 表示採集容器的標準輸出 |
| Logtail配置的擴充功能。其中
| 表示指定收集同時符合以下規則的容器日誌:
|
關於更多配置參數的詳細說明,請參見Logtail配置。
情境一:採集特定應用的標準輸出日誌
採集的日誌為標準輸出(包括錯誤輸出),在logtailConfig配置中的 detail 添加相關配置來匹配特定的Pod或容器,將下述配置下發到ACS叢集中即可完成標準輸出日誌的採集。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: test-stdout
spec:
project: k8s-log-c326bc86**** # 請修改為實際Project名稱
logstore: test-stdout
shardCount: 2
lifeCycle: 90
logtailConfig:
inputType: plugin
configName: test-stdout
inputDetail:
plugin:
inputs:
- type: service_docker_stdout
detail:
Stdout: true
Stderr: true
K8sNamespaceRegex: ^(default)$
K8sContainerRegex: ^(busybox)$
K8sPodRegex: ^backend.+$
IncludeK8sLabel:
app: backend
application: prod情境二:採集特定應用的檔案日誌
採集的日誌為檔案日誌,在logtailConfig配置中增加 advanced 配置來匹配特定的Pod或容器,將下述配置下發到ACS叢集中即可完成檔案日誌的採集。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: test-file
spec:
project: k8s-log-c326bc86**** # 請修改為實際Project名稱
logstore: test-file
logtailConfig:
inputType: file
configName: test-file
inputDetail:
logType: common_reg_log
logPath: /log/
filePattern: "*.log"
dockerFile: true
advanced:
k8s:
K8sNamespaceRegex: ^(default)$
K8sContainerRegex: ^(busybox)$
K8sPodRegex: ^backend.+$
IncludeK8sLabel:
app: backend
application: prod以上情境的AliyunLogConfig CRD test-stdout和test-file建立完成後,您可以先通過步驟四:通過Log Service控制台查看日誌查看是否已成功建立對應的日誌庫。若沒有,請結合Logtail配置重新檢查和修改配置項。

步驟三:建立樣本應用
建立日誌採集配置CRD後,Log Service會自動採集後續建立的Pod的日誌。您可以建立以下樣本應用來測試日誌採集的效果。
樣本應用以Deployment為例,YAML內容樣本如下。其中容器啟動後會執行相關命令,不斷列印標準輸出和記錄檔。
apiVersion: apps/v1 kind: Deployment metadata: name: backend-busybox labels: app: backend application: prod spec: replicas: 1 selector: matchLabels: app: backend application: prod template: metadata: name: backend-busybox labels: app: backend application: prod spec: containers: - args: - -c - mkdir -p /log; while true; do echo hello world; date; echo hello sls >> /log/busybox.log; sleep 1; done command: - /bin/sh image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 imagePullPolicy: Always name: busybox
步驟四:通過Log Service控制台查看日誌
完成配置後,樣本應用的日誌已被採集並儲存到Log ServiceSLS中,您可以在Log Service控制台查看容器日誌。
在Project列表地區單擊ACS叢集對應的Project名(預設為k8s-log-{ACS叢集ID}),進入日誌庫列表頁簽。
在列表中單擊相應的Logstore(採集配置中指定)名稱,在頁面右側新開啟的標籤頁中查看對應的日誌資訊。
本樣本中,在日誌查詢頁面,可以查看標準輸出日誌(test-stdout)和容器內檔案日誌(test-file)。


更多資訊
關於如何進行異常排查,請參見Logtail採集日誌失敗的排查思路。