ECI支持通過容器的環境變量傳入日志相關的自定義配置。本文介紹如何通過環境變量來配置日志采集,實現通過阿里云日志服務SLS自動采集容器日志。
背景信息
阿里云日志服務SLS(Log Service)是針對日志數據的一站式服務,您無需開發就能快捷完成日志數據采集、消費、投遞以及查詢分析等功能。更多信息,請參見日志服務簡介。
前提條件
已開通日志服務。登錄日志服務控制臺時,如果沒有開通日志服務,將收到相關提示,您可以根據頁面提示開通。
注意事項
僅在創建ECI實例時才能通過環境變量自定義配置日志采集,更新實例時傳入的日志相關環境變量不會生效。
對于自定義配置的日志Project和Logtail配置,如果后續不再使用,請及時刪除相關Project和Logtail配置,避免產生不必要的費用。
配置說明
日志相關環境變量名稱的格式前綴為aliyun_logs_{key}
,可配置的環境變量如下:
{key}表示日志服務中Logtail采集配置的名稱,只能包含小寫字母、數字和短劃線(-)。您可以自定義配置{key},但必須保證在K8s集群內唯一。
配置對象 | 是否必選 | 環境變量名稱 | 說明 |
Logtail配置 | 是 | aliyun_logs_{key} | 創建Logtail配置。取值說明如下:
|
項目 | 否 | aliyun_logs_{key}_project | 指定日志服務Project。 如果不設置該環境變量,則使用默認的Project。默認的Project的名稱格式為k8s-log-<cluster-id>。 |
日志庫 | 否 | aliyun_logs_{key}_logstore | 指定日志服務Logstore。 如果不設置該環境變量,則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名稱。
找到目標日志庫,單擊日志庫名稱查看日志。
標準輸出
文件日志