使用日志服务

工作流完成时,一般需要配置工作流和Pod的回收策略清理相应的资源,以避免集群控制面和工作流控制器资源的线性增长。当工作流出现问题或需要进行流程分析时,查看工作流日志是一个必不可少的能力。由于原生的集群在Pod清理后就不能查看Pod或工作流日志,因此,工作流集群集成了阿里云日志服务SLS,收集工作流运行过程中Pod产生的日志,上报到您账号下的SLS服务中,并且支持通过Argo CLI或Argo UI便捷地查看工作流的日志。

使用说明

注意事项

  • 如果工作流集群开启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(推荐)

  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并配置相关参数。

    说明

    通过日志服务获取工作流日志,必须指定<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访问日志服务

无论工作流Pod是否被删除,您都可以通过Argo UI访问Pod的日志。如果Pod被删除,则访问SLS获取日志并显示到Argo UI,如下图所示。

访问日志

关闭日志服务

  1. 执行以下命令,删除AliyunLogConfig CR。

    kubectl delete aliyunlogconfigs.log.alibabacloud.com workflow-sls-config -n default
  2. 登录日志服务控制台,将名为workflow-logstore的日志库删除。