Container Compute Service (ACS)整合了阿里雲Log ServiceSLS。可在建立ACS叢集時啟用Log Service,快速採集叢集內的容器日誌,包括容器的標準輸出以及容器內的文字檔。本文介紹如何在ACS叢集中通過Pod環境變數採集應用日誌。
步驟一:啟用Log Service組件
可在建立ACS叢集時勾選使用Log Service來自動啟用Log Service組件。若建立時未勾選,也可通過以下步驟為已有叢集啟用Log Service組件。
-
登入容器計算服務控制台,在左側導覽列選擇叢集列表。
-
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理。
-
在日誌與監控地區找到alibaba-log-controller。單擊安裝,並在安裝組件對話方塊中單擊確認。
如已安裝的alibaba-log-controller組件為舊版本,可以對組件進行升級。升級組件後,叢集會重設組件參數。如已自訂alibaba-log-controller的配置和環境變數,參數將被覆蓋,請重新設定。
步驟二:建立應用時配置Log Service
可在建立應用的同時配置Log Service,從而採集容器日誌。目前支援通過控制台和YAML檔案兩種方式進行配置。
通過控制台嚮導建立應用並配置Log Service
-
登入容器計算服務控制台,在左側導覽列選擇叢集列表。
-
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態。
-
在無狀態頁面上方的命名空間下拉框中設定命名空間,然後單擊頁面右上方的使用鏡像建立。
說明此處是以無狀態應用為例,對於其他類型的工作負載(例如:有狀態)配置方式相同。
-
在應用基本資料頁簽,設定應用程式名稱、副本數量和類型,單擊下一步,進入容器配置頁面。
說明以下僅介紹Log Service相關的配置。關於其他的應用配置項,請參見建立無狀態工作負載Deployment。
-
在日志配置地區,配置日誌相關資訊。
-
設定採集配置。
單擊+表徵圖建立新的採集配置,每個採集配置由日誌庫和容器內日誌路徑(可設定為stdout)兩項構成。
-
日誌庫:配置Logstore名稱,用於指定所採集日誌儲存於該Logstore。如果該Logstore不存在,ACS將會自動在叢集關聯的Log ServiceProject下建立相應的Logstore。
說明新建立的Logstore中的日誌預設儲存時間為180天。
-
容器內日誌路徑:指定希望採集的日誌所在的路徑,例如使用/usr/local/tomcat/logs/catalina.*.log來採集Tomcat的文本日誌。
說明指定為stdout時,表示採集容器的標準輸出和標準錯誤輸出。
每一項採集配置都會被自動建立為對應Logstore的一個採集配置,預設採用極簡模式(按行)進行採集。
配置樣本:日誌庫名稱設為access,對應容器內日誌路徑為
/usr/local/tomcat/logs/catalina.*.log;日誌庫名稱設為catalina,對應路徑為stdout。注意:請確保叢集已部署日誌外掛程式。
-
-
設定自訂Tag。
單擊+表徵圖建立新的自訂Tag,每一個自訂Tag都是一個索引值對,會拼接到所採集到的日誌中,可使用它來為容器的日誌資料進行標記,例如版本號碼。
在 Tag名稱 中輸入
release,在 Tag值 中輸入1.0.0。
-
-
當完成所有配置後,可單擊右上方的下一步進入後續流程。
後續操作,可參見建立無狀態工作負載Deployment。
通過YAML檔案建立
-
登入容器計算服務控制台,在左側導覽列選擇叢集列表。
-
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
-
在無狀態頁面上方的命名空間下拉框中設定命名空間,然後單擊頁面右上方的使用YAML建立資源。
說明此處是以無狀態應用為例,對於其他類型的工作負載(例如:有狀態)配置方式相同。
-
配置YAML檔案。
YAML檔案的文法同Kubernetes文法,但是為了給容器指定採集配置,需要使用
env來為容器增加採集配置和自訂Tag。以下是一個簡單的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-stdout value: stdout - name: aliyun_logs_log-varlog value: /var/log/*.log - name: aliyun_logs_mytag1_tags value: tag1=v1 command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]根據需求按照以下順序進行配置。
說明如有更多的日誌採集需求,請參見步驟三:日誌採集的進階參數設定。
-
通過環境變數來建立採集配置和自訂Tag,所有與配置相關的環境變數都採用
aliyun_logs_作為首碼。-
建立採集配置的規則如下:
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-stdout value: stdout - name: aliyun_logs_log-varlog value: /var/log/*.log command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]樣本中建立了兩個採集配置,格式為
aliyun_logs_{key},對應的{key}分別為log-stdout和log-varlog。-
aliyun_logs_log-stdout:該env表示建立一個名為log-stdout的Logstore,日誌採集路徑為stdout的配置,對應的Log Service採集配置名稱也是log-stdout,目的是將容器的標準輸出採集到log-stdout這個Logstore中。 -
aliyun_logs_log-varlog:該env表示建立一個Logstore名為log-varlog,日誌採集路徑為/var/log/*.log的配置,對應的Log Service採集配置名稱也是log-varlog,目的是將容器的/var/log/*.log檔案內容採集到log-varlog這個Logstore中。
-
-
建立自訂Tag的規則如下:
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_mytag1_tags value: tag1=v1 command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]配置Tag後,當採集到該容器的日誌時,會自動附加對應的欄位到Log Service。其中
mytag1為任意不包含'_'的名稱。
-
-
如採集配置中指定了非stdout的採集路徑,需要在此部分建立相應的
volumeMounts。樣本中採集配置添加了對/var/log/*.log的採集,因此相應地添加了/var/log的
volumeMounts。
-
-
當YAML編寫完成後,單擊建立,即可將相應的配置交由ACS叢集執行。
步驟三:日誌採集的進階參數設定
通過容器環境變數配置採集支援多種配置參數。可根據實際需求設定進階參數,以滿足日誌採集的特殊需求。
|
環境變數名 |
說明 |
樣本 |
注意事項 |
|
aliyun_logs_{key} |
|
|
|
|
aliyun_logs_{key}_tags |
可選。值為{tag-key}={tag-value}類型,用於對日誌進行標識。 |
|
不涉及。 |
|
aliyun_logs_{key}_project |
可選。值為指定的Log ServiceProject。當不存在該環境變數時為安裝時所選的Project。 |
|
Project需與Log Service組件工作所在Region一致。 |
|
aliyun_logs_{key}_logstore |
可選。值為指定的Log ServiceLogstore。當不存在該環境變數時Logstore和{key}一致。 |
|
不涉及。 |
|
aliyun_logs_{key}_shard |
可選。值為建立Logstore時的shard數,取值範圍為[1,10]。當不存在該環境變數時值為2。 說明
若Logstore已經存在,則該參數不生效。 |
|
不涉及。 |
|
aliyun_logs_{key}_ttl |
可選。值為指定的日誌儲存時間,取值範圍為[1,3650]。
說明
若Logstore已經存在,則該參數不生效。 |
|
不涉及。 |
|
aliyun_logs_{key}_machinegroup |
可選。值為應用的機器組。當不存在該環境變數時與安裝Log Service組件的預設機器組一致。關於該參數的詳細使用方法,請參見下文的特殊情境二:將不同應用資料擷取到不同的Project。 |
|
不涉及。 |
|
aliyun_logs_{key}_logstoremode |
可選。值為指定的Log ServiceLogstore的類型,不指定該參數的話,預設值為standard,取值: 說明
若Logstore已經存在,則該參數不生效。
|
|
不涉及。 |
-
特殊情境一:將多個應用資料擷取到同一Logstore
如需將多個應用資料擷取到同一Logstore,可以設定 aliyun_logs_{key}_logstore參數,例如以下配置將2個應用的stdout採集到
stdout-logstore中。樣本中應用1的
{key}為app1-stdout,應用2的{key}為app2-stdout。應用1設定的環境變數為:
apiVersion: v1 kind: Pod metadata: name: my-demo-1 spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: # 配置環境變數 - name: aliyun_logs_app1-stdout value: stdout - name: aliyun_logs_app1-stdout_logstore value: stdout-logstore command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]應用2設定的環境變數為:
apiVersion: v1 kind: Pod metadata: name: my-demo-2 spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: # 配置環境變數 - name: aliyun_logs_app2-stdout value: stdout - name: aliyun_logs_app2-stdout_logstore value: stdout-logstore command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"] -
特殊情境二:將不同應用資料擷取到不同的Project
如需將不同應用的資料擷取到多個Project中,需進行以下操作:
-
在每個Project中建立一個機器組,選擇自訂標識,標識名為
k8s-group-{cluster-id},其中{cluster-id}為叢集ID,機器組名稱可以自訂配置。 -
每個應用的環境變數中配置Project、Logstore、Machinegroup資訊,其中機器組名稱為在上一步建立的機器組名。
如下樣本中應用1的
{key}為app1-stdout,應用2的{key}為app2-stdout。其中如果兩個應用在同一個K8s叢集中,對應Machinegroup可以使用同一個Machinegroup。應用1設定的環境變數為:
apiVersion: v1 kind: Pod metadata: name: my-demo-1 spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: # 配置環境變數 - 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 command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]應用2設定的環境變數為:
apiVersion: v1 kind: Pod metadata: name: my-demo-2 spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: # 應用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 command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]
-
步驟四:通過Log Service控制台查看日誌
本例中查看通過控制台嚮導建立的應用日誌。完成配置後,應用日誌已被採集並儲存到Log Service中,可在Log Service控制台查看容器日誌。
-
在Project列表地區選取項目ACS叢集對應的Project(預設為k8s-log-{ACS叢集ID}),進入日誌庫列表頁簽。
-
在列表中找到相應的Logstore(採集配置中指定),將滑鼠懸浮在相應的Logstore名稱的右側,單擊
表徵圖,並單擊查詢剖析。本例中,在日誌查詢頁面,可以查看應用的標準輸出日誌和容器內文本日誌,且自訂tag附加到日誌欄位中。
更多資訊
-
通過Log Service採集Kubernetes容器日誌,可在Log Service控制台查看容器計算服務ACS的全部日誌資訊。
-
關於如何進行異常排查,請參見採集日誌失敗的排查思路。