Search code examples
kustomizeargo-workflowsargo-cron-workflows

Access CronWorkflow name for metrics labels


I have a CronWorkflow that sends the following metric:

apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
  name: my-cron-wf
spec:
  schedule: "0 * * * *"
  suspend: false
  workflowSpec:
    metrics:
      prometheus:
        - name: wf_exec_duration_gauge
          help: "Duration gauge by workflow name and status"
          labels:
            - key: name
              value: my-cron-wf
            - key: status
              value: "{{workflow.status}}"
          gauge:
            value: "{{workflow.duration}}"

I would like to populate the metric's label name with the CronWorkflow name using a variable in order to avoid copying it but I didn't find a variable for it. I tried to use {{workflow.name}} but it equals to the generated workflow name and not to the desired CronWorkflow name.

I use Kustomize to manage argo workflows resources so if there is a kustomize-way to achieve this it would be great as well.


Solution

  • Argo Workflows automatically adds the name of the Cron Workflow as a label on the workflow. That label is accessible as a variable.

    apiVersion: argoproj.io/v1alpha1
    kind: CronWorkflow
    metadata:
      name: my-cron-wf
    spec:
      schedule: "0 * * * *"
      suspend: false
      workflowSpec:
        metrics:
          prometheus:
            - name: wf_exec_duration_gauge
              help: "Duration gauge by workflow name and status"
              labels:
                - key: name
                  value: "{{workflow.labels.workflows.argoproj.io/cron-workflow}}"
                - key: status
                  value: "{{workflow.status}}"
              gauge:
                value: "{{workflow.duration}}"