如果需要每個Pod使用單獨的Logtail執行個體來收集Pod內所有容器的日誌,可以使用Sidecar方式在Kubernetes叢集上部署Logtail。本文介紹Sidecar方式採集容器文本日誌的工作原理、使用限制、前提條件、操作步驟等資訊。
工作原理
Sidecar模式
在Sidecar模式中,每個容器組(Pod)運行一個Logtail容器,用於採集當前容器組(Pod)所有容器(Containers)的日誌。不同Pod的日誌採集相互隔離。
為了採集同一Pod中其它容器的記錄檔,需要通過共用儲存卷的方式來完成,即將同一份儲存卷分別掛載到業務容器和Logtail容器。Sidecar方式採集容器日誌的更多資訊,請參見Sidecar日誌採集介紹和Sidecar模式樣本。儲存卷的更多資訊,請參見儲存基礎知識。
前提條件
步驟一:為業務Pod注入Logtail容器
登入Kubernetes叢集。
建立一個YAML檔案。
sidecar.yaml
為檔案的樣本名稱,請根據實際情況替換。vim sidecar.yaml
在YAML檔案中輸入如下指令碼,並根據實際情況設定其中的參數。
警告YAML模板中,所有帶有
${}
的預留位置都需要替換為您環境中實際的值,其他參數禁止改動、刪除。執行如下命令使
sidecar.yaml
檔案配置生效。sidecar.yaml
為檔案名稱,請根據實際情況替換。kubectl apply -f sidecar.yaml
建立Logtail採集配置
通過CRD方式建立的配置,在控制台上對其修改不會同步到CRD中。因此,如需修改由CRD建立的配置內容,只能修改CRD資源,不要直接在控制台操作,避免iLogtail採集配置不一致。
Log Service控制台
單擊控制台右側的快速接入資料,在接入資料地區單擊Kubernetes-檔案卡片。
選擇目標Project和Logstore,單擊下一步。選擇您在安裝Logtail組件時所使用的Project。Logstore為您自訂建立的Logstore。
在機器組配置頁面。
根據實際情境,單擊以下頁簽:
- 重要
不同頁簽的後續配置步驟不同,請根據實際需求正確選擇。
確認目標機器組已在應用機器組列表中,然後單擊下一步。在ACK中安裝Logtail組件後,Simple Log Service自動建立名為
k8s-group-${your_k8s_cluster_id}
的機器組,您可以直接使用該機器組。重要如果需要建立機器組,請單擊建立機器組,按照右側面板進行建立。更多資訊,請參見通過控制台配置。
如果機器組心跳為FAIL,您可單擊自動重試。如果還未解決,請參見Logtail機器組無心跳進行排查。
建立Logtail採集配置,單擊下一步建立Logtail採集配置,Log Service開始採集日誌。
說明Logtail採集配置生效時間最長需要3分鐘,請耐心等待。
建立索引和預覽資料,然後單擊下一步。Log Service預設開啟全文索引。您也可以根據採集到的日誌,手動建立欄位索引,或者單擊自動產生索引,Log Service將自動產生欄位索引。更多資訊,請參見建立索引。
重要如果需要查詢日誌中的所有欄位,建議使用全文索引。如果只需查詢部分欄位、建議使用欄位索引,減少索引流量。如果需要對欄位進行分析(SELECT語句),必須建立欄位索引。
單擊查詢日誌,系統將跳轉至Logstore查詢分析頁面。
您需要等待1分鐘左右,待索引生效後,才能在原始日誌頁簽中,查看已採集到的日誌。更多資訊,請參見查詢和分析日誌。
(推薦)CRD-AliyunPipelineConfig
建立Logtail採集配置
使用AliyunPipelineConfig,需要日誌組件版本最低為0.5.1。
您只需要建立AliyunPipelineConfig CR即可建立iLogtail採集配置,建立完成後自動生效。對於通過CR建立的iLogtail採集配置,其修改只能通過更新相應的CR來實現。
執行如下命令建立一個YAML檔案。
cube.yaml
為檔案名稱,請根據實際情況替換。vim cube.yaml
在YAML檔案輸入如下指令碼,並根據實際情況設定其中的參數。
重要請確保
configName
欄位值在安裝Logtail組件的Project中唯一。每個iLogtail採集配置必須單獨設定一個對應的CR,如果多個CR關聯同一個Logtail配置,後配置的CR將不會生效。
AliyunPipelineConfig
的參數,請參見【推薦】使用AliyunPipelineConfig管理採集配置。本文的iLogtail採集配置範例包含基礎的文本日誌採集功能,參數說明參見CreateLogtailPipelineConfig - 建立Logtail流水線配置。請確保config.flushers.Logstore參數配置的Logstore已存在,可以通過配置spec.logstore參數自動建立Logstore。
採集指定容器內的單行文本日誌
建立名為
example-k8s-file
的iLogtail採集配置,對於叢集內名稱包含app
的所有容器,以單行文字模式採集/data/logs/app_1
路徑下的test.LOG
檔案,直接發送到名稱為
k8s-file
的Logstore,該Logstore屬於名稱為k8s-log-test
的Project。apiVersion: telemetry.alibabacloud.com/v1alpha1 # 建立一個 ClusterAliyunPipelineConfig kind: ClusterAliyunPipelineConfig metadata: # 設定資源名,在當前Kubernetes叢集內唯一。該名稱也是建立出的iLogtail採集配置名 name: example-k8s-file spec: # 指定目標project project: name: k8s-log-test # 建立用於儲存日誌的 Logstore logstores: - name: k8s-file # 定義iLogtail採集配置 config: # 定義輸入外掛程式 inputs: # 使用input_file外掛程式採集容器內文本日誌 - Type: input_file # 容器內的檔案路徑 FilePaths: - /data/logs/app_1/**/test.LOG # 啟用容器發現功能。 EnableContainerDiscovery: true # 添加容器資訊過濾條件,多個選項之間為“且”的關係。 ContainerFilters: # 指定待採集容器所在 Pod 所屬的命名空間,支援正則匹配。 K8sNamespaceRegex: default # 指定待採集容器的名稱,支援正則匹配。 K8sContainerRegex: ^(.*app.*)$ # 定義輸出外掛程式 flushers: # 使用flusher_sls外掛程式輸出到指定Logstore。 - Type: flusher_sls # 需要確保該 Logstore 存在 Logstore: k8s-file # 需要確保 endpoint 正確 Endpoint: cn-hangzhou.log.aliyuncs.com Region: cn-hangzhou TelemetryType: logs
採集所有容器內的多行文本日誌並正則解析
建立名為
example-k8s-file
的iLogtail採集配置,以多行文字模式採集叢集內所有容器內的/data/logs/app_1
路徑下的test.LOG
檔案,對採集到的資料進行JSON解析,直接發送到名稱為k8s-file
的Logstore,該Logstore屬於名稱為k8s-log-test
的Project。下面範例中的日誌原文通過input_file外掛程式讀取後格式為
{"content": "2024-06-19 16:35:00 INFO test log\nline-1\nline-2\nend"}
,會被正則解析外掛程式解析為{"time": "2024-06-19 16:35:00", "level": "INFO", "msg": "test log\nline-1\nline-2\nend"}
apiVersion: telemetry.alibabacloud.com/v1alpha1 # 建立一個 ClusterAliyunPipelineConfig kind: ClusterAliyunPipelineConfig metadata: # 設定資源名,在當前Kubernetes叢集內唯一。該名稱也是建立出的iLogtail採集配置名 name: example-k8s-file spec: # 指定目標project project: name: k8s-log-test # 建立用於儲存日誌的 Logstore logstores: - name: k8s-file # 定義iLogtail採集配置 config: # 日誌範例(可不填寫) sample: | 2024-06-19 16:35:00 INFO test log line-1 line-2 end # 定義輸入外掛程式 inputs: # 使用input_file外掛程式採集容器內多行文本日誌 - Type: input_file # 容器內的檔案路徑 FilePaths: - /data/logs/app_1/**/test.LOG # 啟用容器發現功能。 EnableContainerDiscovery: true # 開啟多行能力 Multiline: # 選擇自訂行首Regex模式 Mode: custom # 配置行首Regex StartPattern: \d+-\d+-\d+.* # 定義處理外掛程式 processors: # 使用正則解析外掛程式解析日誌 - Type: processor_parse_regex_native # 源欄位名 SourceKey: content # 解析用的Regex,用擷取的群組"()"捕獲待提取的欄位 Regex: (\d+-\d+-\d+\s*\d+:\d+:\d+)\s*(\S+)\s*(.*) # 提取的欄位列表 Keys: ["time", "level", "msg"] # 定義輸出外掛程式 flushers: # 使用flusher_sls外掛程式輸出到指定Logstore。 - Type: flusher_sls # 需要確保該 Logstore 存在 Logstore: k8s-file # 需要確保 endpoint 正確 Endpoint: cn-hangzhou.log.aliyuncs.com Region: cn-hangzhou TelemetryType: logs
執行如下命令使iLogtail採集配置生效。iLogtail採集配置生效後,Logtail開始採集各個容器上的文本日誌,並發送到Log Service中。
cube.yaml
為檔案名稱,請根據實際情況替換。kubectl apply -f cube.yaml
重要採集到日誌後,您需要先建立索引,才能在Logstore中查詢和分析日誌。具體操作,請參見建立索引。
CRD-AliyunLogConfig
您只需要建立AliyunLogConfig CR即可建立iLogtail採集配置,建立完成後自動生效。對於通過CR建立的iLogtail採集配置,其修改只能通過更新相應的CR來實現。
執行如下命令建立一個YAML檔案。
cube.yaml
為檔案名稱,請根據實際情況替換。vim cube.yaml
在YAML檔案輸入如下指令碼,並根據實際情況設定其中的參數。
重要請確保
configName
欄位值在安裝Logtail組件的Project中唯一。如果多個CR關聯同一個iLogtail採集配置,則刪除或修改任意一個CR均會影響到該iLogtail採集配置,導致其他關聯該iLogtail採集配置的CR狀態與Log Service中iLogtail採集配置的狀態不一致。
CR欄位的格式請參見使用AliyunLogConfig管理採集配置。本文的iLogtail採集配置範例包含基礎的文本日誌採集功能,具體參數參見CreateConfig - 建立Logtail採集配置。
採集指定容器內的單行文本日誌
“建立名為
example-k8s-file
的iLogtail採集配置,以單行文字模式採集叢集內所有名稱開頭為app
的Pod的容器內的/data/logs/app_1
路徑下的test.LOG
檔案,直接發送到名稱為k8s-file
的Logstore,該Logstore屬於名稱為k8s-log-test
的Project。”apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # 設定資源名,在當前Kubernetes叢集內唯一。 name: example-k8s-file namespace: kube-system spec: # 設定目標project名稱(可不填寫,預設為k8s-log-<your_cluster_id>) project: k8s-log-test # 設定Logstore名稱。如果您所指定的Logstore不存在,Log Service會自動建立。 logstore: k8s-file # 設定iLogtail採集配置。 logtailConfig: # 設定採集的資料來源類型。採集文本日誌時,需設定為file。 inputType: file # 設定iLogtail採集配置的名稱。 configName: example-k8s-file inputDetail: # 指定通過極簡模式採集文本日誌。 logType: common_reg_log # 設定記錄檔所在路徑。 logPath: /data/logs/app_1 # 設定記錄檔的名稱。支援萬用字元星號(*)和半形問號(?),例如log_*.log。 filePattern: test.LOG # 採集容器的文本日誌時,需設定dockerFile為true。 dockerFile: true #設定容器過濾條件。 advanced: k8s: K8sPodRegex: '^(app.*)$'
執行如下命令使其iLogtail採集配置生效。iLogtail採集配置生效後,Logtail開始採集各個容器上的文本日誌,並發送到Log Service中。
cube.yaml
為檔案名稱,請根據實際情況替換。kubectl apply -f cube.yaml
重要採集到日誌後,您需要先建立索引,才能在Logstore中查詢和分析日誌。具體操作,請參見建立索引。
查看Logtail採集配置
控制台
在Project列表地區,單擊目標Project。
在 頁簽中,單擊目標日誌庫前面的>,依次選擇 。
單擊目標Logtail採集配置,查看Logtail採集配置詳情。
(推薦)CRD-AliyunPipelineConfig
查看由AliyunPipelineConfig建立的Logtail採集配置
查看由AliyunPipelineConfig建立的Logtail採集配置的詳細資料
CRD-AliyunLogConfig
查看由AliyunLogConfig建立的iLogtail採集配置
查看由AliyunLogConfig建立的iLogtail採集配置的詳細資料
查詢分析已採集的日誌
在Project列表中,單擊目標Project,進入對應的Project詳情頁面。
在對應的日誌庫右側的表徵圖,選擇查詢分析,查看Kubernetes叢集輸出的日誌。