本文介紹如何在阿里云Kubernetes集群上安裝及升級Logtail組件。
背景信息
采集阿里云Kubernetes集群中的容器日志時,需先安裝Logtail組件。 在安裝過程中,日志服務自動完成以下操作:
創建alibaba-log-configuration ConfigMap,該ConfigMap中包含日志服務配置信息,例如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集群與日志服務屬于不同的阿里云賬號時,安裝Logtail組件后,您還需要用戶標識。具體操作,請參見設置阿里云賬號為用戶標識。
登錄容器服務管理控制臺。
在左側導航欄中,單擊集群。
在集群列表頁面中,單擊目標集群最右側的 。
在日志與監控頁簽中,找到logtail-ds,然后單擊安裝。
安裝完成后,日志服務會自動生成名
k8s-log-${your_k8s_cluster_id}
的Project,并在該Project下生成名為k8s-group-${your_k8s_cluster_id}
的機器組和名為config-operation-log
的Logstore。重要請勿刪除名為
config-operation-log
的Logstore。
新建ACK集群時安裝Logtail組件
登錄容器服務管理控制臺。
在左側導航欄中,單擊集群。
在集群列表頁面中,單擊創建集群。
在組件配置配置項頁中,選中使用日志服務。
說明本操作僅介紹開啟日志服務的關鍵步驟。關于創建集群的具體操作,請參見創建ACK托管集群。
當選中使用日志服務后,會出現創建項目(Project)的提示。關于日志服務管理日志的組織結構,請參見項目(Project)。有以下兩種創建Project方式。
使用已有Project
您可以選擇一個已有的Project來管理采集到的容器日志。
創建新Project
日志服務自動創建一個名為的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集群或者使用手動升級方式。
執行升級操作后,您可以在容器服務管理控制臺上查看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對話框中,單擊最新版本,然后單擊確定。
在頁面右側,單擊更新。
執行升級操作后,您可以在容器服務管理控制臺上查看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組件。
在阿里云容器服務管理控制臺的日志與監控頁簽中,找到logtail-ds,然后單擊卸載。具體操作入口,請參見卸載Logtail。
安裝logtail-ds組件。
在阿里云容器服務管理控制臺的日志與監控頁簽中,找到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集群如何共用一個日志服務Project?
此方式不支持跨地域的Kubernetes多集群共享。
如果您希望將多個阿里云Kubernetes集群中的容器日志采集到同一個日志服務Project中,您可以在創建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集群中日志服務相關組件的狀態?
執行如下命令進行查看。
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集群)。
您可以在容器服務管理控制臺中開啟控制平面組件日志的采集。具體操作,請參見收集ACK托管集群控制平面組件日志。
ASK容器采集日志,請參見ASK Pro版集群控制平面組件日志。
容器日志采集過程中,出現問題,首先可以采取快速診斷工具診斷。更多信息,請參見如何使用Logtail容器快速診斷工具。
容器在配置Logtail配置時查詢不到機器組,或者機器組無心跳,請參見Logtail機器組問題排查思路(主機場景)。
在采集日志出現異常時,排查思路請參見如何排查容器日志采集異常。
在配置Logtail時,過濾容器請參見通過DaemonSet-控制臺方式采集容器標準輸出。