阿里雲Log ServiceSLS(Log Service)是針對日誌資料的一站式服務,讓您無需開發就能快捷完成日誌資料擷取、消費、投遞以及查詢分析等功能。ACK Serverless叢集提供了Log Service託管功能。您可以在ACK Serverless叢集中使用SLS環境變數,將業務容器的標準輸出和記錄檔收集到SLS。
推薦您優先使用SLS CRD的方式採集日誌。具體操作,請參見通過CRD採集應用日誌。
請勿同時使用SLS CRD和環境變數方式,這可能會導致日誌採集失敗。
步驟一:建立應用並配置Log Service
您可以在建立應用的同時配置Log Service,從而對容器的日誌進行採集。您可以通過鏡像和YAML模板兩種方式建立應用。阿里雲Log ServiceSLS的詳細資料,請參見什麼是Log Service。
使用鏡像建立
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在無狀態頁面上方的命名空間下拉式清單中選擇目標命名空間,然後在頁面右上方單擊使用鏡像建立。
在應用基本資料頁簽,設定應用程式名稱、副本數量和類型,然後單擊下一步。
在容器配置頁簽的Log Service地區,進行相關配置。
說明本文僅介紹Log Service相關的配置,其他的應用配置,請參見建立無狀態工作負載Deployment。
配置樣本如下:
配置項
說明
採集配置
單擊採集配置,配置日誌庫和容器內日誌路徑。
日誌庫:配置Logstore名稱,名稱中只能包含小寫字母、數字和短劃線(-)。
您可以使用它來指定所採集日誌儲存於該Logstore,如果該Logstore不存在的話,ACK Serverless會自動為您在叢集關聯的Log ServiceProject下建立相應的Logstore。
容器內日誌路徑:指定希望採集的日誌所在的路徑,例如使用/usr/local/tomcat/logs/catalina.*.log來採集Tomcat的文本日誌。
說明如果指定為stdout,表示採集容器的標準輸出和標準錯誤輸出。
每一項採集配置都會被自動建立為對應Logstore的一個採集配置,預設採用極簡模式(按行)進行採集,如果您需要更豐富的採集方式,可以登入Log Service控制台,進入相應的Project(預設是k8s-log首碼)和Logstore對配置進行修改。
自訂Tag
單擊自訂Tag,配置Tag名稱和Tag值。
每一個自訂Tag都是一個索引值對,會拼接到所採集到的日誌中,您可以使用它來為容器的日誌資料進行標記,例如版本號碼。
配置完成後,在頁面右側單擊下一步,後續操作,請參見建立無狀態工作負載Deployment。
使用YAML建立
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在無狀態頁面上方的命名空間下拉式清單中選擇目標命名空間,然後在頁面右上方單擊使用YAML建立資源。
在建立頁面,選擇樣本模板,並使用YAML配置相應的模板,然後單擊建立。
YAML模板的文法同Kubernetes文法。但為了給容器指定採集配置,需要使用
env
來為容器增加採集配置和自訂Tag,並根據採集配置,建立對應的volumeMounts
和volumes
。Pod YAML樣本如下: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' args: - -c - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /var/log/test.log; sleep 1;done command: - /bin/sh 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 ######### 配置Volume Mount ########### volumeMounts: - name: volumn-sls-mydemo mountPath: /var/log volumes: - name: volumn-sls-mydemo emptyDir: {}
按需在Pod YAML樣本中增加以下配置樣本:
說明若您有更多的日誌採集需求,請參見步驟二:配置環境變數的進階參數。
通過環境變數建立採集配置和自訂Tag,所有與配置相關的環境變數都採用
aliyun_logs_
作為首碼。建立採集配置的規則:
- name: aliyun_logs_log-stdout value: stdout - name: aliyun_logs_log-varlog value: /var/log/*.log
樣本中建立了兩個採集配置,格式為
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
表示建立一個名稱為log-varlog
的Logstore,日誌採集路徑為/var/log/*.log
的配置,對應的Log Service採集配置名稱也是log-varlog
,目的是將容器的/var/log/*.log
檔案內容採集到log-varlog
Logstore中。
建立自訂Tag規則:
- name: aliyun_logs_mytag1_tags value: tag1=v1
配置Tag後,當採集到該容器的日誌時,會自動附加對應的欄位到Log Service。其中
mytag1
為只能包含小寫字母、數字和短劃線(-)的名稱。
如果您的採集配置中指定了非
stdout
的採集路徑,需要在此部分建立相應的volumeMounts
。樣本中採集配置添加了對/var/log/*.log
的採集,因此相應地添加了/var/log的volumeMounts
。
步驟二:配置環境變數的進階參數
通過容器環境變數配置採集支援多種配置參數,您可以根據實際需求設定進階參數來實現日誌採集的特殊需求。
通過容器環境變數配置採集日誌的方式不適用於邊緣情境。
欄位 | 說明 | 樣本 | 注意事項 |
aliyun_logs_{key} |
|
|
|
aliyun_logs_{key}_tags | 可選。值為{tag-key}={tag-value}類型,用於對日誌進行標識。 |
| - |
aliyun_logs_{key}_project | 可選。值為指定的Log ServiceProject。當不存在該環境變數時為您安裝時所選的Project。 預設的Project的名稱格式為k8s-log-<cluster-id>。 |
| Project需與您的Logtail工作所在Region一致。 |
aliyun_logs_{key}_logstore | 可選。值為指定的Log ServiceLogstore。當不存在該環境變數時Logstore和{key}一致。 |
| - |
aliyun_logs_{key}_shard | 可選。值為建立Logstore時的shard數,有效值為1~10。當不存在該環境變數時值為2。 |
| - |
aliyun_logs_{key}_ttl | 可選。值為指定的日誌儲存時間,有效值為1~3650。
|
| - |
aliyun_logs_{key}_machinegroup | 可選。值為應用的機器組。當不存在該環境變數時與安裝Logtail的預設機器組一致。 |
| - |
定製需求1:將多個應用資料擷取到同一Logstore
如果您需要將多個應用資料擷取到同一Logstore,可以設定 aliyun_logs_{key}_logstore參數,例如以下配置將2個應用的stdout採集到stdout-logstore中。
樣本中應用1的
{key}
為app1-stdout
,應用2的{key}
為app2-stdout
。應用1設定的環境變數為:
# 配置環境變數 - name: aliyun_logs_app1-stdout value: stdout - name: aliyun_logs_app1-stdout_logstore value: stdout-logstore
應用2設定的環境變數為:
# 配置環境變數 - name: aliyun_logs_app2-stdout value: stdout - name: aliyun_logs_app2-stdout_logstore value: stdout-logstore
定製需求2:將不同應用資料擷取到不同的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設定的環境變數為:
# 配置環境變數 - 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
應用2設定的環境變數為:
# 應用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
步驟三:查看日誌
在Container Service控制台查看應用程式容器的日誌的具體步驟如下。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在日誌中心頁面,單擊應用日誌頁簽,按需選擇日誌庫,查看應用程式容器的相關日誌。