本文介紹如何通過控制台建立iLogtail採集配置,並以DaemonSet採集方式採集容器標準輸出。
前提條件
- 已安裝Logtail組件。具體操作,請參見安裝Logtail組件(阿里雲Kubernetes叢集)。
- 在您安裝Logtail組件時所使用的Project中已完成Logstore建立。具體操作,請參見建立Logstore。
- 目標容器持續產生日誌。重要 Logtail只採集增量日誌。如果下發Logtail配置後,記錄檔無更新,則Logtail不會採集該檔案中的日誌。更多資訊,請參見讀取日誌。
功能特點
Logtail支援採集容器內產生的標準輸出,並附加容器的相關中繼資料資訊一起上傳到Log Service。Logtail具備以下功能特點。
支援採集標準輸出資訊(stdout)和標準出錯資訊(stderr)。
支援通過容器Label白名單指定待採集的容器。
支援通過容器Label黑名單排除不要採集的容器。
支援通過環境變數白名單指定待採集的容器。
支援通過環境變數黑名單排除不要採集的容器。
支援採集多行日誌(例如Java Stack日誌)。
支援上報容器日誌時自動關聯Meta資訊(例如容器名、鏡像、Pod、Namespace、環境變數等)。
當容器運行於Kubernetes時,Logtail還具有以下功能。
支援通過Kubernetes Namespace名稱、Pod名稱、容器名稱指定待採集的容器。
支援通過Kubernetes Label白名單指定待採集的容器。
支援通過Kubernetes Label黑名單排除不要採集的容器。
支援上報容器日誌時自動關聯Kubernetes Label資訊。
實現原理
Logtail與Docker的Domain Socket進行通訊,查詢該Docker上啟動並執行所有容器,並根據容器中的Label和環境變數定位需要被採集的容器。Logtail通過容器元資訊擷取容器標準輸出log-file的位置進行資料擷取。
Logtail在採集容器的標準輸出時,會定期將採集的點位資訊儲存到checkpoint檔案中。如果Logtail停止後再次啟動,會從上一次儲存的點位開始採集。
使用限制
此功能目前僅支援Linux作業系統,依賴Logtail 0.16.0及以上版本。版本查看與升級,請參見安裝Logtail(Linux系統)。
Logtail支援Docker和Containerd兩種容器引擎的資料擷取,訪問路徑說明如下:
Docker:Logtail通過/run/docker.sock訪問Docker,請確保該路徑存在且具備存取權限。
Containerd:Logtail通過/run/containerd/containerd.sock訪問Containerd,請確保該路徑存在且具備存取權限。
多行日誌限制:為保證多行組成的一條日誌不因為輸出延遲而被分割成多條,多行日誌情況下,採集的最後一條日誌預設都會緩衝一段時間。預設緩衝時間為3秒,可通過
BeginLineTimeoutMs
參數修改,但此值不能低於1000(毫秒),否則容易出現誤判。採集停止策略:當容器被停止後,Logtail監聽到容器
die
的事件後會停止採集該容器的標準輸出。如果此時採集出現延遲,則可能丟失停止前的部分輸出。Docker容器引擎節流:目前標準輸出採集僅支援JSON類型的日誌驅動。
上下文限制:預設同一Logtail配置下的所有容器的標準輸出處於同一上下文中,即無法使用控制台的上下文查詢及Livetail功能直接查看某一容器標準輸出的上下文。如果需要使用這些功能,請添加日誌上下文彙總外掛程式。更多資訊,請參見aggregators配置。
資料處理:採集到的資料預設儲存在
content
欄位中。Logtail對於採集到的容器標準輸出,支援資料處理。更多資訊,請參見使用Logtail外掛程式處理資料。
建立Logtail採集配置(舊版)
表單配置方式
登入Log Service控制台,在Project列表,單擊開啟目標Project。
在
頁簽中,單擊目標Logstore。展開Logstore功能表列,單擊Logtail配置,然後單擊添加Logtail配置。
在快速資料接入頁面,單擊K8S-標準輸出-舊版。
在機器組配置步驟中,選擇Logtail組件自動建立的機器組,一般命名為
k8s-group-*
。然後單擊下一步。在Logtail配置步驟中,完成如下配置。
重要參數說明如下:
後續步驟根據嚮導完成即可。
CRD-AliyunPipelineConfig(推薦)
如果使用AliyunPipelineConfig,需要日誌組件版本最低為0.5.1。
您只需要建立AliyunPipelineConfig CR即可建立iLogtail採集配置。建立完成後,系統自動應用該iLogtail採集配置。
執行如下命令建立一個YAML檔案。
cube.yaml
為檔案名稱,請根據實際情況替換。vim cube.yaml
在YAML檔案中輸入如下指令碼,並根據實際情況設定其中的參數。
重要每個iLogtail採集配置必須單獨設定一個對應的CR,如果多個CR關聯同一個Logtail配置,後配置的CR將不會生效。
AliyunPipelineConfig
的參數,請參見【推薦】使用AliyunPipelineConfig管理採集配置。本文的iLogtail採集配置範例包含基礎的標準輸出採集功能,參數說明參見CreateLogtailPipelineConfig - 建立Logtail流水線配置。請確保
config.flushers.Logstore
參數配置的Logstore
已存在,可以通過配置spec.logstore
參數自動建立Logstore。
多行模式採集指定容器的標準輸出
建立名為
k8s-stdout-
的iLogtail採集配置,對於叢集內名稱包含app
的所有容器,以多行模式採集標準輸出,直接發送到名稱為k8s-stdout
的Logstore,該Logstore屬於名稱為k8s-log-clusterid
的Project。apiVersion: telemetry.alibabacloud.com/v1alpha1 # 建立一個 ClusterAliyunPipelineConfig kind: ClusterAliyunPipelineConfig metadata: # 設定資源名,在當前Kubernetes叢集內唯一。該名稱也是建立出的iLogtail採集配置名 name: example-k8s-stdout spec: # 指定目標project project: name: k8s-log-clusterid # 建立用於儲存日誌的 Logstore logstores: - name: k8s-stdout # 定義iLogtail採集配置 config: # 日誌範例(可不填寫) sample: | 2024-06-19 16:35:00 INFO test log line-1 line-2 end # 定義輸入外掛程式 inputs: # 使用service_docker_stdout外掛程式採集容器內文本日誌 - Type: service_docker_stdout Stdout: true Stderr: true # 配置容器資訊過濾條件,多個選項之間為“且”的關係。 # 指定待採集容器所在 Pod 所屬的命名空間,支援正則匹配。 K8sNamespaceRegex: "^(default)$" # 指定待採集容器的名稱,支援正則匹配。 K8sContainerRegex: "^(.*app.*)$" # 配置多行切分配置 # 配置行首Regex BeginLineRegex: \d+-\d+-\d+.* # 定義輸出外掛程式 flushers: # 使用flusher_sls外掛程式輸出到指定Logstore。 - Type: flusher_sls Logstore: k8s-stdout 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採集配置。建立完成後,系統自動應用該iLogtail採集配置。
執行如下命令建立一個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-stdout-example
的Logtail採集配置,以單行文字模式採集叢集內所有名稱開頭為app的Pod的容器內的標準輸出,直接發送到名稱為k8s-stdout
的Logstore,該Logstore屬於名稱為k8s-log-clusterid
的Project。# 標準輸出配置 apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # 設定資源名,在當前Kubernetes叢集內唯一。 name: simple-stdout-example spec: # 設定Logstore名稱。如果您所指定的Logstore不存在,Log Service會自動建立。 logstore: k8s-stdout # 設定Logtail採集配置。 logtailConfig: # 設定採集的資料來源類型。採集標準輸出時,需設定為plugin。 inputType: plugin # 設定Logtail採集配置的名稱,必須與資源名(metadata.name)相同。 configName: simple-stdout-example inputDetail: plugin: inputs: - # input type type: service_docker_stdout detail: # 指定採集stdout和stderr。 Stdout: true Stderr: true K8sPodRegex: "^(app.*)$"
執行如下命令使iLogtail採集配置生效。iLogtail採集配置生效後,Logtail開始採集各個容器上的標準輸出,並發送到Log Service中。
cube.yaml
為檔案名稱,請根據實際情況替換。kubectl apply -f cube.yaml
重要採集到日誌後,您需要先建立索引,才能在Logstore中查詢和分析日誌。具體操作,請參見建立索引。
預覽容器元資訊
建立Logtail配置後,您可以在Logtail配置頁面查看容器元資訊以及容器未匹配過濾條件的原因。
僅Linux Logtail 1.4.0及以上版本或Windows Logtail 1.4.0.0及以上版本支援該功能。
在Project列表中,單擊您在建立Logtail配置所使用的Project。
在
頁簽中,選擇您在建立Logtail配置所使用的Logstore,然後單擊Logstore左側的>,選擇 。在Logtail配置列表中,單擊目標Logtail配置。
在Logtail配置頁面中,單擊編輯。
開啟啟用容器元資訊預覽開關。
單擊容器元資訊預覽。
在容器預覽對話方塊中,查看容器的元資訊。
匹配容器頁簽中展示匹配您所設定的過濾條件的容器的元資訊。
全量容器頁簽中展示當前Kubernetes叢集中所有容器的元資訊以及容器未匹配過濾條件的原因。
日誌欄位
Kubernetes叢集的每條日誌預設上傳的欄位如下所示。
欄位名稱 | 說明 |
_time_ | 日誌採集時間。 |
_source_ | 日誌源類型,stdout或stderr。 |
_image_name_ | 鏡像名 |
_container_name_ | 容器名 |
_pod_name_ | Pod名 |
_namespace_ | Pod所在的命名空間 |
_pod_uid_ | Pod的唯一標識 |
問題排查
當您使用Logtail採集容器(標準容器、Kubernetes)日誌遇到異常情況時,您可以參見如下內容進行排查。
當標準錯誤日誌與訪問日誌格式不同,無法正常解析時,建議針對content加索引去搜尋error。Log Service不支援使用提取欄位的外掛程式來做解析。更多資訊,請參見建立索引。