全部產品
Search
文件中心

Elastic Container Instance:通過環境變數方式採集日誌

更新時間:Nov 14, 2024

ECI支援通過容器的環境變數傳入日誌相關的自訂配置。本文介紹如何通過環境變數來配置日誌採集,實現通過阿里雲Log ServiceSLS自動採集容器日誌。

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

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

背景資訊

阿里雲Log ServiceSLS(Log Service)是針對日誌資料的一站式服務,您無需開發就能快捷完成日誌資料擷取、消費、投遞以及查詢分析等功能。更多資訊,請參見Log Service簡介

前提條件

已開通Log Service。登入Log Service控制台時,如果沒有開通Log Service,將收到相關提示,您可以根據頁面提示開通。

注意事項

  • 僅在建立ECI執行個體時才能通過環境變數自訂配置日誌採集,更新執行個體時傳入的日誌相關環境變數不會生效。

  • 對於自訂配置的日誌Project和Logtail配置,如果後續不再使用,請及時刪除相關Project和Logtail配置,避免產生不必要的費用。

配置說明

日誌相關環境變數名稱的格式首碼為aliyun_logs_{key},可配置的環境變數如下:

重要

{key}表示Log Service中Logtail採集配置的名稱,只能包含小寫字母、數字和短劃線(-)。您可以自訂配置{key},但必須保證在K8s叢集內唯一。

設定物件

是否必選

環境變數名稱

說明

Logtail配置

aliyun_logs_{key}

建立Logtail配置。取值說明如下:

  • 採集標準輸出,取值如下:

    • stdout:採集正常輸出和錯誤資訊。

    • stderr-only:只採集錯誤資訊,不採集正常輸出。

    • stdout-only:只採集正常輸出,不採集錯誤資訊。

  • 採集文字檔時,取值為容器內的檔案目錄。

專案

aliyun_logs_{key}_project

指定Log ServiceProject。

如果不設定該環境變數,則使用預設的Project。預設的Project的名稱格式為k8s-log-<cluster-id>。

日誌庫

aliyun_logs_{key}_logstore

指定Log ServiceLogstore。

如果不設定該環境變數,則Logstore和{key}一致。

機器組

aliyun_logs_{key}_machinegroup

指定機器組。

如果不設定該環境變數,則使用預設的機器組。

分區

aliyun_logs_{key}_shard

設定日誌分區數。

  • 取值範圍為1~10。

  • 如果不設定該環境變數,則預設分區數為2。

日誌保留時間

aliyun_logs_{key}_ttl

設定日誌保留時間,單位為天。

  • 取值範圍為1~3650。取值為3650時,表示持續保留日誌。

  • 如果不設定該環境變數,則日誌預設保留90天。

標籤

aliyun_logs_{key}_tags

綁定標籤。取值格式為tag-key=tag-value,用於對日誌進行標識。

配置樣本

  1. 串連叢集。

  2. 建立應用。

    在容器的環境變數中可以傳入日誌相關配置。以Deployment為例,YAML內容樣本如下,樣本中容器啟動後會執行相關命令,不斷列印標準輸出和記錄檔。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: sls
      name: eci-sls-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sls
      template:
        metadata:
          labels:
            app: sls
            alibabacloud.com/eci: "true" 
        spec:
          containers:
          - image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/alpine:3.5
            imagePullPolicy: Always
            args:
            - -c
            - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/alpine.log; sleep 1;done
            command:
            - /bin/sh
            name: alpine
            env:
            #配置Project,如果使用預設的Project,則可以不填
            - name: aliyun_logs_test-stdout_project
              value: k8s-log-c21492
            - name: aliyun_logs_test-file_project
              value: k8s-log-c21492
            #配置機器組,如果使用預設的機器組,則可以不填
            - name: aliyun_logs_test-stdout_machinegroup
              value: k8s-group-app-alpine
            - name: aliyun_logs_test-file_machinegroup
              value: k8s-group-app-alpine
            #將標準輸出採集到名為test-stdout的Logstore,採集路徑為標準輸出stdout
            - name: aliyun_logs_test-stdout
              value: stdout
            #將/log/*.log目錄下的日誌採集到名為test-file的Logstore,採集對象為/log目錄下的所有.log檔案
            - name: aliyun_logs_test-file
              value: /log/*.log
            #設定日誌保留時間,只對名為test-stdout的Logstore生效
            - name: aliyun_logs_test-stdout_ttl
              value: "7"
            #設定日誌分區數,只對名為test-stdout的Logstore生效
            - name: aliyun_logs_test-stdout_shard
              value: "2"
            #掛載EmptyDir Volume。除標準輸出外,其它自訂目錄的日誌採集必須掛載EmptyDir Volume
            volumeMounts:
            - name: volume-sls
              mountPath: /log
          volumes:
          - name: volume-sls
            emptyDir: {}

    將以上YAML儲存為test-sls-env.yaml,執行以下命令建立應用。

    kubectl create -f test-sls-env.yaml
  3. 確認應用狀態。

    kubectl get pod

    預期返回:

    NAME                             READY   STATUS    RESTARTS   AGE
    eci-sls-demo-b97bbd7d6-z9twz     1/1     Running   0          2m45s
  4. 查看日誌。

    1. 登入Log Service控制台

    2. 單擊目標Project名稱。

    3. 找到目標日誌庫,單擊日誌庫名稱查看日誌。

      • 標準輸出

        日誌env0

      • 檔案日誌

        日誌env1