背景資訊
阿里雲Log ServiceSLS(Log Service)是針對日誌資料的一站式服務,您無需開發就能快捷完成日誌資料擷取、消費、投遞以及查詢分析等功能。更多資訊,請參見Log Service簡介。
前提條件
已開通Log Service。登入Log Service控制台時,如果沒有開通Log Service,將收到相關提示,您可以根據頁面提示開通。
注意事項
通過SLS CRD開啟日誌採集僅對後續建立的ECI Pod生效。如果想要採集存量Pod的日誌,需要對存量Pod進行一次滾動發布。
配置日誌採集
在叢集內部署alibaba-log-controller組件後,您可以通過日誌採集配置CRD(AliyunLogConfig CRD)來配置日誌採集。
部署alibaba-log-controller組件
登入Container Service管理主控台。
在叢集頁面,單擊目的地組群名稱,進入叢集管理頁面。
在叢集中部署alibaba-log-controller組件。
在叢集管理頁左側導覽列,選擇營運管理>組件管理。
單擊日誌與監控頁簽,找到alibaba-log-controller卡片,然後單擊安裝。
在彈出的對話方塊中,單擊確定。
安裝完成後,alibaba-log-controller卡片右上方會顯示已安裝。
建立Logtail採集配置
串連ACK Serverless叢集。
編寫日誌採集配置CRD的YAML設定檔。
重要 建立日誌採集配置CRD後,您可以在Log Service控制台查看產生的日誌庫及logtail配置。通過CRD方式建立的配置,在控制台上對其修改不會同步到CRD中。如果後續需要更新配置,請直接修改CRD資源,不要在控制台操作,避免導致配置不一致。
AliyunLogConfig CRD YAML模板
apiVersion: log.alibabacloud.com/v1alpha1 # 使用預設值,無需修改。
kind: AliyunLogConfig # 使用預設值,無需修改。
metadata:
name: simple-stdout-example # 設定資源名,在當前Kubernetes叢集內唯一。
spec:
project: k8s-my-project # [可選]設定Project名稱。預設為安裝Logtail組件時設定的Project。
logstore: k8s-stdout # 設定Logstore名稱。如果您所指定的Logstore不存在,Log Service會自動建立。
logstoreMode: standard # [可選]設定Logstore類型,該參數值僅在建立Logstore時生效。
shardCount: 2 # [可選]設定Shard數量。預設值為2,取值範圍1~10。
lifeCycle: 90 # [可選]設定Logstore中資料的儲存時間,該參數值僅在建立Logstore時生效。預設值為90,取值範圍為1~3650。其中,3650天為永久儲存。
logtailConfig: # 設定Logtail配置。
inputType: plugin # 設定採集的資料來源類型。file表示採集文本日誌或plugin表示採集標準輸出。
configName: simple-stdout-example # 設定Logtail配置的名稱,必須與資源名(metadata.name)相同。
inputDetail: # 設定Logtail配置的詳細資料,具體配置請參見本文下方的樣本。
...
參數說明
基本參數
參數 | 類型 | 是否必填 | 說明 |
project | string | 否 | Project名稱。預設為安裝Logtail組件時設定的Project。 |
logstore | string | 是 | Logstore名稱。如果您所指定的Logstore不存在,Log Service會自動建立。 |
logstoreMode | string | 否 | Logstore類型。該參數值僅在建立Logstore時生效。取值範圍: query:查詢型Logstore。 standard:標準型Logstore。
更多資訊,請參見管理Logstore。 |
shardCount | int | 否 | Shard數量。預設值為2,取值範圍為1~10。 |
lifeCycle | int | 否 | Logstore中資料的儲存時間。預設值為90,取值範圍為1~3650。其中,3650天為永久儲存。該參數值僅在建立Logstore時生效。 |
machineGroups | array | 否 | 機器組。安裝Logtail組件時,Log Service會自動建立名為k8s-group-${your_k8s_cluster_id} 的機器組。 |
logtailConfig | object | 是 | Logtail配置。包含以下參數: 詳細的參數說明請參見Logtail配置。 |
容器過濾
Logtail 1.0.34以下版本,只支援通過環境變數、容器Label進行容器過濾。
Kubernetes中的命名空間名和容器名會映射到容器Label中,分別為io.kubernetes.pod.namespace
和io.kubernetes.container.name
。推薦使用這兩個容器Label進行容器過濾。如果這兩個容器Label未滿足需求,請使用環境變數的黑白名單進行容器過濾。
Logtail 1.0.34及以上版本,可以使用Kubernetes層級的資訊(Pod名稱、Namespace、容器名稱、容器Label等)進行容器過濾。
容器過濾參數請配置在logtailConfig>inputDetail>advanced>k8s欄位下。支援的參數如下:
IncludeK8sLabel:Kubernetes Label白名單,用於指定待採集的容器。
ExcludeK8sLabel:Kubernetes Label黑名單,用於排除不採集的容器。
K8sNamespaceRegex:指定Namespace。
K8sPodRegex:指定Pod名稱。
K8sContainerRegex:指定容器名稱。
更多資訊,請參見通過DaemonSet方式採集Kubernetes容器文本日誌和通過DaemonSet方式採集Kubernetes容器標準輸出。
AliyunLogConfig CRD YAML樣本
文本日誌CRD YAML樣本
將以下內容儲存為log-file.yaml。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: test-file # 資源名,在當前Kubernetes叢集內唯一。
spec:
project: k8s-log-c326bc86**** # 可選配置,Project名稱,可自訂,推薦使用[k8s-log-叢集ID]命名
logstore: test-file # 必選配置,Logstore名稱,如果不存在,Log Service會自動建立
logtailConfig: # Logtail配置
inputType: file # 採集的資料來源類型,file表示文本日誌,plugin表示標準輸出
configName: test-file # Logtail配置的名稱,必須與資源名(metadata.name)相同
inputDetail: # Logtail配置的詳細資料
logType: common_reg_log # 通過極簡模式採集文本日誌
logPath: /log/ # 記錄檔所在路徑
filePattern: "*.log" # 記錄檔的名稱,支援萬用字元星號(*)和半形問號(?),例如log_*.log。
dockerFile: true # 採集容器內的檔案,dockerFile設定為true
advanced: # 設定容器過濾條件
k8s:
K8sNamespaceRegex: ^(default)$
K8sPodRegex: '^(eci-sls-demo.*)$'
標準輸出CRD YAML樣本
將以下內容儲存為log-stdout.yaml。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: test-stdout # 資源名,在當前Kubernetes叢集內唯一。
spec:
project: k8s-log-c326bc86**** # 可選配置,Project名稱,可自訂,推薦使用[k8s-log-叢集ID]命名
logstore: test-stdout # 必選配置,Logstore名稱,如果不存在,Log Service會自動建立
shardCount: 2 # 可選配置,Shard數量,預設為2,取值範圍為1~10
lifeCycle: 90 # 可選配置,Logstore中日誌保留時間,單位為天,該參數值僅在建立Logstore時生效。預設為90,取值範圍為1~3650。3650表示持續保留
logtailConfig: # Logtail配置
inputType: plugin # 採集的資料來源類型,file表示文本日誌,plugin表示標準輸出
configName: test-stdout # Logtail配置的名稱,必須與資源名(metadata.name)相同
inputDetail: # Logtail配置的詳細資料
plugin:
inputs:
- type: service_docker_stdout
detail:
Stdout: true
Stderr: true
# IncludeEnv:
# aliyun_logs_test-stdout: "stdout"
建立日誌採集配置CRD。
命令樣本如下。Logtail配置生效後,Logtail開始採集各個容器上的標準輸出或文本日誌,並發送到Log Service中。
kubectl apply -f log-file.yaml
kubectl apply -f log-stdout.yaml
重要 採集到日誌後,您需要先建立索引,才能在Logstore中查詢和分析日誌。具體操作,請參見建立索引。
測試日誌採集
建立日誌採集配置CRD後,Log Service會自動採集後續建立的Pod的日誌。您可以建立以下應用來測試日誌採集效果。
建立應用。
以Deployment為例,YAML內容樣本如下,樣本中容器啟動後會執行相關命令,不斷列印標準輸出和記錄檔。
apiVersion: apps/v1
kind: Deployment
metadata:
name: eci-sls-demo
labels:
app: sls
spec:
replicas: 1
selector:
matchLabels:
app: sls
template:
metadata:
name: sls-test
labels:
app: sls
alibabacloud.com/eci: "true"
spec:
containers:
- args:
- -c
- mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;done
command:
- /bin/sh
image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/busybox:1.30
imagePullPolicy: Always
name: busybox
將以上YAML儲存為test-sls-crd.yaml,執行以下命令建立應用。
kubectl create -f test-sls-crd.yaml
確認應用狀態。
kubetcl get pod
預期返回:
NAME READY STATUS RESTARTS AGE
eci-sls-demo-7bf8849b9f-cgpbn 1/1 Running 0 2m14s
查看日誌。
登入Log Service控制台。
單擊目標Project名稱。
找到目標日誌庫,單擊日誌庫名稱查看日誌。
文本日誌
標準輸出
關閉日誌採集
建立日誌採集配置CRD後,系統會自動採集所有合格Pod的日誌。對於一些不想要採集日誌的Pod,您可以配置Annotation(k8s.aliyun.com/eci-sls-enable: "false"
)來關閉日誌採集,避免系統自動建立Logtail而造成資源浪費。
配置樣本如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: eci-sls-demo2
labels:
app: sls
spec:
replicas: 1
selector:
matchLabels:
app: sls
template:
metadata:
name: sls-test
labels:
app: sls
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-sls-enable: "false" #關閉日誌採集
spec:
containers:
- args:
- -c
- mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;
done
command:
- /bin/sh
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
imagePullPolicy: Always
name: busybox