全部產品
Search
文件中心

Container Service for Kubernetes:採集ACK叢集容器日誌(DaemonSet方式部署日誌採集)

更新時間:Sep 24, 2025

ACK叢集與阿里雲Log ServiceSLS深入整合,通過提供日誌採集組件來簡化容器日誌的收集和管理。本文介紹如何安裝日誌採集組件並完成日誌採集配置,包括日誌的自動採集、查詢和分析,以提升營運效率,降低管理成本。

情境指引

日誌採集組件可通過以下兩種方式來採集容器日誌。

關於兩種方式的差異,請參見採集方式,關於Log Service計費詳情,請參見計費概述

索引

操作步驟

操作鏈結接

步驟一:安裝日誌採集組件

在以下兩個日誌採集組件中選擇一個進行安裝。

  • 安裝LoongCollector(推薦)

    LoongCollector是SLS推出的新一代採集Agent,是Logtail的升級版。
  • 安裝Logtail

    Logtail組件是用於採集Kubernetes日誌的Agent,支援多種日誌類型及標準容器和Kubernetes叢集的日誌資料擷取。

步驟二:建立採集配置

根據採集需求選擇文本日誌或標準輸出。

  • 採集文本日誌

    文本日誌是由容器內的程式產生並儲存到指定目錄下的記錄檔,適用於需要對指定目錄下的記錄檔長期分析或故障排查等情境。
  • 採集標準輸出

    標準輸出(stdout)是容器內程式在運行時產生的即時日誌,適用於程式調試和快速定位問題等情境。

步驟三:查詢分析日誌

通過控制台進行日誌查詢與分析。

步驟一:安裝日誌採集組件

安裝LoongCollector(推薦)

LoongCollector(原Logtail):Logtail是Log Service提供的日誌採集Agent,用於採集阿里雲ECS、自建IDC或其他雲廠商等伺服器上的日誌。Logtail基於記錄檔採集,無需修改應用程式代碼,且採集日誌不會影響應用程式運行。LoongCollector是Log Service推出的新一代採集Agent,是Logtail的升級版,相容Logtail的同時效能更佳。

已有的ACK叢集中安裝loongcollector組件

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

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

  3. 日誌與監控頁簽中,找到 loongcollector,然後單擊安裝

    說明

    LoongCollector組件和logtail-ds組件不能同時存在。如果叢集之前已經安裝logtail-ds組件,升級方案請參見Logtail升級到LoongCollector

安裝完成後,Log Service會自動產生名為k8s-log-${your_k8s_cluster_id}的Project,並在該Project下產生如下資源,您可登入Log Service控制台查看

資源類型

資源名稱

作用

樣本

機器組

k8s-group-${your_k8s_cluster_id}

loongcollector-ds的機器組,主要用於日誌採集情境。

k8s-group-my-cluster-123

k8s-group-${your_k8s_cluster_id}-cluster

loongcollector-cluster的機器組,主要用於指標採集情境。

k8s-group-my-cluster-123-cluster

k8s-group-${your_k8s_cluster_id}-singleton

單一實例機器組,主要用於部分單一實例採集配置。

k8s-group-my-cluster-123-singleton

Logstore

config-operation-log

用於採集和儲存loongcollector-operator組件日誌。

重要

請勿刪除名為config-operation-log的Logstore。

config-operation-log

安裝Logtail

Logtail採集:Logtail是Log Service提供的日誌採集Agent,用於採集阿里雲ECS、自建IDC或其他雲廠商等伺服器上的日誌。Logtail基於記錄檔,無侵入式採集日誌。您無需修改應用程式代碼,且採集日誌不會影響您的應用程式運行。

已有的ACK叢集中安裝Logtail組件

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

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

  3. 日誌與監控頁簽中,找到logtail-ds,然後單擊安裝。如未找到logtail-ds組件,請安裝LoongCollector組件

    LoongCollector組件為logtail-ds組件的升級版,兩個組件不能同時存在,推薦使用LoongCollector組件。

建立ACK叢集時安裝Logtail組件

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 單擊建立叢集,在組件配置頁面,選中使用Log Service

    本文只描述Log Service相關配置,關於更多配置項說明,請參見建立ACK託管叢集

    當選中使用Log Service後,會出現建立專案(Project)的提示。

    • 使用已有Project

      可選擇一個已有的Project來管理採集到的容器日誌。

      安裝logtail組件

    • 建立新Project

      Log Service自動建立一個Project來管理採集到的容器日誌。其中ClusterID為建立的Kubernetes叢集的唯一標識。

      安裝logtail組件

重要

組件配置頁中,預設開啟控制面組件日誌,開啟此配置會在Project中自動設定並採集叢集控制面組件日誌並遵循隨用隨付,因此請根據自身情況選擇是否需要開啟,相關資訊請參考管理控制面組件日誌image

安裝完成後,自動產生名為k8s-log-<YOUR_CLUSTER_ID>的Project,並在該Project下產生如下資源,可登入Log Service控制台查看資源。

資源類型

資源名稱

作用

樣本

機器組

k8s-group-<YOUR_CLUSTER_ID>

logtail-daemonset的機器組,主要用於日誌採集情境。

k8s-group-my-cluster-123

k8s-group-<YOUR_CLUSTER_ID>-statefulset

logtail-statefulset的機器組,主要用於指標採集情境。

k8s-group-my-cluster-123-statefulset

k8s-group-<YOUR_CLUSTER_ID>-singleton

單一實例機器組,主要用於部分單一實例採集配置。

k8s-group-my-cluster-123-singleton

Logstore

config-operation-log

用於儲存Logtail組件中的alibaba-log-controller日誌。建議不要在此Logstore下建立採集配置。該Logstore可以刪除,刪除後不會再採集alibaba-log-controller的作業記錄。該Logstore的收費標準和普通的Logstore收費標準是一致的,具體請參見按寫入資料量計費模式計費項目

