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配置。取值說明如下:
|
專案 | 否 | aliyun_logs_{key}_project | 指定Log ServiceProject。 如果不設定該環境變數,則使用預設的Project。預設的Project的名稱格式為k8s-log-<cluster-id>。 |
日誌庫 | 否 | aliyun_logs_{key}_logstore | 指定Log ServiceLogstore。 如果不設定該環境變數,則Logstore和 |
機器組 | 否 | aliyun_logs_{key}_machinegroup | 指定機器組。 如果不設定該環境變數,則使用預設的機器組。 |
分區 | 否 | aliyun_logs_{key}_shard | 設定日誌分區數。
|
日誌保留時間 | 否 | aliyun_logs_{key}_ttl | 設定日誌保留時間,單位為天。
|
標籤 | 否 | aliyun_logs_{key}_tags | 綁定標籤。取值格式為 |
配置樣本
串連叢集。
建立應用。
在容器的環境變數中可以傳入日誌相關配置。以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
確認應用狀態。
kubectl get pod
預期返回:
NAME READY STATUS RESTARTS AGE eci-sls-demo-b97bbd7d6-z9twz 1/1 Running 0 2m45s
查看日誌。
單擊目標Project名稱。
找到目標日誌庫,單擊日誌庫名稱查看日誌。
標準輸出
檔案日誌