全部產品
Search
文件中心

Simple Log Service:安裝Logtail組件(阿里雲Kubernetes叢集)

更新時間:Jun 30, 2024

本文介紹如何在阿里雲Kubernetes叢集上安裝及升級Logtail組件。

背景資訊

採集Kubernetes叢集中的容器日誌時,需先安裝Logtail組件。

在安裝Logtail組件過程中,系統自動完成以下操作:

  1. 建立alibaba-log-configuration ConfigMap,該ConfigMap中包含Log Service配置資訊,例如Project等。

  2. (可選)建立AliyunLogConfig CRD資源。

  3. (可選)部署alibaba-log-controller Deployment,用於監聽AliyunLogConfig CRD資源的變更、建立Logtail採集配置。

  4. 部署logtail-ds Daemonset,用於採集節點的日誌。

安裝Logtail

您可以為已有的Kubernetes叢集安裝Logtail組件,也可以在建立Kubernetes叢集時選中使用Log Service,安裝Logtail組件。

為已有的Kubernetes叢集安裝Logtail組件

重要
  • 此操作僅適用於專有版Kubernetes和託管版Kubernetes。

    如果您要採集ACK Serverless叢集中的容器文本日誌和標準輸出,請參見通過Pod環境變數採集應用日誌

  • 當您的阿里雲Kubernetes叢集與Log Service屬於不同的阿里雲帳號時,安裝Logtail組件後,您還需要使用者標識。具體操作,請參見設定阿里雲帳號為使用者標識

  1. 登入Container Service管理主控台

  2. 在左側導覽列中,單擊叢集

  3. 叢集列表頁面中,單擊目的地組群最右側的更多 > 營運管理 > 組件管理

  4. 日誌與監控頁簽中,找到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。

建立Kubernetes叢集時安裝Logtail組件

  1. 登入Container Service管理主控台

  2. 在左側導覽列中,單擊叢集

  3. 叢集列表頁面中,單擊建立叢集

  4. 組件配置配置項頁中,選中使用Log Service

    說明

    本操作僅介紹開啟Log Service的關鍵步驟。關於建立叢集的具體操作,請參見建立ACK託管叢集

    當選中使用Log Service後,會出現建立專案(Project)的提示。關於Log Service管理日誌的組織圖,請參見專案(Project)。有以下兩種建立Project方式。

    • 使用已有Project

      您可以選擇一個已有的Project來管理採集到的容器日誌。

      安裝logtail組件

    • 建立新Project

      Log Service自動建立一個名為的Project來管理採集到的容器日誌。其中ClusterID為您建立的Kubernetes叢集的唯一標識。

      安裝logtail組件

安裝完成後,在該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中手動修改的配置。

  1. 登入Container Service管理主控台

  2. 在左側導覽列中,單擊叢集

  3. 叢集列表頁面中,單擊目的地組群最右側的更多 > 營運管理 > 組件管理

  4. 日誌與監控頁簽中,找到logtail-ds,然後單擊升級

  5. 升級組件對話方塊中,單擊確定

    重要

    如果無法升級到最新版本的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為例。

  1. 登入Container Service管理主控台

  2. 在左側導覽列中,單擊叢集

  3. 叢集列表頁面中,單擊目的地組群最右側的更多 > 營運管理 > 組件管理

  4. 選擇工作負載 > 守護進程集

    說明

    當您要升級alibaba-log-controller時,請選擇工作負載 > 無狀態,然後在kube-system命名空間下,找到alibaba-log-controller,完成升級。

  5. 選擇命名空間kube-system,然後單擊logtail-ds對應的編輯

  6. 檢查如下環境變數是否存在。

    如果不存在ALIYUN_LOGTAIL_CONFIG、ALIYUN_LOGTAIL_USER_ID、ALIYUN_LOGTAIL_USER_DEFINED_ID這三個環境變數,可能是因為您的Logtail版本太舊,您可以提交工單諮詢升級方法。

  7. 單擊鏡像Tag對應的選擇鏡像Tag

  8. 鏡像Tag對話方塊中,單擊最新版本,然後單擊確定

  9. 在頁面右側,單擊更新

    執行升級操作後,您可以在Container Service管理主控台上查看logtail-ds pod狀態。如果logtail-ds pod狀態都為running,表示升級成功。

升級Logtail latest版本

由於Logtail latest版本對應的YAML檔案太舊,當您使用該版本時,升級和體驗新功能都可能遇到問題,推薦您升級到最新版本。操作步驟如下:

  1. 儲存已有的AliyunLogConfig CRD。

    請根據實際情況替換log-crds.yaml。

    kubectl get AliyunLogConfig -A -o yaml > log-crds.yaml
  2. 卸載logtail-ds組件。

    在阿里雲Container Service管理主控台的日誌與監控頁簽中,找到logtail-ds,然後單擊卸載。具體操作入口,請參見卸載Logtail

  3. 安裝logtail-ds組件。

    在阿里雲Container Service管理主控台的日誌與監控頁簽中,找到logtail-ds,然後單擊安裝。具體操作入口,請參見安裝Logtail

  4. 部署您已儲存的AliyunLogConfig CRD。

    請根據實際情況替換log-crds.yaml。

    kubectl apply -f  log-crds.yaml

升級復原

如果您要復原到某個版本,可參考如下步驟。

說明

升級前備份的YAML檔案中包含不少冗餘資訊,需要您手動刪除後,才能用於恢複Logtail配置。您可以使用kubectl-neat工具完成此操作。需要刪除的欄位為metadata.creationTimestamp、metadata.generation、metadata.resourceVersion、metadata.uid和status。

  1. 根據業務需求判斷升級之後的新Logtail配置是否需要保留。

    如果不需要保留,則可以刪除升級之後的新Logtail配置。

  2. 刪除備份檔案中的冗餘資訊。

    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
  3. 應用精簡後的備份檔案,恢複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

  1. 登入Container Service管理主控台

  2. 在左側導覽列中,單擊叢集

  3. 叢集列表頁面中,單擊目的地組群最右側的更多 > 營運管理 > 組件管理

  4. 日誌與監控頁簽中,找到logtail-ds,然後單擊卸載

  5. 根據介面提示單擊確定,完成卸載。

後續步驟

建立Logtail採集配置,採集容器日誌。

常見問題

如何查看鏡像版本?

您可以通過鏡像倉庫查看。

多個Kubernetes叢集如何共用一個Log ServiceProject?

說明

此方式不支援跨地區的Kubernetes多叢集共用。

如果您希望將多個阿里雲Kubernetes叢集中的容器日誌採集到同一個Log ServiceProject中,您可以在建立Kubernetes叢集時選擇相同的Project。

如何查看Logtail日誌?

Logtail日誌儲存在Logtail容器中的/usr/local/ilogtail/目錄中,檔案名稱為ilogtail.LOGlogtail_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?

  1. 停止Logtail。

  2. 其中logtail-ds-gb92k -n表示容器名,kube-system表示命名空間,請根據實際情況替換。

  3. 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
  4. 啟動Logtail。

  5. 其中logtail-ds-gb92k -n表示容器名,kube-system表示命名空間,請根據實際情況替換。

  6. kubectl exec logtail-ds-gb92k -n kube-system /etc/init.d/ilogtaild start

    返回如下結果表示啟動成功。

    ilogtail is running 

相關文檔