步驟二:建立採集配置

採集文本日誌

以下為四種採集配置方式。建議只使用一種方法管理日誌採集配置:

配置方式

配置說明

情境適用

(推薦)CRD-AliyunPipelineConfig

通過K8s CRD管理日誌採集配置。

適用於需要複雜採集和處理需求以及在ACK叢集中確保日誌與應用版本一致性的情境。

CRD-AliyunLogConfig

舊版CRD管理方式。

支援已知情境的舊版管理方式。

需要逐漸遷移到新版本CRD-AliyunPipelineConfig以享受更好的擴充性和穩定性。兩類CRD採集方式對比請參見CRD類型

Log Service控制台

圖形化介面直接管理,快速部署配置。

適合少量採集配置的建立和管理,部分進階功能和自訂需求無法通過實現。

環境變數

通過環境變數快速配置日誌參數。

進行簡單配置調整,不支援複雜處理邏輯,僅支援單行文本日誌。可滿足以下定製需求:

  • 將多個應用資料擷取到同一Logstore。

  • 將不同應用資料擷取到不同的Project。

說明

當使用(推薦)CRD-AliyunPipelineConfig配置方式時,需要logtail-ds組件版本高於1.8.10。升級詳情請參見升級Logtail latest版本。對於LoongCollector組件,則無版本限制。

CRD-AliyunPipelineConfig(推薦)

您只需要建立AliyunPipelineConfig自訂資源即可建立採集配置,資源建立完成後自動生效。

重要

對於通過自訂資源建立的採集配置,其修改只能通過更新相應的自訂資源來實現,在Log Service控制台上對採集配置的修改不會同步到自訂資源中。

  1. 登入Container Service管理主控台

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 自訂資源

  3. 自訂資源頁面,單擊資源定義(CustomResourceDefinition)頁簽,然後單擊使用YAML建立資源

  4. 根據實際情況修改以下樣本YAML的參數,將其複製並粘貼到模板中,然後單擊建立完成操作。

    該樣本YAML以多行文字模式採集default命名空間下,標籤為app: ^(.*test.*)$的Pod中/data/logs/app_1路徑下的test.LOG檔案內容,並將其發送到名為k8s-log-<YOUR_CLUSTER_ID>的Project中的名為k8s-file(自動建立)的Logstore。您需根據實際情況修改YAML中的以下參數:

    1. project,樣本:k8s-log-<YOUR_CLUSTER_ID>

      登入Log Service控制台確定您安裝的日誌採集組件產生的Project的名稱。

    2. IncludeK8sLabel,樣本:app: ^(.*test.*)$。用於篩選目標Pod的標籤,當前條件指定標籤鍵為app,值中包含test的Pod會被採集。

      說明

      如果需要採集叢集中名稱包含test的所有Pod,可以將IncludeK8sLabel替換為K8sContainerRegex,並使用萬用字元配置值,如:K8sContainerRegex: ^(.test.)$

    3. FilePaths,樣本:/data/logs/app_1/**/test.LOG。更多詳情請參見容器檔案路徑映射

    4. Endpoint訪問網域名稱)和Region(地區ID),樣本:cn-hangzhou.log.aliyuncs.comcn-hangzhou

    有關YAML檔案中config項的詳情,包括支援的輸入、輸出、處理外掛程式類型和容器過濾方式,請參見PipelineConfig。完整的YAML參數詳情請參見CR參數說明

    apiVersion: telemetry.alibabacloud.com/v1alpha1
    kind: ClusterAliyunPipelineConfig
    metadata:
      # 設定資源名,在當前Kubernetes叢集內唯一。該名稱也是建立出的採集配置名,如果名稱重複則不會生效。
      name: example-k8s-file
    spec:
      # 指定目標Project
      project:
        name: k8s-log-<YOUR_CLUSTER_ID>
      logstores:
        # 建立名為 k8s-file的Logstore
        - name: k8s-file
      # 定義採集配置
      config:
        # 日誌範例(可不填寫)
        sample: |
          2024-06-19 16:35:00 INFO test log
          line-1
          line-2
          end
        # 定義輸入外掛程式
        inputs:
          # 使用input_file外掛程式採集容器內多行文本日誌
          - Type: input_file
            # 容器內的檔案路徑
            FilePaths:
              - /data/logs/app_1/**/test.LOG
            # 啟用容器發現功能。
            EnableContainerDiscovery: true
            # 添加容器資訊過濾條件,多個選項之間為“且”的關係。
            CollectingContainersMeta: true
            ContainerFilters:
              # 指定待採集容器所在 Pod 所屬的命名空間,支援正則匹配。
              K8sNamespaceRegex: default
              # 指定待採集容器的名稱,支援正則匹配。
              IncludeK8sLabel:
                app: ^(.*app.*)$
            # 開啟多行日誌採集,單行日誌採集請刪除該配置
            Multiline:
              # 選擇自訂行首Regex模式
              Mode: custom
              # 配置行首Regex
              StartPattern: '\d+-\d+-\d+\s\d+:\d+:\d+'
        # 定義處理外掛程式
        processors:
          # 使用正則解析外掛程式解析日誌
          - Type: processor_parse_regex_native
            # 源欄位名
            SourceKey: content
            # 解析用的Regex,用擷取的群組"()"捕獲待提取的欄位
            Regex: (\d+-\d+-\d+\s\S+)(.*)
            # 提取的欄位列表
            Keys: ["time", "detail"]
        # 定義輸出外掛程式
        flushers:
          # 使用flusher_sls外掛程式輸出到指定Logstore。
          - Type: flusher_sls
            # 需要確保該 Logstore 存在
            Logstore: k8s-file
            # 需要確保 endpoint 正確
            Endpoint: cn-beijing.log.aliyuncs.com
            Region: cn-beijing
            TelemetryType: logs

CRD-AliyunLogConfig

