本文介紹如何在阿里雲Kubernetes叢集上安裝及升級Logtail組件。
背景資訊
採集阿里雲Kubernetes叢集中的容器日誌時,需先安裝Logtail組件。 在安裝過程中,Log Service自動完成以下操作:
建立alibaba-log-configuration ConfigMap,該ConfigMap中包含Log Service配置資訊,例如Project等。
(可選)建立ClusterAliyunPipelineConfig、AliyunLogConfig CRD資源。
(可選)部署alibaba-log-controller Deployment以及配套的Webhook,用於監聽和校正ClusterAliyunPipelineConfig、AliyunLogConfig CRD資源的變更、建立Logtail採集配置。
部署logtail-ds DaemonSet,用於採集節點的日誌。
安裝Logtail組件
為已有的ACK叢集安裝Logtail組件
此操作僅適用於專有版Kubernetes和託管版Kubernetes。
如果您要採集ACK Serverless叢集中的容器文本日誌和標準輸出,請參見通過Pod環境變數採集應用日誌。
當您的阿里雲Kubernetes叢集與Log Service屬於不同的阿里雲帳號時,安裝Logtail組件後,您還需要使用者標識。具體操作,請參見設定阿里雲帳號為使用者標識。
在左側導覽列中,單擊叢集。
在叢集列表頁面中,單擊目的地組群最右側的 。
在日誌與監控頁簽中,找到logtail-ds,然後單擊安裝。
安裝完成後,Log Service會自動產生名
k8s-log-${your_k8s_cluster_id}
的Project,並在該Project下產生名為k8s-group-${your_k8s_cluster_id}
的機器組和名為config-operation-log
的Logstore。重要請勿刪除名為
config-operation-log
的Logstore。
建立ACK叢集時安裝Logtail組件
在左側導覽列中,單擊叢集。
在叢集列表頁面中,單擊建立叢集。
在組件配置配置項頁中,選中使用Log Service。
說明本操作僅介紹開啟Log Service的關鍵步驟。關於建立叢集的具體操作,請參見建立ACK託管叢集。
當選中使用Log Service後,會出現建立專案(Project)的提示。關於Log Service管理日誌的組織圖,請參見專案(Project)。有以下兩種建立Project方式。
使用已有Project
您可以選擇一個已有的Project來管理採集到的容器日誌。
建立新Project
Log Service自動建立一個名為的Project來管理採集到的容器日誌。其中
ClusterID
為您建立的Kubernetes叢集的唯一標識。
安裝完成後,在該Project下自動建立名為k8s-group-${your_k8s_cluster_id}
的機器組和名為config-operation-log
的Logstore。
請勿刪除名為config-operation-log
的Logstore。
查看Logtail狀態、版本及IP地址
查看Logtail狀態
運行如下命令,查看Logtail狀態等資訊。
kubectl get po -n kube-system | grep logtail
返回結果如下:
NAME READY STATUS RESTARTS AGE
logtail-ds-gb92k 1/1 Running 0 2h
logtail-ds-wm7lw 1/1 Running 0 4d
查看Logtail版本及IP地址
運行如下命令,查看Logtail的版本號碼、IP地址等資訊。
kubectl exec logtail-ds-gb92k -n kube-system cat /usr/local/ilogtail/app_info.json
返回結果如下:
{
"UUID" : "",
"hostname" : "logtail-ds-gb92k",
"instance_id" : "0EBB2B0E-0A3B-11E8-B0CE-0A58AC140402_172.20.4.2_1517810940",
"ip" : "192.0.2.0",
"logtail_version" : "0.16.2",
"os" : "Linux; 3.10.0-693.2.2.el7.x86_64; #1 SMP Tue Sep 12 22:26:13 UTC 2017; x86_64",
"update_time" : "2021-02-05 06:09:01"
}
升級Logtail
檔案備份
升級期間(數秒內),因Logtail容器重啟,可能出現少量資料被重複或丟失採集的情況。
在升級前,您需要對Logtail組件相關描述檔案進行備份。
kubectl get ds -n kube-system logtail-ds -o yaml > logtail-ds.yaml
kubectl get deployment -n kube-system alibaba-log-controller -o yaml > alibaba-log-controller.yaml
kubectl get crd aliyunlogconfigs.log.alibabacloud.com -o yaml > aliyunlogconfigs-crd.yaml
kubectl get cm -n kube-system alibaba-log-configuration -o yaml > alibaba-log-configuration.yaml
kubectl get aliyunlogconfigs --all-namespaces -o yaml > aliyunlogconfigs-cr.yaml
組件升級
一般情況下,推薦您使用自動升級方式。如果您在logtail-ds的DaemonSet中或者在alibaba-log-controller的Deployment中修改過參數(例如環境變數),那麼為了使您的修改不被重設,建議使用手動升級方式。
自動升級
自動升級會重設您在logtail-ds和alibaba-log-controller中手動修改的配置。
在左側導覽列中,單擊叢集。
在叢集列表頁面中,單擊目的地組群最右側的 。
在日誌與監控頁簽中,找到logtail-ds,然後單擊升級。
在升級組件對話方塊中,單擊確定。
重要如果無法升級到最新版本的Logtail,說明您的Kubernetes叢集版本太舊。請先升級Kubernetes叢集或者使用手動升級方式。
執行升級操作後,您可以在Container Service管理主控台上查看logtail-ds pod狀態。如果logtail-ds pod狀態都為running,表示升級成功。
手動升級
手動升級不會根據最新版本的Logtail組件更新您的配置,部分特性最佳化可能不可用。
手動升級包括升級logtail-ds和alibaba-log-controller。一般情況下,您只需要升級logtail-ds即可擷取新版本Logtail提供的採集能力。當您需要擷取新版Logtail CRD方式的採集能力時,需要升級alibaba-log-controller。以下步驟以logtail-ds為例。
在左側導覽列中,單擊叢集。
在叢集列表頁面中,單擊目的地組群最右側的 。
選擇
。說明當您要升級alibaba-log-controller時,請選擇
,然後在kube-system命名空間下,找到alibaba-log-controller,完成升級。選擇命名空間為kube-system,然後單擊logtail-ds對應的編輯。
檢查如下環境變數是否存在。
如果不存在ALIYUN_LOGTAIL_CONFIG、ALIYUN_LOGTAIL_USER_ID、ALIYUN_LOGTAIL_USER_DEFINED_ID這三個環境變數,可能是因為您的Logtail版本太舊,您可以提交工單諮詢升級方法。
單擊鏡像Tag對應的選擇鏡像Tag。
在鏡像Tag對話方塊中,單擊最新版本,然後單擊確定。
在頁面右側,單擊更新。
執行升級操作後,您可以在Container Service管理主控台上查看logtail-ds pod狀態。如果logtail-ds pod狀態都為running,表示升級成功。
升級Logtail latest版本
由於Logtail latest版本對應的YAML檔案太舊,當您使用該版本時,升級和體驗新功能都可能遇到問題,推薦您升級到最新版本。操作步驟如下:
儲存已有的AliyunLogConfig CRD。
請根據實際情況替換log-crds.yaml。
kubectl get AliyunLogConfig -A -o yaml > log-crds.yaml
卸載logtail-ds組件。
在阿里雲Container Service管理主控台的日誌與監控頁簽中,找到logtail-ds,然後單擊卸載。具體操作入口,請參見卸載Logtail。
安裝logtail-ds組件。
在阿里雲Container Service管理主控台的日誌與監控頁簽中,找到logtail-ds,然後單擊安裝。具體操作入口,請參見安裝Logtail組件。
部署您已儲存的AliyunLogConfig CRD。
請根據實際情況替換log-crds.yaml。
kubectl apply -f log-crds.yaml
升級復原
如果您要復原到某個版本,可參考如下步驟。
升級前備份的YAML檔案中包含不少冗餘資訊,需要您手動刪除後,才能用於恢複Logtail配置。您可以使用kubectl-neat工具完成此操作。需要刪除的欄位為metadata.creationTimestamp、metadata.generation、metadata.resourceVersion、metadata.uid和status。
根據業務需求判斷升級之後的新Logtail配置是否需要保留。
如果不需要保留,則可以刪除升級之後的新Logtail配置。
刪除備份檔案中的冗餘資訊。
cat logtail-ds.yaml | kubectl-neat > neat-logtail-ds.yaml cat alibaba-log-controller.yaml | kubectl-neat > neat-alibaba-log-controller.yaml cat aliyunlogconfigs-crd.yaml | kubectl-neat > neat-aliyunlogconfigs-crd.yaml cat alibaba-log-configuration.yaml | kubectl-neat > neat-alibaba-log-configuration.yaml cat aliyunlogconfigs-cr.yaml | kubectl-neat > neat-aliyunlogconfigs-cr.yaml
應用精簡後的備份檔案,恢複Logtail配置。
kubectl apply -f neat-logtail-ds.yaml kubectl apply -f neat-alibaba-log-controller.yaml kubectl apply -f neat-aliyunlogconfigs-crd.yaml kubectl apply -f neat-alibaba-log-configuration.yaml kubectl apply -f neat-aliyunlogconfigs-cr.yaml
卸載Logtail
在左側導覽列中,單擊叢集。
在叢集列表頁面中,單擊目的地組群最右側的 。
在日誌與監控頁簽中,找到logtail-ds,然後單擊卸載。
根據介面提示單擊確定,完成卸載。
後續步驟
常見問題
如何查看鏡像版本?
您可以通過鏡像倉庫查看。
多個Kubernetes叢集如何共用一個Log ServiceProject?
此方式不支援跨地區的Kubernetes多叢集共用。
如果您希望將多個阿里雲Kubernetes叢集中的容器日誌採集到同一個Log ServiceProject中,您可以在建立Kubernetes叢集時選擇相同的Project。
如何查看Logtail日誌?
Logtail日誌儲存在Logtail容器中的/usr/local/ilogtail/目錄中,檔案名稱為ilogtail.LOG和logtail_plugin.LOG。
Logtail容器中的標準輸出並不具備參考意義,請忽略以下標準輸出內容。
start umount useless mount points, /shm$|/merged$|/mqueue$
umount: /logtail_host/var/lib/docker/overlay2/3fd0043af174cb0273c3c7869500fbe2bdb95d13b1e110172ef57fe840c82155/merged: must be superuser to unmount
umount: /logtail_host/var/lib/docker/overlay2/d5b10aa19399992755de1f85d25009528daa749c1bf8c16edff44beab6e69718/merged: must be superuser to unmount
umount: /logtail_host/var/lib/docker/overlay2/5c3125daddacedec29df72ad0c52fac800cd56c6e880dc4e8a640b1e16c22dbe/merged: must be superuser to unmount
......
xargs: umount: exited with status 255; aborting
umount done
start logtail
ilogtail is running
logtail status:
ilogtail is running
如何查看Kubernetes叢集中Log Service相關組件的狀態?
執行如下命令進行查看。
kubectl get deploy alibaba-log-controller -n kube-system
kubectl get ds logtail-ds -n kube-system
alibaba-log-controller啟動失敗,該怎麼處理?
請確認您是否按照以下方式進行安裝。
在Kubernetes叢集的Master節點中執行安裝命令。
安裝命令參數中輸入的是您的叢集ID。
如果由於以上問題安裝失敗,請使用kubectl delete -f deploy
命令刪除已產生的安裝模板並重新執行安裝命令。
如何查看Kubernetes叢集中Logtail-ds DaemonSet狀態?
執行kubectl get ds -n kube-system
命令查看Logtail-ds DaemonSet狀態。
Logtail容器所在的命名空間,預設為kube-system。
如何查看Logtail的作業記錄?
Logtail作業記錄儲存在/usr/local/ilogtail/目錄下,檔案名稱為ilogtail.LOG,輪轉檔案會壓縮儲存為ilogtail.LOG.x.gz。例如執行如下命令查看日誌。
kubectl exec logtail-ds-gb92k -n kube-system tail /usr/local/ilogtail/ilogtail.LOG
返回結果如下:
[2018-02-05 06:09:02.168693] [INFO] [9] [build/release64/sls/ilogtail/LogtailPlugin.cpp:104] logtail plugin Resume:start
[2018-02-05 06:09:02.168807] [INFO] [9] [build/release64/sls/ilogtail/LogtailPlugin.cpp:106] logtail plugin Resume:success
[2018-02-05 06:09:02.168822] [INFO] [9] [build/release64/sls/ilogtail/EventDispatcher.cpp:369] start add existed check point events, size:0
[2018-02-05 06:09:02.168827] [INFO] [9] [build/release64/sls/ilogtail/EventDispatcher.cpp:511] add existed check point events, size:0 cache size:0 event size:0 success count:0
如何重啟某個Pod中的Logtail?
停止Logtail。
其中
logtail-ds-gb92k -n
表示容器名,kube-system
表示命名空間,請根據實際情況替換。啟動Logtail。
其中
logtail-ds-gb92k -n
表示容器名,kube-system
表示命名空間,請根據實際情況替換。
kubectl exec logtail-ds-gb92k -n kube-system /etc/init.d/ilogtaild stop
返回如下結果表示停止成功。
kill process Name: ilogtail pid: 7
kill process Name: ilogtail pid: 9
stop success
kubectl exec logtail-ds-gb92k -n kube-system /etc/init.d/ilogtaild start
返回如下結果表示啟動成功。
ilogtail is running
相關文檔
自訂K8s叢集安裝Logtail,請參見安裝Logtail組件(自建Kubernetes叢集)。
您可以在Container Service管理主控台中開啟控制平面組件日誌的採集。具體操作,請參見收集ACK託管叢集控制平面組件日誌。
ASK容器採集日誌,請參見ASK Pro版叢集控制平面組件日誌。
容器在配置Logtail配置時查詢不到機器組,或者機器組無心跳,請參見Logtail機器組問題排查思路(主機情境)。
在採集日誌出現異常時,排查思路請參見如何排查容器日誌採集異常。
在配置Logtail時,過濾容器請參見通過DaemonSet-控制台方式採集容器標準輸出。