全部產品
Search
文件中心

Container Compute Service:通過AliyunLogConfig CRD方式採集應用日誌

更新時間:Mar 18, 2025

Container Compute Service (ACS)整合了阿里雲Log ServiceSLS。您可在建立叢集時啟用Log Service,快速採集ACS叢集的容器日誌,包括容器的標準輸出以及容器內的文字檔。本文介紹如何在ACS叢集中通過AliyunLogConfig CRD採集容器應用日誌。

步驟一:啟用Log Service組件

您可以在建立ACS叢集時勾選使用Log Service來自動啟用Log Service組件。若建立時未勾選,您也可以通過以下步驟為已有叢集啟用Log Service組件。

  1. 登入容器計算服務控制台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理組件管理

  3. 日誌與監控地區找到alibaba-log-controller。單擊安裝,並在安裝組件對話方塊中單擊確定

重要

如果您已安裝的alibaba-log-controller組件為舊版本,可以對組件進行升級。升級組件後,叢集會重設組件參數。如果您曾自訂alibaba-log-controller的配置和環境變數,參數將被覆蓋,請重新設定。

步驟二:建立AliyunLogConfig CRD日誌採集配置

AliyunLogConfig CRD支援採集特定應用的標準輸出日誌和檔案日誌。您可以通過叢集左側導覽列自訂資源 > 資源定義(CustomResourceDefinition) > 使用YAML建立資源來建立AliyunLogConfig CRD。AliyunLogConfig CRD的主要配置參數如下表所示。

配置參數

說明

樣本值

.metadata.name

日誌採集配置資源名,在當前ACS叢集內唯一。

test-stdout

.spec.project

可選配置,Project名稱。可自訂,推薦使用k8s-log-ACS叢集ID命名。

k8s-log-c326bc86****

.spec.logstore

必選配置,Logstore名稱。如果不存在,Log Service會自動建立。

test-stdout

.spec.logtailConfig.inputType

採集的資料來源類型,file表示檔案日誌,plugin表示標準輸出。

plugin

.spec.logtailConfig.configName

Logtail配置的名稱,必須與資源名metadata.name相同。

test-stdout

.spec.logtailConfig.inputDetail

Logtail配置的詳細資料。其中主要包括採集標準輸出日誌和採集檔案日誌等配置。

plugin:
  inputs:
    - type: service_docker_stdout
      detail:
        Stdout: true
        Stderr: true

表示採集容器的標準輸出Stdout和錯誤輸出Stderr

.spec.logtailConfig.inputDetail.advanced

Logtail配置的擴充功能。其中k8s配置主要包括:

  • K8sNamespaceRegex:Pod Namespace過濾,支援Regex。

  • K8sContainerRegex:容器名過濾,支援Regex。

  • K8sPodRegex:Pod名過濾,支援Regex。

  • IncludeK8sLabel:根據Pod labels匹配。

k8s:
  K8sNamespaceRegex: ^(default)$
  K8sContainerRegex: ^(busybox)$
  K8sPodRegex: ^backend.+$
  IncludeK8sLabel:
    app: backend
    application: prod

表示指定收集同時符合以下規則的容器日誌:

  • 命名空間名稱為default

  • Pod名稱以backend為開頭。

  • 容器名稱為busybox

  • 帶有標籤app: backendapplication: prod

關於更多配置參數的詳細說明,請參見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-stdouttest-file建立完成後,您可以先通過步驟四:通過Log Service控制台查看日誌查看是否已成功建立對應的日誌庫。若沒有,請結合Logtail配置重新檢查和修改配置項。

image

步驟三:建立樣本應用

建立日誌採集配置CRD後,Log Service會自動採集後續建立的Pod的日誌。您可以建立以下樣本應用來測試日誌採集的效果。

  1. 樣本應用以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控制台查看容器日誌。

  1. 登入Log Service控制台

  2. Project列表地區單擊ACS叢集對應的Project名(預設為k8s-log-{ACS叢集ID}),進入日誌庫列表頁簽。

  3. 在列表中單擊相應的Logstore(採集配置中指定)名稱,在頁面右側新開啟的標籤頁中查看對應的日誌資訊。

    本樣本中,在日誌查詢頁面,可以查看標準輸出日誌(test-stdout)和容器內檔案日誌(test-file)。

    image

    image

更多資訊

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