工作流完成時,一般需要配置工作流和Pod的回收策略清理相應的資源,以避免集群控制面和工作流控制器資源的線性增長。當工作流出現問題或需要進行流程分析時,查看工作流日志是一個必不可少的能力。由于原生的集群在Pod清理后就不能查看Pod或工作流日志,因此,工作流集群集成了阿里云日志服務SLS,收集工作流運行過程中Pod產生的日志,上報到您賬號下的SLS服務中,并且支持通過Argo CLI或Argo UI便捷地查看工作流的日志。
使用說明
日志收集后,如果工作流還在集群中,無論Pod是否被刪除,您都可以通過Argo CLI和Argo UI查看工作流相關的Pod日志。
如果工作流在集群中被刪除,但是已經持久化到數據庫中,您可以通過Argo CLI下載工作流日志的ZIP包或者直接訪問日志服務控制臺查看日志。
關于如何將工作流持久化到數據庫中,請參見持久化工作流。
注意事項
如果工作流集群開啟
oss-artifact-repository
,同時設置archiveLogs: true
,即工作流集群已配置使用oss-artifact-repository
存儲日志,則SLS日志收集不生效。相比
oss-artifact-repository
收集,SLS日志收集具有自動的日志生命周期管理(可配置日志保留的天數),強大的查詢能力。如需通過SLS收集日志,可以將archiveLogs: true
刪除。
前提條件
若您選擇使用Argo CLI方式開啟日志服務和獲取日志,您需要提前完成以下操作:
下載并安裝v3.4.12或以上版本的阿里云Argo CLI。具體操作,請參見阿里云Argo CLI。
若您使用的賬號為RAM用戶,則需要為RAM用戶授予日志服務SLS的只讀權限,系統權限策略為AliyunLogReadOnlyAccess。具體授權操作,請參見創建RAM用戶及授權。
開啟日志服務
工作流集群創建后,系統會自動創建一個名為k8s-log-<clusterid>的Project,用來收集工作流集群日志。如果日志服務Project不存在,請自行創建名為k8s-log-<clusterid>的Project。關于創建Project的具體操作,請參見創建Project。
您可以通過阿里云 Argo CLI或者通過直接創建日志服務CR兩種方式開啟日志服務。
通過阿里云Argo CLI開啟
阿里云Argo CLI完全兼容開源Argo CLI,增強了日志能力,可以獲取工作流已刪除Pod的日志。
執行以下命令,配置日志服務參數。
argo config sls
Please input log retention days. Default is 7 days.
10
預期輸出:
Start to config SLS for your cluster.
Created AliyunLogConfig CR workflow-sls-config in default namespace.
Created SLS logstore workflow-logstore in SLS project k8s-log-<clusterid>, log retention days is 10 days
預期輸出表明,日志服務配置成功。所有工作流日志將被收集到名為workflow-logstore的日志庫(Logstore)中。
您可以登錄日志服務控制臺,查找名為k8s-log-<clusterid>的Project,然后查看對應的workflow-logstore。
通過創建日志服務CR開啟
執行以下命令,創建阿里云日志配置CR。日志服務控制器會自動創建一個名為k8s-log-<clusterid>的Project和一個名為workflow-logstore的日志庫(Logstore)。
cat << EOF | kubectl apply -f -
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: workflow-sls-config
namespace: default
spec:
# log will store for 5 days
lifeCycle: 5
logstore: workflow-logstore
logtailConfig:
inputType: plugin
configName: workflow-sls-config
inputDetail:
plugin:
inputs:
- detail:
Stderr: true
Stdout: true
type: service_docker_stdout
EOF
通過Argo CLI訪問日志服務
訪問集群中的工作流日志
通過Argo CLI可以訪問在集群中現存的工作流的日志,包括已存在的Pod和刪除的Pod。
在集群中存在的Pod可以通過原生kubectl logs <pod-name>
訪問,默認最多顯示2000行日志,若該方式顯示的日志數量不夠或者需要訪問已經刪除的Pod,可以通過以下兩種方式訪問SLS的日志。
通過Argo CLI直接訪問SLS(推薦)
執行以下命令,配置訪問權限。
argo config init #按照提示配置相關信息,包括ak、sk等。
執行以下命令獲取對應Pod的日志。
argo logs <workflow-name> <pod-name> --sls # 獲取對應Pod日志。 argo logs <workflow-name> --sls # 獲取對應workflow日志ZIP包。
通過訪問Argo Server訪問SLS
如需通過Argo CLI訪問已刪除Pod的日志,則需要先開啟Argo Server并配置相關參數。
通過日志服務獲取工作流日志,必須指定<pod-name>
。
若需要訪問其他Namespace的Workflow/Pod,則獲取KUBE_TOKEN
時,需要使用對應Namespace。
執行以下命令,開啟Argo Server并配置參數。
export ARGO_SERVER=argo.<cluster id>.<region>.alicontainer.com:2746 export KUBE_TOKEN=$(k create token default -n default --duration 24h) export ARGO_TOKEN="Bearer $KUBE_TOKEN" export ARGO_INSECURE_SKIP_VERIFY=true
執行以下命令,獲取工作流Pod的日志。
argo logs <workflow-name> <pod-name>
訪問持久化到數據庫的工作流日志
您可以配置持久化工作流,將工作流持久化保存到數據庫中,即使工作流在集群中被刪除,也可以通過Agro CLI方式下載工作流日志。
執行以下命令,配置訪問權限。
argo config init #按照提示配置相關信息,包括ak、sk等。
執行以下命令查詢工作流的UID。
# argo archive list NAMESPACE NAME STATUS AGE DURATION PRIORITY MESSAGE P/R/C PARAMETERS UID default hello-world-l6c2r Succeeded 3d 1m 0 0/0/0 179eaef0-fde3-496f-946d-549e8f******
下載工作流日志。
# argo archive logs 179eaef0-fde3-496f-946d-549e8f****** # ls hello-world-l6c2r.zip
通過Argo UI訪問日志服務
無論工作流Pod是否被刪除,您都可以通過Argo UI訪問Pod的日志。如果Pod被刪除,則訪問SLS獲取日志并顯示到Argo UI,如下圖所示。
關閉日志服務
執行以下命令,刪除AliyunLogConfig CR。
kubectl delete aliyunlogconfigs.log.alibabacloud.com workflow-sls-config -n default
登錄日志服務控制臺,將名為workflow-logstore的日志庫刪除。