本文介紹如何在自建Kubernetes叢集上安裝及升級Logtail組件。
安裝Logtail
建立Project。具體操作,請參見建立專案Project。
建議建立一個以
k8s-log-custom-
開頭的Project,例如k8s-log-custom-sd89ehdq。登入您的Kubernetes叢集。
執行如下命令安裝Logtail及其他相依元件。
重要請確保用於執行指令碼的機器中,已安裝kubectl命令。
目前,alibaba-log-controller組件只支援Kubernetes 1.6及以上版本。
如果您不需要CRD功能,可以刪除
alibaba-cloud-log-all/templates/alicloud-log-config.yaml
檔案,然後重新執行下述命令。
下載安裝包並解壓。
中國地區
wget https://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/0.5.3/alibaba-cloud-log-all.tgz; tar xvf alibaba-cloud-log-all.tgz; chmod 744 ./alibaba-cloud-log-all/k8s-custom-install.sh
海外地區
wget https://logtail-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/kubernetes/0.5.3/alibaba-cloud-log-all.tgz; tar xvf alibaba-cloud-log-all.tgz; chmod 744 ./alibaba-cloud-log-all/k8s-custom-install.sh
修改設定檔
./alibaba-cloud-log-all/values.yaml
。# ===================== 必需要補充的內容 ===================== # 目標Project名稱。 SlsProjectName: # Project所屬地區。 Region: # Project所屬阿里雲帳號ID,需使用雙引號("")包裹。 AliUid: "11**99" # 阿里雲帳號或RAM使用者的AccessKey ID和AccessKey Secret,需具備AliyunLogFullAccess許可權。 AccessKeyID: AccessKeySercret: # 自訂叢集ID,命名只支援大小寫,數字,短劃線(-)。 ClusterID: # ========================================================== # 是否開啟指標採集相關組件,選擇性參數: true、false, 預設true。 SlsMonitoring: true # 網路類型,選擇性參數:Internet、Intranet,預設使用Internet。 Net: Internet # 容器運行時是否為containerd,選擇性參數: true, false, 預設false。 SLS_CONTAINERD_USED: true
命令中各參數說明如下所示,請根據實際情況替換。
參數
說明
SlsProjectName
配置為您在步驟2中建立的Project名稱。
Region
您的Project所在的地區ID。例如華東1(杭州)的地區ID為
cn-hangzhou
。更多資訊,請參見開服地區。AliUid
您的阿里雲帳號(主帳號)ID,需使用雙引號包裹(""),例如
AliUid: "11**99"
。如何擷取,請參見擷取Log Service所在的阿里雲帳號(主帳號)ID。AccessKeyID
您的阿里雲帳號的AccessKey ID。推薦使用RAM使用者的AccessKey,並授予RAM使用者AliyunLogFullAccess許可權。相關操作,請參見建立RAM使用者及授權。
AccessKeySercret
您的阿里雲帳號的AccessKey Secret。推薦使用RAM使用者的AccessKey並授予RAM使用者AliyunLogFullAccess許可權。相關操作,請參見建立RAM使用者及授權。
ClusterID
自訂叢集ID,命名只支援大小寫字母、數字、短劃線(-)。該參數對應後面操作中的
${your_k8s_cluster_id}
。重要不同的Kubernetes叢集,請勿配置相同的叢集ID。
SlsMonitoring
是否開啟指標採集相關組件,可選項:
true(預設值):開啟。
false:不開啟。
Net
網路類型。可選項:
Internet(預設值):公網。
Intranet:內網。
SLS_CONTAINERD_USED
容器運行時是否為containerd,可選項:
true:開啟。
false(預設值):不開啟。
重要在使用containerd作為容器運行時的自建Kubernetes叢集中,若未開啟相關參數,可能導致日誌無法被Logtail採集。
安裝Logtail及其他相依元件。
bash k8s-custom-install.sh; kubectl apply -R -f result
安裝完成後,在該Project下自動建立如下Log Service資源。
請勿刪除名為
config-operation-log
的Logstore。在自建Kubernetes叢集上安裝時,預設為Logtail授予
privileged
許可權,主要為避免刪除其他Pod時可能出現的container text file busy
錯誤。更多資訊,請參見Bug 1468249、Bug 1441737和 issue 34538。
資源類型 | 資源名稱 | 作用 | 樣本 |
機器組 | k8s-group-${your_k8s_cluster_id} | logtail-daemonset的機器組,主要用於日誌採集情境。 | k8s-group-my-cluster-123 |
k8s-group-${your_k8s_cluster_id}-statefulset | logtail-statefulset的機器組,主要用於指標採集情境。 | k8s-group-my-cluster-123-statefulset | |
k8s-group-${your_k8s_cluster_id}-singleton | 單一實例機器組,主要用於部分單一實例採集配置。 | k8s-group-my-cluster-123-singleton | |
Logstore | config-operation-log | 用於採集和儲存log-controller日誌。 | 無 |
查看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-ds、alibaba-log-controller)的鏡像版本號碼可能導致升級失敗。
備份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組件,即可完成自動升級。具體操作,請參見安裝Logtail。
升級復原
如果您要復原到某個版本,可參考如下步驟。
升級前備份的YAML檔案中包含不少冗餘資訊,需要您手動刪除後,才能用於恢複Logtail配置。您可以使用kubectl-neat工具完成此操作。需要刪除的欄位為metadata.creationTimestamp、metadata.generation、metadata.resourceVersion、metadata.uid和status。
根據業務需求判斷升級之後的新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採集配置,採集容器日誌。
DaemonSet方式
如果您需要通過CRD方式採集日誌,請參見通過DaemonSet-CRD方式採集容器日誌。
如果您需要通過控制台方式採集容器標準輸出,請參見通過DaemonSet-控制台方式採集容器標準輸出。
如果您需要通過控制台方式採集容器文本日誌,請參見通過DaemonSet採集Kubernetes容器文本日誌。
Sidecar方式
如果您需要通過CRD方式採集日誌,請參見通過Sidecar-CRD方式採集容器文本日誌。
如果您需要通過控制台方式採集日誌,請參見通過Sidecar-控制台方式採集容器文本日誌。
常見問題
如何查看鏡像版本?
您可以通過鏡像倉庫查看。
多個自建Kubernetes叢集如何共用一個Log ServiceProject?
如果您希望將多個自建Kubernetes叢集中的容器日誌採集到同一個Log ServiceProject中,您可以在安裝其他叢集Log Service組件時,將安裝參數中的設定與您第一次安裝叢集Log Service組件時保持一致。
如何查看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 DaemonSet狀態?
執行kubectl get ds -n kube-system
命令查看Logtail 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
表示容器名,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
啟動Logtail。
其中
logtail-ds-gb92k
表示容器名,kube-system
表示命名空間,請根據實際情況替換。kubectl exec logtail-ds-gb92k -n kube-system /etc/init.d/ilogtaild start
返回如下結果表示啟動成功。
ilogtail is running
如何採集控制平面組件日誌?
如果是自建Kubernetes叢集或者阿里雲專有版ACK叢集,您可以參見通過DaemonSet-控制台方式採集容器標準輸出完成採集。
如何卸載已安裝的logtail-ds、alibaba-log-controller等組件?
執行kubectl delete -R -f result
卸載已安裝的logtail-ds、alibaba-log-controller等組件。