您只需要建立AliyunLogConfig自訂資源即可建立採集配置,建立完成後自動生效。

重要

對於通過自訂資源建立的採集配置,其修改只能通過更新相應的自訂資源來實現,在Log Service控制台上對採集配置的修改不會同步到自訂資源中。

  1. 登入Container Service管理主控台

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 自訂資源

  3. 自訂資源頁面,單擊資源定義(CustomResourceDefinition)頁簽,然後單擊使用YAML建立資源

  4. 根據實際情況修改以下樣本YAML的參數,將其複製並粘貼到模板中,然後單擊建立完成操作。

    該樣本YAML將建立名為example-k8s-file的採集配置,並對叢集內名稱開頭為app的所有容器,以極簡文字模式採集/data/logs/app_1路徑下的test.LOG檔案內容,發送到名為k8s-log-<YOUR_CLUSTER_ID>的Project中的名為k8s-file(自動建立)的Logstore。

    您需根據實際情況修改樣本中容器內檔案路徑,更多詳情請參見容器檔案路徑映射

    • logPath:採集日誌路徑。樣本:/data/logs/app_1

    • filePattern:採集記錄檔名稱。樣本:test.LOG

    有關YAML檔案中的Config項提供的配置詳情,如支援的輸入,輸出,處理外掛程式類型與容器過濾方式等,請參見AliyunLogConfigDetail,完整的YAML參數詳情請參見CR參數說明

    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      # 設定資源名,在當前Kubernetes叢集內唯一。
      name: example-k8s-file
      # 設定資源所在命名空間。
      namespace: kube-system
    spec:
      # 設定目標project名稱(可不填寫,預設為k8s-log-<your_cluster_id>)
      # project: k8s-log-test
      # 設定Logstore名稱。如果您所指定的Logstore不存在,Log Service會自動建立。
      logstore: k8s-file
      # 設定採集配置。
      logtailConfig:
        # 設定採集的資料來源類型。採集文本日誌時,需設定為file。
        inputType: file
        # 設定採集配置的名稱,必須與metadata.name一致。
        configName: example-k8s-file
        inputDetail:
          # 指定通過極簡模式採集文本日誌。
          logType: common_reg_log
          # 設定記錄檔所在路徑。
          logPath: /data/logs/app_1
          # 設定記錄檔的名稱。支援萬用字元星號(*)和半形問號(?),例如log_*.log。
          filePattern: test.LOG
          # 採集容器的文本日誌時,需設定dockerFile為true。
          dockerFile: true
          # 開啟多行日誌採集。單行日誌採集刪除該配置
          # 行首Regex,以該正則表示一行日誌的開始。
          logBeginRegex: \d+-\d+-\d+.*
          #設定容器過濾條件。
          advanced:
            k8s:
              K8sPodRegex: '^(app.*)$'

Log Service控制台

說明

此方式適合少量採集配置的建立和管理,無需登入Kubernetes叢集,操作步驟簡單但無法大量設定。

  1. 登入Log Service控制台

  2. 選擇Project列表中您在安裝日誌採集組件時所使用的Project,如k8s-log-<YOUR_CLUSTER_ID>。在Project頁面中單擊目標Logstore的Logtail配置,添加採集配置,並單擊Kubernetes-檔案立即接入image

  3. 機器組配置頁面K8s情境的ACK Daemonset方式下勾選k8s-group-${your_k8s_cluster_id}機器組並單擊image添加到應用機器組,單擊下一步image

  4. 建立採集配置,按下文填寫必須配置後單擊下一步即可,採集配置生效大概需要1分鐘,請耐心等待。此處僅介紹主要配置,詳細配置請參見Logtail採集配置

    • 全域配置

      全域配置中輸入配置名稱。

      image

    • 輸入配置

      • Logtail部署模式:選擇Daemonset

      • 檔案路徑類型:選擇待採集的檔案路徑是容器內路徑或宿主機路徑。對於通過hostPath方式掛載資料卷的容器,如果您希望直接採集其在宿主機上映射的記錄檔,請選擇宿主機路徑,其餘情況請選擇容器內路徑。

      • 檔案路徑:代表日誌採集的路徑,日誌路徑必須以正斜線(/)開頭,例如下圖/data/wwwlogs/main/**/*.Log表示/data/wwwlogs/main目錄下尾碼名為.Log的檔案。如果需要設定日誌目錄被監控的最大深度,即檔案路徑中萬用字元**匹配的最大目錄深度。可以修改最大目錄監控深度的取值,0代表只監控本層目錄。image

  5. 建立索引預覽資料:Log Service預設開啟全文索引,此時查詢會索引日誌中所有欄位。您也可以根據採集到的日誌,手動建立欄位索引,或者單擊自動產生索引,Log Service將產生欄位索引,通過此索引針對特定欄位進行精確查詢,從而減少索引費用和提高查詢效率。更多資訊請參見建立索引image

環境變數

說明

