全部產品
Search
文件中心

Container Service for Kubernetes:使用Log Service

更新時間:Jun 19, 2024

工作流程完成時,一般需要配置工作流程和Pod的回收策略清理相應的資源,以避免叢集控制面和工作流程控制器資源的線性增長。當工作流程出現問題或需要進行流程分析時,查看工作流程日誌是一個必不可少的能力。由於原生的叢集在Pod清理後就不能查看Pod或工作流程日誌,因此,工作流程叢集整合了阿里雲Log ServiceSLS,收集工作流程運行過程中Pod產生的日誌,上報到您帳號下的SLS服務中,並且支援通過Argo CLI或Argo UI便捷地查看工作流程的日誌。

使用說明

注意事項

  • 如果工作流程叢集開啟oss-artifact-repository,同時設定archiveLogs: true,即工作流程叢集已配置使用oss-artifact-repository儲存日誌,則SLS日誌收集不生效。

  • 相比oss-artifact-repository收集,SLS日誌收集具有自動的日誌生命週期管理(可配置日誌保留的天數),強大的查詢能力。如需通過SLS收集日誌,可以將archiveLogs: true刪除。

前提條件

若您選擇使用Argo CLI方式開啟Log Service和擷取日誌,您需要提前完成以下操作:

  • 下載並安裝v3.4.12或以上版本的阿里雲Argo CLI。具體操作,請參見阿里雲Argo CLI

  • 若您使用的帳號為RAM使用者,則需要為RAM使用者授予Log ServiceSLS的唯讀許可權,系統權限原則為AliyunLogReadOnlyAccess。具體授權操作,請參見建立RAM使用者及授權

開啟Log Service

工作流程叢集建立後,系統會自動建立一個名為k8s-log-<clusterid>的Project,用來收集工作流程叢集日誌。如果Log ServiceProject不存在,請自行建立名為k8s-log-<clusterid>的Project。關於建立Project的具體操作,請參見建立Project

您可以通過阿里雲 Argo CLI或者通過直接建立Log ServiceCR兩種方式開啟Log Service。

通過阿里雲Argo CLI開啟

阿里雲Argo CLI完全相容開源Argo CLI,增強了日誌能力,可以擷取工作流程已刪除Pod的日誌。

執行以下命令,配置Log Service參數。

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

預期輸出表明,Log Service配置成功。所有工作流程日誌將被收集到名為workflow-logstore的日誌庫(Logstore)中。

您可以登入Log Service控制台,尋找名為k8s-log-<clusterid>的Project,然後查看對應的workflow-logstore

通過建立Log ServiceCR開啟

執行以下命令,建立阿里雲日誌配置CR。Log Service控制器會自動建立一個名為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訪問Log Service

訪問叢集中的工作流程日誌

通過Argo CLI可以訪問在叢集中現存的工作流程的日誌,包括已存在的Pod和刪除的Pod。

在叢集中存在的Pod可以通過原生kubectl logs <pod-name>訪問,預設最多顯示2000行日誌,若該方式顯示的日誌數量不夠或者需要訪問已經刪除的Pod,可以通過以下兩種方式訪問SLS的日誌。

通過Argo CLI直接存取SLS(推薦)

  1. 執行以下命令,配置存取權限。

    argo config init #按照提示配置相關資訊,包括ak、sk等。
  2. 執行以下命令擷取對應Pod的日誌。

    argo logs <workflow-name> <pod-name> --sls # 擷取對應Pod日誌。
    argo logs <workflow-name> --sls # 擷取對應workflow日誌ZIP包。

通過訪問Argo Server訪問SLS

如需通過Argo CLI訪問已刪除Pod的日誌,則需要先開啟Argo Server並配置相關參數。

    說明

    通過Log Service擷取工作流程日誌,必須指定<pod-name>

    若需要訪問其他Namespace的Workflow/Pod,則擷取KUBE_TOKEN時,需要使用對應Namespace。

  1. 執行以下命令,開啟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
  2. 執行以下命令,擷取工作流程Pod的日誌。

    argo logs <workflow-name> <pod-name>

訪問持久化到資料庫的工作流程日誌

您可以配置持久化工作流程,將工作流程持久化儲存到資料庫中,即使工作流程在叢集中被刪除,也可以通過Agro CLI方式下載工作流程日誌。

  1. 執行以下命令,配置存取權限。

    argo config init #按照提示配置相關資訊,包括ak、sk等。
  2. 執行以下命令查詢工作流程的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******
  3. 下載工作流程日誌。

    # argo archive logs 179eaef0-fde3-496f-946d-549e8f******
    # ls
    hello-world-l6c2r.zip

通過Argo UI訪問Log Service

無論工作流程Pod是否被刪除,您都可以通過Argo UI訪問Pod的日誌。如果Pod被刪除,則訪問SLS擷取日誌並顯示到Argo UI,如下圖所示。

訪問日誌

關閉Log Service

  1. 執行以下命令,刪除AliyunLogConfig CR。

    kubectl delete aliyunlogconfigs.log.alibabacloud.com workflow-sls-config -n default
  2. 登入Log Service控制台,將名為workflow-logstore的日誌庫刪除。