容器計算服務 ACS(Container Compute Service)集成了阿里云日志服務SLS。您可在創建ACS集群時啟用日志服務,快速采集集群內的容器日志,包括容器的標準輸出以及容器內的文本文件。本文介紹如何在ACS集群中通過Pod環境變量采集應用日志。
步驟一:啟用日志服務組件
您可以在創建ACS集群時勾選使用日志服務來自動啟用日志服務組件。若創建時未勾選,您也可以通過以下步驟為已有集群啟用日志服務組件。
登錄容器計算服務控制臺,在左側導航欄選擇集群。
在集群頁面,單擊目標集群ID,然后在左側導航欄,選擇運維管理 > 組件管理。
在日志與監控區域找到alibaba-log-controller。單擊安裝,并在安裝組件對話框中單擊確定。
如果您已安裝的alibaba-log-controller組件為舊版本,可以對組件進行升級。升級組件后,集群會重置組件參數。如果您曾自定義alibaba-log-controller的配置和環境變量,參數將被覆蓋,請重新配置。
步驟二:創建應用時配置日志服務
您可以在創建應用的同時配置日志服務,從而對容器的日志進行采集。目前支持通過控制臺和YAML模板兩種方式進行配置。
通過控制臺向導創建應用并配置日志服務
登錄容器計算服務控制臺,在左側導航欄選擇集群。
在集群頁面,單擊目標集群ID,然后在左側導航欄,選擇
。在無狀態頁面上方的命名空間下拉框中設置命名空間,然后單擊頁面右上角的使用鏡像創建。
說明此處是以無狀態應用為例子,對于其它類型的工作負載(例如:有狀態)配置方式相同。
在應用基本信息頁簽,設置應用名稱、副本數量和類型,單擊下一步,進入容器配置頁面。
說明以下僅介紹日志服務相關的配置。關于其他的應用配置項,請參見創建無狀態工作負載Deployment。
在日志配置區域,配置日志相關信息。
設置采集配置。
單擊+圖標創建新的采集配置,每個采集配置由日志庫和容器內日志路徑兩項構成。
日志庫:配置Logstore名稱,用于指定所采集日志存儲于該Logstore。如果該Logstore不存在,ACS將會自動為您在集群關聯的日志服務Project下創建相應的Logstore。
說明新創建的Logstore中的日志默認保存時間為180天。
容器內日志路徑:指定希望采集的日志所在的路徑,例如使用/usr/local/tomcat/logs/catalina.*.log來采集Tomcat的文本日志。
說明指定為stdout時,表示采集容器的標準輸出和標準錯誤輸出。
每一項采集配置都會被自動創建為對應Logstore的一個采集配置,默認采用極簡模式(按行)進行采集。
設置自定義Tag。
單擊+圖標創建新的自定義Tag,每一個自定義Tag都是一個鍵值對,會拼接到所采集到的日志中,您可以使用它來為容器的日志數據進行標記,例如版本號。
當完成所有配置后,可單擊右上角的下一步進入后續流程。
后續操作,可參見創建無狀態工作負載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-stdout
,目的是將容器的標準輸出采集到log-stdout
這個Logstore
中。aliyun_logs_log-varlog
:該env表示創建一個Logstore
名為log-varlog
,日志采集路徑為/var/log/*.log的配置,對應的日志服務采集配置名稱也是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后,當采集到該容器的日志時,會自動附加對應的字段到日志服務。其中
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 | 可選。值為指定的日志服務Project。當不存在該環境變量時為您安裝時所選的Project。 |
| Project需與您的日志服務組件工作所在Region一致。 |
aliyun_logs_{key}_logstore | 可選。值為指定的日志服務Logstore。當不存在該環境變量時Logstore和{key}一致。 |
| 不涉及。 |
aliyun_logs_{key}_shard | 可選。值為創建Logstore時的shard數,取值范圍為[1 , 10]。當不存在該環境變量時值為2。 說明 若logstore已經存在,則該參數不生效。 |
| 不涉及。 |
aliyun_logs_{key}_ttl | 可選。值為指定的日志保存時間,取值范圍為[1 , 3650]。
說明 若Logstore已經存在,則該參數不生效。 |
| 不涉及。 |
aliyun_logs_{key}_machinegroup | 可選。值為應用的機器組。當不存在該環境變量時與安裝日志服務組件的默認機器組一致。關于該參數的詳細使用方法,請參見下文的特殊場景二:將不同應用數據采集到不同的Project。 |
| 不涉及。 |
aliyun_logs_{key}_logstoremode | 可選。值為指定的日志服務Logstore的類型,不指定該參數的話,默認值為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 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 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 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 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"]
步驟四:通過日志服務控制臺查看日志
本例中查看通過控制臺向導創建的應用日志。完成配置后,應用日志已被采集并存儲到日志服務中,您可以在日志服務控制臺查看容器日志。
登錄日志服務控制臺。
在Project列表區域選擇ACS集群對應的Project(默認為k8s-log-{ACS集群ID}),進入日志庫列表頁簽。
在列表中找到相應的Logstore(采集配置中指定),將鼠標懸浮在相應的Logstore名稱的右側,單擊圖標,并單擊查詢分析。
本例中,在日志查詢頁面,可以查看應用的標準輸出日志和容器內文本日志,且自定義tag附加到日志字段中。
更多信息
通過日志服務采集Kubernetes容器日志,您可以在日志服務控制臺查看容器計算服務ACS的全部日志信息。
關于如何進行異常排查,請參見采集日志失敗的排查思路。