此方式僅支援單行文本,如果要配置多行文本或其他日誌格式,必須使用自訂資源方式或在Log Service控制台配置。

  1. 建立應用時配置Log Service。

    通過容器控制台配置
    1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

    3. 無狀態頁面,單擊使用鏡像建立

    4. 應用基本資料頁簽,設定應用程式名稱,單擊下一步,進入容器配置頁面,設定鏡像名稱。

      以下僅介紹Log Service相關的配置。關於其他的應用配置,請參見建立無狀態工作負載Deployment

    5. 日誌配置地區,配置日誌相關資訊。

      1. 設定採集配置。

        單擊採集配置建立新的採集配置,每個採集配置由日誌庫容器內日誌路徑(可設定為stdout)兩項構成。

        • 日誌庫:配置Logstore名稱,用於指定所採集的日誌儲存於該Logstore。如果該Logstore不存在,ACK將會自動為叢集關聯的Log ServiceProject下建立相應的Logstore。

          說明

          新建立的Logstore中的日誌預設儲存時間為90天。

        • 容器內日誌路徑(可設定為stdout):指定希望採集的日誌所在的路徑,例如使用/usr/local/tomcat/logs/catalina.*.log來採集Tomcat的文本日誌。 image

          每一項採集配置都會被自動建立為對應Logstore的一個採集配置,預設採用極簡模式(按行)進行採集。

      2. 設定自訂Tag。

        單擊自訂Tag建立新的自訂Tag,每一個自訂Tag都是一個索引值對,會拼接到所採集到的日誌中,可使用它來為容器的日誌資料進行標記,例如版本號碼。 image

    通過YAML模板
    1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

    3. 無狀態頁面上方的命名空間下拉框中設定命名空間,然後單擊頁面右上方的使用YAML建立資源

    4. 配置YAML檔案。

      YAML模板的文法同Kubernetes文法,但是為了給容器指定採集配置,需要使用env來為容器增加採集配置和自訂Tag,並根據採集配置,建立對應的volumeMountsvolumes。以下是一個簡單的Pod樣本:

      apiVersion: v1
      kind: Pod
      metadata:
        name: my-demo
      spec:
        containers:
        - name: my-demo-app
          image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
          env:
          # 配置環境變數
          - name: aliyun_logs_log-varlog
            value: /var/log/*.log
          - name: aliyun_logs_mytag1_tags
            value: tag1=v1
          # 配置volume mount
          volumeMounts:
          - name: volumn-sls-mydemo
            mountPath: /var/log
          # 如果Pod不斷重啟,啟動參數可以添加sleep
          command: ["sh", "-c"]  # 使用 shell 來運行命令
          args: ["sleep 3600"]   # 設定休眠時間為 1 小時(3600 秒)
        volumes:
        - name: volumn-sls-mydemo
          emptyDir: {}
      1. 通過環境變數來建立採集配置和自訂Tag,所有與配置相關的環境變數都採用aliyun_logs_作為首碼。

        • 建立採集配置的規則如下:

          - name: aliyun_logs_log-varlog
            value: /var/log/*.log                        

          樣本中建立了一個採集配置,格式為aliyun_logs_{key},對應的{key}log-varlog

          • aliyun_logs_log-varlog:該env表示建立一個Logstore名為log-varlog,日誌採集路徑為/var/log/*.log的配置,對應的Log Service採集配置名稱也是log-varlog,目的是將容器的/var/log/*.log檔案內容採集到log-varlog這個Logstore中。

        • 建立自訂Tag的規則如下:

          - name: aliyun_logs_mytag1_tags
            value: tag1=v1                       

          配置Tag後,當採集到該容器的日誌時,會自動附加對應的欄位到Log Service。其中mytag1任意不包含'_'的名稱

      2. 如果採集配置中指定了非stdout的採集路徑,需要在此部分建立相應的volumeMounts

        樣本中採集配置添加了對/var/log/*.log的採集,因此相應地添加了/var/log的volumeMounts

    5. 當YAML編寫完成後,單擊建立,即可將相應的配置交由Kubernetes叢集執行。

  2. 配置環境變數的進階參數。

    通過容器環境變數配置採集支援多種配置參數。您可以根據實際需求設定進階參數,以滿足日誌採集的特殊需求。

    重要

    通過容器環境變數配置採集日誌的方式不適用於邊緣情境。

    欄位

    說明

    樣本

    注意事項

    aliyun_logs_{key}

    • 必選項。{key}只能包含小寫字母、數字和-。

    • 若不存在aliyun_logs_{key}_logstore,則預設建立並採集到名為{key}的logstore。

    • 當值為stdout時表示採集容器的標準輸出;其他值為容器內的日誌路徑。

    • - name: aliyun_logs_catalina
      
        value: stdout
    • - name: aliyun_logs_access-log
      
        value: /var/log/nginx/access.log
    • 預設採集方式為極簡模式。如需解析日誌內容,建議使用Log Service控制台,或者CRD進行配置。

    • {key}表示Log Service中LoongCollector採集配置的名稱,需保持在K8s叢集內唯一。

    aliyun_logs_{key}_tags

    可選。值為{tag-key}={tag-value}類型,用於對日誌進行標識。

    - name: aliyun_logs_catalina_tags
    
      value: app=catalina

    不涉及。

    aliyun_logs_{key}_project

    可選。值為指定的Log ServiceProject。當不存在該環境變數時,為您安裝時所選的Project。

    - name: aliyun_logs_catalina_project
    
      value: my-k8s-project

    Project需與您的LoongCollector工作所在的Region一致。

    aliyun_logs_{key}_logstore

    可選。值為指定的Log ServiceLogstore。當不存在該環境變數時,Logstore和{key}一致。

    - name: aliyun_logs_catalina_logstore
    
      value: my-logstore

    不涉及。

    aliyun_logs_{key}_shard

    可選。值為建立Logstore時的shard數,取值範圍為[1 , 10]。當不存在該環境變數時,值為2。

    說明

    若logstore已經存在,則該參數不生效。

    - name: aliyun_logs_catalina_shard
    
      value: '4'

    不涉及。

    aliyun_logs_{key}_ttl

    可選。值為指定的日誌儲存時間,取值範圍為[1 , 3650]。

    • 當取值為3650時,指定日誌的儲存時間為永久儲存。

    • 當不存在該環境變數時,預設指定日誌的儲存時間為90天。

    說明

    若Logstore已經存在,則該參數不生效。

    - name: aliyun_logs_catalina_ttl
    
      value: '3650'

    不涉及。

    aliyun_logs_{key}_machinegroup

    可選。值為應用的機器組。當不存在該環境變數時與安裝LoongCollector的預設機器組一致。關於該參數的詳細使用方法,請參見下文的採集ACK叢集容器日誌

    - name: aliyun_logs_catalina_machinegroup
    
      value: my-machine-group

    不涉及。

    aliyun_logs_{key}_logstoremode

    可選。值為指定的Log ServiceLogstore的類型,不指定該參數的話,預設值為standard,取值:

    說明

    若Logstore已經存在,則該參數不生效。

    • standard:支援Log Service一站式資料分析功能,適用於即時監控、互動式分析以及構建完整的可觀測性系統等情境。

    • query:支援高效能查詢,索引流量費用約為standard的一半,但不支援SQL分析,適用於資料量大、儲存周期長(周、月層級以上)、無日誌分析的情境。

    • - name: aliyun_logs_catalina_logstoremode
        value: standard 
    • - name: aliyun_logs_catalina_logstoremode
        value: query 

    不涉及。

    • 定製需求1:將多個應用資料擷取到同一Logstore

      如果需要將多個應用資料擷取到同一Logstore,可以設定 aliyun_logs_{key}_logstore參數,例如以下配置將2個應用的stdout採集到stdout-logstore中。

      樣本中應用1的{key}app1-stdout,應用2的{key}app2-stdout

      應用1設定的環境變數為:

      # 配置環境變數
          - name: aliyun_logs_app1-stdout
            value: stdout
          - name: aliyun_logs_app1-stdout_logstore
            value: stdout-logstore

      應用2設定的環境變數為:

      # 配置環境變數
          - name: aliyun_logs_app2-stdout
            value: stdout
          - name: aliyun_logs_app2-stdout_logstore
            value: stdout-logstore
    • 定製需求2:將不同應用資料擷取到不同的Project

      如果需要將不同應用的資料擷取到多個Project中,需要進行以下操作:

      1. 在每個Project中建立一個機器組,選擇自訂標識,標識名為k8s-group-{cluster-id},其中{cluster-id}為叢集ID,機器組名稱可以自訂配置。

      2. 在每個應用的環境變數中配置project、logstore、machinegroup資訊,其中機器組名稱為上一步建立的機器組名稱。

        如下樣本中應用1的{key}app1-stdout,應用2的{key}app2-stdout。其中如果兩個應用在同一個K8s叢集中,對應的machinegroup可以使用同一個machinegroup。

        應用1設定的環境變數為:

        # 配置環境變數
            - name: aliyun_logs_app1-stdout
              value: stdout
            - name: aliyun_logs_app1-stdout_project
              value: app1-project
            - name: aliyun_logs_app1-stdout_logstore
              value: app1-logstore
            - name: aliyun_logs_app1-stdout_machinegroup
              value: app1-machine-group

        應用2設定的環境變數為:

        # 應用2 配置環境變數
            - name: aliyun_logs_app2-stdout
              value: stdout
            - name: aliyun_logs_app2-stdout_project
              value: app2-project
            - name: aliyun_logs_app2-stdout_logstore
              value: app2-logstore
            - name: aliyun_logs_app2-stdout_machinegroup
              value: app1-machine-group

採集標準輸出

以下為四種採集配置方式。建議只使用一種方法管理日誌採集配置:

配置方式

配置說明

情境適用

(推薦)CRD-AliyunPipelineConfig

通過K8s CRD管理日誌採集配置。

適用於需要複雜採集和處理需求以及在ACK叢集中確保日誌與應用版本一致性的情境。

CRD-AliyunLogConfig

舊版CRD管理方式。

支援已知情境的舊版管理方式。

需要逐漸遷移到新版本CRD-AliyunPipelineConfig以享受更好的擴充性和穩定性。兩類CRD採集方式對比請參見CRD類型

Log Service控制台

圖形化介面直接管理,快速部署配置。

適合少量採集配置的建立和管理,部分進階功能和自訂需求無法通過實現。

環境變數

通過環境變數快速配置日誌參數。

進行簡單配置調整,不支援複雜處理邏輯,僅支援單行文本日誌。可滿足以下定製需求:

  • 將多個應用資料擷取到同一Logstore。

  • 將不同應用資料擷取到不同的Project。

說明

當使用(推薦)CRD-AliyunPipelineConfig時,需要logtail-ds組件版本高於1.8.10。升級詳情請參見升級Logtail latest版本。對於LoongCollector組件,則無版本限制。

CRD-AliyunPipelineConfig(推薦)

您只需要建立AliyunPipelineConfig自訂資源即可建立採集配置,資源建立完成後自動生效。

重要

對於通過自訂資源建立的採集配置,其修改只能通過更新相應的自訂資源來實現,在Log Service控制台上對採集配置的修改不會同步到自訂資源中。

  1. 登入Container Service管理主控台

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 自訂資源

  3. 自訂資源頁面,單擊資源定義(CustomResourceDefinition)頁簽,然後單擊使用YAML建立資源

  4. 根據實際情況修改以下樣本YAML的參數,將其複製並粘貼到模板中,然後單擊建立完成操作。

    說明

    您可用採集配置產生器產生目標情境YAML指令碼,該工具可幫您快速完成配置,減少手動操作。

    以下樣本YAML檔案以多行文字模式採集default命名空間下,標籤為app: ^(.*test.*)$的Pod中的標準輸出,並將其發送到名為k8s-log-<YOUR_CLUSTER_ID>的Project中的名為k8s-stdout(自動建立)的Logstore。您需根據實際情況修改YAML中的以下參數:

    1. project,樣本:k8s-log-<YOUR_CLUSTER_ID>

      登入Log Service控制台確定您安裝的日誌採集組件產生的Project的名稱。

    2. IncludeK8sLabel,樣本:app: ^(.*test.*)$。用於篩選目標Pod的標籤,當前條件指定標籤鍵為app,值中包含test的Pod會被採集。

    3. EndpointRegion,樣本:cn-hangzhou.log.aliyuncs.comcn-hangzhou

    有關YAML檔案中config項的詳情,包括支援的輸入、輸出、處理外掛程式類型和容器過濾方式,請參見PipelineConfig。完整的YAML參數詳情請參見CR參數說明

    apiVersion: telemetry.alibabacloud.com/v1alpha1
    # 建立一個 ClusterAliyunPipelineConfig
    kind: ClusterAliyunPipelineConfig
    metadata:
      # 設定資源名,在當前Kubernetes叢集內唯一。該名稱也是建立出的日誌採集配置名。如果名稱重複則不會生效。
      name: example-k8s-stdout
    spec:
      # 指定目標project
      project:
        name: k8s-log-<YOUR_CLUSTER_ID>
      # 建立用於儲存日誌的 Logstore
      logstores:
        - name: k8s-stdout
      # 定義日誌採集配置
      config:
        # 日誌範例(可不填寫)
        sample: |
          2024-06-19 16:35:00 INFO test log
          line-1
          line-2
          end
        # 定義輸入外掛程式
        inputs:
              # 使用service_docker_stdout外掛程式採集容器內文本日誌
          - Type: service_docker_stdout
            Stdout: true
            Stderr: true
            # 配置容器資訊過濾條件,多個選項之間為“且”的關係。
            # 指定待採集容器所在 Pod 所屬的命名空間,支援正則匹配。
            K8sNamespaceRegex: "^(default)$"
            # 啟用容器中繼資料預覽
            CollectContainersFlag: true
            # 採集Pod標籤合格容器。多個條目之間為或的關係
            IncludeK8sLabel:
              app: ^(.*test.*)$
            # 配置多行切分配置,單行日誌採集無效配置
            # 配置行首Regex
            BeginLineRegex: \d+-\d+-\d+.*
        # 定義輸出外掛程式
        flushers:
          # 使用flusher_sls外掛程式輸出到指定Logstore。
          - Type: flusher_sls
            # 需要確保該 Logstore 存在
            Logstore: k8s-stdout
            # 需要確保 endpoint 正確
            Endpoint: cn-hangzhou.log.aliyuncs.com
            Region: cn-hangzhou
            TelemetryType: logs

CRD-AliyunLogConfig

您只需要建立AliyunLogConfig自訂資源即可建立採集配置,建立完成後自動生效。

重要

對於通過自訂資源建立的採集配置,其修改只能通過更新相應的自訂資源來實現,在Log Service控制台上對採集配置的修改不會同步到自訂資源中。

  1. 登入Container Service管理主控台

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 自訂資源

  3. 自訂資源頁面,單擊資源定義(CustomResourceDefinition)頁簽,然後單擊使用YAML建立資源

  4. 根據實際情況修改以下樣本YAML的參數,將其複製並粘貼到模板中,然後單擊建立完成操作。

    該YAML指令碼將建立名為simple-stdout-example的採集配置,並對叢集內名稱開頭為app的所有容器,以多行模式採集標準輸出,發送到名為k8s-log-<YOUR_CLUSTER_ID>的Project中的名為k8s-stdout的Logstore。

    有關YAML檔案中的logtailConfig項提供的詳情,如支援的輸入,輸出,處理外掛程式類型與容器過濾方式等,請參見AliyunLogConfigDetail,完整的YAML參數詳情請參見CR參數說明

    # 標準輸出配置
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      # 設定資源名,在當前Kubernetes叢集內唯一。
      name: simple-stdout-example
    spec:
      # 設定目標project名稱(可不填寫,預設為k8s-log-<your_cluster_id>)
      # project: k8s-log-test
      # 設定Logstore名稱。如果您所指定的Logstore不存在,Log Service會自動建立。
      logstore: k8s-stdout
      # 設定日誌採集配置。
      logtailConfig:
        # 設定採集的資料來源類型。採集標準輸出時,需設定為plugin。
        inputType: plugin
        # 設定Logtail採集配置的名稱,必須與資源名(metadata.name)相同。
        configName: simple-stdout-example
        inputDetail:
          plugin:
            inputs:
              - type: service_docker_stdout
                detail:
                  # 指定採集stdout和stderr。
                  Stdout: true
                  Stderr: true
                  # 指定待採集容器所在 Pod 所屬的命名空間,支援正則匹配。
                  K8sNamespaceRegex: "^(default)$"
                  # 指定待採集容器的名稱,支援正則匹配。
                  K8sContainerRegex: "^(app.*)$"
                  # 配置多行切分配置
                  # 配置行首Regex
                  BeginLineRegex: \d+-\d+-\d+.*
                  

Log Service控制台

  1. 登入Log Service控制台

  2. 選擇Project列表中您在安裝日誌採集組件時所使用的Project,如k8s-log-<YOUR_CLUSTER_ID>。在Project頁面中點擊目標Logstore的Logtail配置,添加採集配置,並單擊K8S-標準輸出-舊版的立即接入。image

  3. 由於上一步驟中已為ACK叢集安裝日誌採集組件,請單擊使用現有機器組image

  4. 機器組配置頁面K8s情境的ACK Daemonset方式下勾選k8s-group-${your_k8s_cluster_id}機器組並單擊>添加到應用機器組中,點擊下一步。image

  5. 建立Logtail採集配置,按下文填寫必須配置後點擊下一步即可,Logtail採集配置生效大概需要1分鐘,請耐心等待。

    此處僅介紹必須配置,詳細配置請參見Logtail採集配置

    • 全域配置

      全域配置中輸入配置名稱。

      image

  6. 建立索引預覽資料:Log Service預設開啟全文索引,此時查詢會索引日誌中所有欄位。您也可以根據採集到的日誌,手動建立欄位索引,或者單擊自動產生索引,Log Service將產生欄位索引,通過此索引針對特定欄位進行精確查詢,從而減少索引費用和提高查詢效率。更多資訊請參見建立索引image

環境變數

  1. 建立應用時配置Log Service。

    通過控制台配置
    1. 登入Container Service管理主控台,在左側導覽列單擊叢集列表

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

    3. 無狀態頁面上方的命名空間下拉框中設定命名空間,然後單擊頁面右上方的使用鏡像建立

    4. 應用基本資料頁簽,設定應用程式名稱,單擊下一步,進入容器配置頁面。

      以下僅介紹Log Service相關的配置。關於其他的應用配置,請參見建立無狀態工作負載Deployment

    5. 日誌配置地區,配置日誌相關資訊。

      1. 設定採集配置

        單擊採集配置建立新的採集配置,每個採集配置由日誌庫容器內日誌路徑(可設定為stdout)兩項構成。

        • 日誌庫:配置Logstore名稱,用於指定所採集的日誌儲存於該Logstore。如果該Logstore不存在,ACK將會自動為您在叢集關聯的Log ServiceProject下建立相應的Logstore。

          說明

          新建立的Logstore中的日誌預設儲存時間為90天。

        • 容器內日誌路徑(可設定為stdout):指定為stdout時,表示採集容器的標準輸出和標準錯誤輸出。

          image

          每一項採集配置都會被自動建立為對應Logstore的一個採集配置,預設採用極簡模式(按行)進行採集。

      2. 設定自訂Tag

        單擊自訂Tag建立新的自訂Tag,每一個自訂Tag都是一個索引值對,會拼接到所採集到的日誌中,您可以使用它來為容器的日誌資料進行標記,例如版本號碼。

        image

    6. 當完成所有配置後,可單擊右上方的下一步進入後續流程。

      後續操作,可參見建立無狀態工作負載Deployment

    通過YAML模板
    1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

    3. 無狀態頁面上方的命名空間下拉框中設定命名空間,然後單擊頁面右上方的使用YAML建立資源

    4. 配置YAML檔案。

      YAML模板的文法同Kubernetes文法,但是為了給容器指定採集配置,需要使用env來為容器增加採集配置自訂Tag,並根據採集配置,建立對應的volumeMountsvolumes。以下是一個簡單的Pod樣本:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        annotations:
          deployment.kubernetes.io/revision: '1'
        labels:
          app: deployment-stdout
          cluster_label: CLUSTER-LABEL-A
        name: deployment-stdout
        namespace: default
      spec:
        progressDeadlineSeconds: 600
        replicas: 1
        revisionHistoryLimit: 10
        selector:
          matchLabels:
            app: deployment-stdout
        strategy:
          rollingUpdate:
            maxSurge: 25%
            maxUnavailable: 25%
          type: RollingUpdate
        template:
          metadata:
            labels:
              app: deployment-stdout
              cluster_label: CLUSTER-LABEL-A
          spec:
            containers:
              - args:
                  - >-
                    while true; do date '+%Y-%m-%d %H:%M:%S'; echo 1; echo 2; echo 3;
                    echo 4; echo 5; echo 6; echo 7; echo 8; echo 9; 
                    sleep 10; done
                command:
                  - /bin/sh
                  - '-c'
                  - '--'
                env:
                  - name: cluster_id
                    value: CLUSTER-A
                  - name: aliyun_logs_log-stdout
                    value: stdout
                image: 'mirrors-ssl.aliyuncs.com/busybox:latest'
                imagePullPolicy: IfNotPresent
                name: timestamp-test
                resources: {}
                terminationMessagePath: /dev/termination-log
                terminationMessagePolicy: File
            dnsPolicy: ClusterFirst
            restartPolicy: Always
            schedulerName: default-scheduler
            securityContext: {}
            terminationGracePeriodSeconds: 30
      1. 通過環境變數來建立您的採集配置自訂Tag,所有與配置相關的環境變數都採用aliyun_logs_作為首碼。

        • 建立採集配置的規則如下:

          - name: aliyun_logs_log-varlog
            value: /var/log/*.log                        

          樣本中建立了一個採集配置,格式為aliyun_logs_{key},對應的{key}log-varlog

          • aliyun_logs_log-varlog:該env表示建立一個Logstore名為log-varlog,日誌採集路徑為/var/log/*.log的配置,對應的Log Service採集配置名稱也是log-varlog,目的是將容器的/var/log/*.log檔案內容採集到log-varlog這個Logstore中。

        • 建立自訂Tag的規則如下:

          - name: aliyun_logs_mytag1_tags
            value: tag1=v1                       

          配置Tag後,當採集到該容器的日誌時,會自動附加對應的欄位到Log Service。其中mytag1任意不包含'_'的名稱

      2. 如果您的採集配置中指定了非stdout的採集路徑,需要在此部分建立相應的volumeMounts

        樣本中採集配置添加了對/var/log/*.log的採集,因此相應地添加了/var/log的volumeMounts

    5. 當YAML編寫完成後,單擊建立,即可將相應的配置交由Kubernetes叢集執行。

  2. 配置環境變數的進階參數。

    通過容器環境變數配置採集支援多種配置參數。您可以根據實際需求設定進階參數,以滿足日誌採集的特殊需求。

    重要

    通過容器環境變數配置採集日誌的方式不適用於邊緣情境。

    欄位

    說明

    樣本

    注意事項

    aliyun_logs_{key}

    • 必選項。{key}只能包含小寫字母、數字和-。

    • 若不存在aliyun_logs_{key}_logstore,則預設建立並採集到名為{key}的logstore。

    • 當值為stdout時表示採集容器的標準輸出;其他值為容器內的日誌路徑。

    • - name: aliyun_logs_catalina
      
        value: stdout
    • - name: aliyun_logs_access-log
      
        value: /var/log/nginx/access.log

    aliyun_logs_{key}_tags

    可選。值為{tag-key}={tag-value}類型,用於對日誌進行標識。

    - name: aliyun_logs_catalina_tags
    
      value: app=catalina

    不涉及。

    aliyun_logs_{key}_project

    可選。值為指定的Log ServiceProject。當不存在該環境變數時,為您安裝時所選的Project。

    - name: aliyun_logs_catalina_project
    
      value: my-k8s-project

    Project需與您的日誌採集組件工作所在的Region一致。

    aliyun_logs_{key}_logstore

    可選。值為指定的Log ServiceLogstore。當不存在該環境變數時,Logstore和{key}一致。

    - name: aliyun_logs_catalina_logstore
    
      value: my-logstore

    不涉及。

    aliyun_logs_{key}_shard

    可選。值為建立Logstore時的shard數,取值範圍為[1 , 10]。當不存在該環境變數時,值為2。

    說明

    若logstore已經存在,則該參數不生效。

    - name: aliyun_logs_catalina_shard
    
      value: '4'

    不涉及。

    aliyun_logs_{key}_ttl

    可選。值為指定的日誌儲存時間,取值範圍為[1 , 3650]。

    • 當取值為3650時,指定日誌的儲存時間為永久儲存。

    • 當不存在該環境變數時,預設指定日誌的儲存時間為90天。

    說明

    若Logstore已經存在,則該參數不生效。

    - name: aliyun_logs_catalina_ttl
    
      value: '3650'

    不涉及。

    aliyun_logs_{key}_machinegroup

    可選。值為應用的機器組。當不存在該環境變數時與安裝日誌採集組件的預設機器組一致。關於該參數的詳細使用方法,請參見下文的採集ACK叢集容器日誌

    - name: aliyun_logs_catalina_machinegroup
    
      value: my-machine-group

    不涉及。

    aliyun_logs_{key}_logstoremode

    可選。值為指定的Log ServiceLogstore的類型,不指定該參數的話,預設值為standard,取值:

    說明

    若Logstore已經存在,則該參數不生效。

    • standard:支援Log Service一站式資料分析功能,適用於即時監控、互動式分析以及構建完整的可觀測性系統等情境。

    • query:支援高效能查詢,索引流量費用約為standard的一半,但不支援SQL分析,適用於資料量大、儲存周期長(周、月層級以上)、無日誌分析的情境。

    • - name: aliyun_logs_catalina_logstoremode
        value: standard 
    • - name: aliyun_logs_catalina_logstoremode
        value: query 

    該參數需要logtail-ds鏡像版本>=1.3.1。

    • 定製需求1:將多個應用資料擷取到同一Logstore

      如果您需要將多個應用資料擷取到同一Logstore,可以設定 aliyun_logs_{key}_logstore參數,例如以下配置將2個應用的stdout採集到stdout-logstore中。

      樣本中應用1的{key}app1-stdout,應用2的{key}app2-stdout

      應用1設定的環境變數為:

      # 配置環境變數
          - name: aliyun_logs_app1-stdout
            value: stdout
          - name: aliyun_logs_app1-stdout_logstore
            value: stdout-logstore

      應用2設定的環境變數為:

      # 配置環境變數
          - name: aliyun_logs_app2-stdout
            value: stdout
          - name: aliyun_logs_app2-stdout_logstore
            value: stdout-logstore
    • 定製需求2:將不同應用資料擷取到不同的Project

      如果您需要將不同應用的資料擷取到多個Project中,您需要進行以下操作:

      1. 在每個Project中建立一個機器組,選擇自訂標識,標識名為k8s-group-{cluster-id},其中{cluster-id}為您的叢集ID,機器組名稱可以自訂配置。

      2. 在每個應用的環境變數中配置project、logstore、machinegroup資訊,其中機器組名稱為您在上一步建立的機器組名。

        如下樣本中應用1的{key}app1-stdout,應用2的{key}app2-stdout。其中如果兩個應用在同一個K8s叢集中,對應的machinegroup可以使用同一個machinegroup。

        應用1設定的環境變數為:

        # 配置環境變數
            - name: aliyun_logs_app1-stdout
              value: stdout
            - name: aliyun_logs_app1-stdout_project
              value: app1-project
            - name: aliyun_logs_app1-stdout_logstore
              value: app1-logstore
            - name: aliyun_logs_app1-stdout_machinegroup
              value: app1-machine-group

        應用2設定的環境變數為:

        # 應用2 配置環境變數
            - name: aliyun_logs_app2-stdout
              value: stdout
            - name: aliyun_logs_app2-stdout_project
              value: app2-project
            - name: aliyun_logs_app2-stdout_logstore
              value: app2-logstore
            - name: aliyun_logs_app2-stdout_machinegroup
              value: app1-machine-group

步驟三:查詢分析日誌

  1. 登入Log Service控制台

  2. Project列表中,單擊目標Project,進入對應的Project詳情頁面。

    image

  3. 在對應的日誌庫右側的表徵圖表徵圖,選擇查詢分析,查看Kubernetes叢集輸出的日誌。

    image

日誌預設欄位

文本日誌

K8s每條容器文本日誌預設包含的欄位如下表所示。

欄位名稱

說明

__tag__:__hostname__

容器宿主機的名稱。

__tag__:__path__

容器內記錄檔的路徑。

__tag__:_container_ip_

容器的IP地址。

__tag__:_image_name_

容器使用的鏡像名稱。

說明

若存在多個相同Hash但名稱或Tag不同的鏡像,採集配置將根據Hash選擇其中一個名稱進行採集,無法確保所選名稱與YAML檔案中定義的一致。

__tag__:_pod_name_

Pod的名稱。

__tag__:_namespace_

Pod所屬的命名空間。

__tag__:_pod_uid_

Pod的唯一識別碼(UID)。

標準輸出

Kubernetes叢集的每條日誌預設上傳的欄位如下所示。

欄位名稱

說明

_time_

日誌採集時間。

_source_

日誌源類型,stdout或stderr。

_image_name_

鏡像名

_container_name_

容器名

_pod_name_

Pod名

_namespace_

Pod所在的命名空間

_pod_uid_

Pod的唯一標識

相關文檔