工作流完成时,一般需要配置工作流和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的日志库删除。