全部產品
Search
文件中心

Container Service for Kubernetes:通過Pod環境變數採集應用日誌

更新時間:Nov 01, 2024

阿里雲Log ServiceSLS(Log Service)是針對日誌資料的一站式服務,讓您無需開發就能快捷完成日誌資料擷取、消費、投遞以及查詢分析等功能。ACK Serverless叢集提供了Log Service託管功能。您可以在ACK Serverless叢集中使用SLS環境變數,將業務容器的標準輸出和記錄檔收集到SLS。

重要
  • 推薦您優先使用SLS CRD的方式採集日誌。具體操作,請參見通過CRD採集應用日誌

  • 請勿同時使用SLS CRD和環境變數方式,這可能會導致日誌採集失敗。

步驟一:建立應用並配置Log Service

您可以在建立應用的同時配置Log Service,從而對容器的日誌進行採集。您可以通過鏡像和YAML模板兩種方式建立應用。阿里雲Log ServiceSLS的詳細資料,請參見什麼是Log Service

使用鏡像建立

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

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

  3. 無狀態頁面上方的命名空間下拉式清單中選擇目標命名空間,然後在頁面右上方單擊使用鏡像建立

    1. 應用基本資料頁簽,設定應用程式名稱副本數量類型,然後單擊下一步

    2. 容器配置頁簽的Log Service地區,進行相關配置。

      說明

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

      配置樣本如下:採集配置

      配置項

      說明

      採集配置

      單擊採集配置,配置日誌庫容器內日誌路徑

      • 日誌庫:配置Logstore名稱,名稱中只能包含小寫字母、數字和短劃線(-)。

        您可以使用它來指定所採集日誌儲存於該Logstore,如果該Logstore不存在的話,ACK Serverless會自動為您在叢集關聯的Log ServiceProject下建立相應的Logstore。

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

        說明

        如果指定為stdout,表示採集容器的標準輸出和標準錯誤輸出。

      每一項採集配置都會被自動建立為對應Logstore的一個採集配置,預設採用極簡模式(按行)進行採集,如果您需要更豐富的採集方式,可以登入Log Service控制台,進入相應的Project(預設是k8s-log首碼)和Logstore對配置進行修改。

      自訂Tag

      單擊自訂Tag,配置Tag名稱Tag值

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

    3. 配置完成後,在頁面右側單擊下一步,後續操作,請參見建立無狀態工作負載Deployment

使用YAML建立

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

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

  3. 無狀態頁面上方的命名空間下拉式清單中選擇目標命名空間,然後在頁面右上方單擊使用YAML建立資源

  4. 建立頁面,選擇樣本模板,並使用YAML配置相應的模板,然後單擊建立

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

    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'
        args:
        - -c
        - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /var/log/test.log; sleep 1;done
        command:
        - /bin/sh
        env:
        ######### 配置環境變數 ###########
        - name: aliyun_logs_log-stdout
          value: stdout
        - 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
      volumes:
      - name: volumn-sls-mydemo
        emptyDir: {}

    按需在Pod YAML樣本中增加以下配置樣本:

    說明

    若您有更多的日誌採集需求,請參見步驟二:配置環境變數的進階參數

    1. 通過環境變數建立採集配置和自訂Tag,所有與配置相關的環境變數都採用aliyun_logs_作為首碼。

      1. 建立採集配置的規則:

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

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

        • aliyun_logs_log-stdout:該env表示建立一個名稱為log-stdout的Logstore,日誌採集路徑為stdout的配置,對應的Log Service採集配置名稱也是log-stdout,目的是將容器的標準輸出採集到log-stdoutLogstore中。

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

      2. 建立自訂Tag規則:

        - name: aliyun_logs_mytag1_tags
          value: tag1=v1

        配置Tag後,當採集到該容器的日誌時,會自動附加對應的欄位到Log Service。其中mytag1為只能包含小寫字母、數字和短劃線(-)的名稱。

    2. 如果您的採集配置中指定了非stdout的採集路徑,需要在此部分建立相應的volumeMounts。樣本中採集配置添加了對/var/log/*.log的採集,因此相應地添加了/var/log的volumeMounts

步驟二:配置環境變數的進階參數

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

重要

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

欄位

說明

樣本

注意事項

aliyun_logs_{key}

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

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

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

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

  • {key}需保持在K8s叢集內唯一。

aliyun_logs_{key}_tags

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

- name: aliyun_logs_catalina_tags

   app=catalina

-

aliyun_logs_{key}_project

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

預設的Project的名稱格式為k8s-log-<cluster-id>。

- name: aliyun_logs_catalina_project

   my-k8s-project

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

aliyun_logs_{key}_logstore

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

- name: aliyun_logs_catalina_logstore

   my-logstore

-

aliyun_logs_{key}_shard

可選。值為建立Logstore時的shard數,有效值為1~10。當不存在該環境變數時值為2。

- name: aliyun_logs_catalina_shard

   '4'

-

aliyun_logs_{key}_ttl

可選。值為指定的日誌儲存時間,有效值為1~3650。

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

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

- name: aliyun_logs_catalina_ttl

   '3650'

-

aliyun_logs_{key}_machinegroup

可選。值為應用的機器組。當不存在該環境變數時與安裝Logtail的預設機器組一致。

- name: aliyun_logs_catalina_machinegroup

   my-machine-group

-

  • 定製需求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

步驟三:查看日誌

在Container Service控制台查看應用程式容器的日誌的具體步驟如下。

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

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

  3. 日誌中心頁面,單擊應用日誌頁簽,按需選擇日誌庫,查看應用程式容器的相關日誌。