OpenShift Pipelines 中的可观察性

Red Hat OpenShift Pipelines 1.13

OpenShift Pipelines 的可观察性功能

Red Hat OpenShift Documentation Team

摘要

本文档提供有关 OpenShift Pipelines 的可观察性功能的信息。

第 1 章 为 OpenShift Pipelines 观察使用 Tekton 结果

Tekton Results 是一个用于归档每个管道运行和任务运行的完整信息的服务。您可以根据需要修剪 PipelineRunTaskRun 资源,并使用 Tekton Results API 或 opc 命令行工具访问其 YAML 清单以及日志信息。

重要

Tekton Results 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

1.1. Tekton Results 概念

Tekton Results 归档管道运行,并以结果和记录的形式运行任务。

对于完成运行的每个 PipelineRunTaskRun 自定义资源(CR),Tekton Results 会创建一个 记录

结果 可包含一个或多个记录。记录始终是一个结果的一部分。

结果与管道运行对应,包括 PipelineRun CR 本身以及作为管道运行一部分启动的所有 TaskRun CR 的记录。

如果任务运行是直接启动的,不使用管道运行,则会为此任务运行创建一个结果。此结果包含同一任务运行的记录。

每个结果都有一个名称,其中包含创建 PipelineRunTaskRun CR 的命名空间以及 CR 的 UUID。结果名称的格式是 < namespace_name>/results/<parent_run_uuid >。在这个格式中,<parent_run_uuid > 是管道运行的 UUUD,或者直接启动的任务运行的其他部分。

结果名称示例

results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed

每个记录都有一个名称,其中包含记录的结果名称,以及与记录对应的 PipelineRunTaskRun CR 的 UUID。结果名称的格式是 < namespace_name>/results/<parent_run_uuid>/results/<run_uuid>

记录名称示例

results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e9c736db-5665-441f-922f-7c1d65c9d621

记录包括 TaskRunPipelineRun CR 的完整 YAML 清单,因为它在运行完成后存在。此清单包含运行的规格、为运行指定的任何注解,以及有关运行结果的某些信息,如完成的时间以及运行是否成功。

TaskRunPipelineRun CR 存在时,您可以使用以下命令查看 YAML 清单:

$ oc get pipelinerun <cr_name> -o yaml

Tekton Results 在 TaskRunPipelineRun CR 被删除后保留此清单,并使其可用于查看和搜索。

管道在完成后运行的 YAML 清单示例

  kind: PipelineRun
  spec:
    params:
      - name: message
        value: five
    timeouts:
      pipeline: 1h0m0s
    pipelineRef:
      name: echo-pipeline
    serviceAccountName: pipeline
  status:
    startTime: "2023-08-07T11:41:40Z"
    conditions:
      - type: Succeeded
        reason: Succeeded
        status: "True"
        message: 'Tasks Completed: 1 (Failed: 0, Cancelled 0), Skipped: 0'
        lastTransitionTime: "2023-08-07T11:41:49Z"
    pipelineSpec:
      tasks:
        - name: echo-task
          params:
            - name: message
              value: five
          taskRef:
            kind: Task
            name: echo-task-pipeline
      params:
        - name: message
          type: string
    completionTime: "2023-08-07T11:41:49Z"
    childReferences:
      - kind: TaskRun
        name: echo-pipeline-run-gmzrx-echo-task
        apiVersion: tekton.dev/v1beta1
        pipelineTaskName: echo-task
  metadata:
    uid: 62c3b02e-f12b-416c-9771-c02af518f6d4
    name: echo-pipeline-run-gmzrx
    labels:
      tekton.dev/pipeline: echo-pipeline
    namespace: releasetest-js5tt
    finalizers:
      - chains.tekton.dev/pipelinerun
    generation: 2
    annotations:
      results.tekton.dev/log: releasetest-js5tt/results/62c3b02e-f12b-416c-9771-c02af518f6d4/logs/c1e49dd8-d641-383e-b708-e3a02b6a4378
      chains.tekton.dev/signed: "true"
      results.tekton.dev/record: releasetest-js5tt/results/62c3b02e-f12b-416c-9771-c02af518f6d4/records/62c3b02e-f12b-416c-9771-c02af518f6d4
      results.tekton.dev/result: releasetest-js5tt/results/62c3b02e-f12b-416c-9771-c02af518f6d4
    generateName: echo-pipeline-run-
    managedFields:
      - time: "2023-08-07T11:41:39Z"
        manager: kubectl-create
        fieldsV1:
          f:spec:
            .: {}
            f:params: {}
            f:pipelineRef:
              .: {}
              f:name: {}
          f:metadata:
            f:generateName: {}
        operation: Update
        apiVersion: tekton.dev/v1
        fieldsType: FieldsV1
      - time: "2023-08-07T11:41:40Z"
        manager: openshift-pipelines-controller
        fieldsV1:
          f:metadata:
            f:labels:
              .: {}
              f:tekton.dev/pipeline: {}
        operation: Update
        apiVersion: tekton.dev/v1beta1
        fieldsType: FieldsV1
      - time: "2023-08-07T11:41:49Z"
        manager: openshift-pipelines-chains-controller
        fieldsV1:
          f:metadata:
            f:finalizers:
              .: {}
              v:"chains.tekton.dev/pipelinerun": {}
            f:annotations:
              .: {}
              f:chains.tekton.dev/signed: {}
        operation: Update
        apiVersion: tekton.dev/v1beta1
        fieldsType: FieldsV1
      - time: "2023-08-07T11:41:49Z"
        manager: openshift-pipelines-controller
        fieldsV1:
          f:status:
            f:startTime: {}
            f:conditions: {}
            f:pipelineSpec:
              .: {}
              f:tasks: {}
              f:params: {}
            f:completionTime: {}
            f:childReferences: {}
        operation: Update
        apiVersion: tekton.dev/v1beta1
        fieldsType: FieldsV1
        subresource: status
      - time: "2023-08-07T11:42:15Z"
        manager: openshift-pipelines-results-watcher
        fieldsV1:
          f:metadata:
            f:annotations:
              f:results.tekton.dev/log: {}
              f:results.tekton.dev/record: {}
              f:results.tekton.dev/result: {}
        operation: Update
        apiVersion: tekton.dev/v1beta1
        fieldsType: FieldsV1
    resourceVersion: "126429"
    creationTimestamp: "2023-08-07T11:41:39Z"
    deletionTimestamp: "2023-08-07T11:42:23Z"
    deletionGracePeriodSeconds: 0
  apiVersion: tekton.dev/v1beta1

Tekton Results 还会创建一个日志记录,其中包含作为管道运行或任务运行的一部分运行的所有工具的日志信息。

您可以根据其名称访问每个结果和记录。您还可以使用通用表达式语言(CEL)查询根据其包含的信息搜索结果和记录,包括 YAML 清单。

1.2. 准备安装 Tekton 结果

在安装 Tekton Results 前,您必须完成几个准备步骤。

1.2.1. 使用 SSL 证书准备 secret

Tekton Results 使用 HTTPS 协议提供 REST API,该协议需要 SSL 证书。提供带有此证书的 secret。如果您有证书颁发机构(CA)提供的现有证书,请使用此证书,否则创建自签名证书。

先决条件

  • 已安装 openssl 命令行工具。

流程

  1. 如果您没有 CA 提供的证书,请输入以下命令创建自签名证书:

    $ openssl req -x509 \
    -newkey rsa:4096 \
    -keyout key.pem \
    -out cert.pem \
    -days 365 \
    -nodes \
    -subj "/CN=tekton-results-api-service.openshift-pipelines.svc.cluster.local" \
    -addext "subjectAltName = DNS:tekton-results-api-service.openshift-pipelines.svc.cluster.local"

    tekton-results-api-service.openshift-pipelines.svc.cluster.local 替换为您计划用于 Tekton Results API 的路由端点。

  2. 输入以下命令,从证书创建传输安全层(TLS) secret:

    $ oc create secret tls -n openshift-pipelines tekton-results-tls --cert=cert.pem --key=key.pem

    如果要使用 CA 提供的现有证书,请将 cert.pem 替换为包含此证书的文件的名称。

1.2.2. 使用数据库凭证准备 secret

Tekton Results 使用 PostgreSQL 数据库存储数据。您可以将安装配置为使用通过 Tekton Results 自动安装的 PostgreSQL 服务器,或部署中已存在的外部 PostgreSQL 服务器。在这两种情况下,为机密提供数据库凭据。

流程

完成以下步骤之一:

  • 如果您不需要使用外部 PostgreSQL 服务器,请输入以下命令使用名为 result 的数据库用户以及 openshift-pipelines 命名空间中的随机密码创建一个 secret:

    $ oc create secret generic tekton-results-postgres \
      --namespace=openshift-pipelines \
      --from-literal=POSTGRES_USER=result \
      --from-literal=POSTGRES_PASSWORD=$(openssl rand -base64 20)
    注意

    在这个命令中,如果为 OpenShift Pipelines 配置了自定义目标命名空间,请使用此命名空间的名称,而不是 openshift-pipelines

  • 如果要使用外部 PostgreSQL 数据库服务器来存储 Tekton Results 数据,请输入以下命令使用这个服务器的凭证创建一个 secret:

    $ oc create secret generic tekton-results-postgres \
      --namespace=openshift-pipelines \
      --from-literal=POSTGRES_USER=<user> \ 1
      --from-literal=POSTGRES_PASSWORD=<password> 2

    <user > 替换为 Tekton Results 必须使用的 PostgreSQL 用户的用户名。将 <password > 替换为同一帐户的密码。

1.2.3. 为日志信息准备存储

Tekton Results 使用单独的存储来记录与管道运行和任务运行相关的信息。您可以配置以下存储类型之一:

  • Red Hat OpenShift Pipelines 集群上的持久性卷声明(PVC)
  • Google Cloud Storage
  • S3 存储桶存储

流程

完成以下流程之一:

  • 要使用 PVC,请完成以下步骤:

    1. 使用 PVC 的以下定义,创建一个名为 pvc.yaml 的文件:

        apiVersion: v1
        kind: PersistentVolumeClaim
        metadata:
          name: tekton-logs
        spec:
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 1Gi
    2. 输入以下命令应用定义:

      $ oc apply -n openshift-pipelines -f pvc.yaml
  • 要使用 Google Cloud Storage,请完成以下步骤:

    1. 使用 gcloud 命令创建应用程序凭据文件。有关在文件中提供应用程序凭证的说明,请参阅 Google Cloud 文档中的使用 gcloud CLI 提供的用户凭证
    2. 输入以下命令从应用程序凭证文件创建 secret:

      $ oc create secret generic gcs-credentials \
        --from-file=$HOME/.config/gcloud/application_default_credentials.json \
        -n openshift-pipelines

      根据需要调整应用程序凭证文件的路径和文件名。

  • 要使用 S3 存储桶存储,请完成以下步骤:

    1. 使用以下内容创建名为 s3_secret.yaml 的文件:

        apiVersion: v1
        kind: Secret
        metadata:
          name: my_custom_secret
          namespace: tekton-pipelines
        type: Opaque
        stringData:
          S3_BUCKET_NAME: bucket1 1
          S3_ENDPOINT: https://example.localhost.com 2
          S3_HOSTNAME_IMMUTABLE: "false"
          S3_REGION: region-1 3
          S3_ACCESS_KEY_ID: "1234" 4
          S3_SECRET_ACCESS_KEY: secret_key 5
          S3_MULTI_PART_SIZE: "5242880"
      1 1
      S3 存储桶的名称
      2 2
      S3 API 端点 URL
      3
      S3 区域
      4
      S3 访问密钥 ID
      5
      S3 secret access key
    2. 输入以下命令从文件创建 secret:

      $ oc create secret generic s3-credentials \
        --from-file=s3_secret.yaml -n openshift-pipelines

1.3. 安装 Tekton 结果

要安装 Tekton Results,您必须提供所需资源,然后创建并应用 TektonResult 自定义资源(CR)。在应用 TektonResult 自定义资源时,OpenShift Pipelines Operator 会安装 Results 服务。

先决条件

  • 已使用 Operator 安装 OpenShift Pipelines。
  • 使用 SSL 证书准备了 secret。
  • 为日志信息准备了存储。
  • 使用数据库凭证准备了 secret。

流程

  1. 根据以下示例,创建名为 result.yaml 的资源定义文件。您可以根据需要调整设置。

      apiVersion: operator.tekton.dev/v1alpha1
      kind: TektonResult
      metadata:
        name: result
      spec:
        targetNamespace: openshift-pipelines
        logs_api: true
        log_level: debug
        db_port: 5432
        db_host: tekton-results-postgres-service.openshift-pipelines.svc.cluster.local
        logs_path: /logs
        logs_type: File
        logs_buffer_size: 32768
        auth_disable: true
        tls_hostname_override: tekton-results-api-service.openshift-pipelines.svc.cluster.local
        db_enable_auto_migration: true
        server_port: 8080
        prometheus_port: 9090
  2. 向此文件中添加用于日志信息的存储配置:

    • 如果您配置了持久性卷声明(PVC),请添加以下行以提供 PVC 的名称:

          logging_pvc_name: tekton-logs
    • 如果配置了 Google Cloud Storage,请添加以下行来提供 secret 名称、凭证文件名和 Google Cloud Storage 存储桶的名称:

          gcs_creds_secret_name: gcs-credentials
          gcs_creds_secret_key: application_default_credentials.json 1
          gcs_bucket_name: bucket-name 2
      1
      提供您在创建 secret 时使用的应用程序凭证文件的名称,而不包括路径。
      2
      在 Google Cloud Storage 中提供存储桶的名称。Tekton Chains 使用此存储桶存储管道运行和任务运行的日志信息。
    • 如果您配置了 S3 存储桶存储,请添加以下行以提供 S3 secret 的名称:

          secret_name: s3-credentials
  3. 可选: 如果要使用外部 PostgreSQL 数据库服务器存储 Tekton Results 信息,请在文件中添加以下行:

        db_host: postgres.internal.example.com 1
        db_port: 5432 2
        is_external_db: true
    1
    PostgreSQL 服务器的主机名。
    2
    PostgreSQL 服务器的端口。
  4. 输入以下命令应用资源定义:

    $ oc apply -n openshift-pipelines -f result.yaml
  5. 输入以下命令为 Tekton Results 服务 API 公开路由:

    $ oc create route -n openshift-pipelines \
      passthrough tekton-results-api-service \
      --service=tekton-results-api-service --port=8080

1.4. 使用 opc 命令行工具查询 Tekton Results

您可以使用 opc 命令行工具查询 Tekton 结果以获取结果和记录。要安装 opc 命令行工具,请为 tkn 命令行工具安装软件包。有关安装这个软件包的步骤,请参阅安装 tkn

您可以使用记录的名称和结果来检索其中的数据。

您可以使用通用表达式语言(CEL)查询搜索结果和记录。这些搜索显示结果或记录的 UUID。您可以使用提供的示例为常见搜索类型创建查询。您还可以使用参考信息来创建其他查询。

1.4.1. 准备 opc 工具环境以查询 Tekton 结果

在查询 Tekton 结果前,您必须为 opc 实用程序准备环境。

先决条件

  • 已安装 Tekton Results。
  • 已安装 opc 工具。

流程

  1. 输入以下命令将 RESULTS_API 环境变量设置为到 Tekton Results API 的路由:

    $ export RESULTS_API=$(oc get route tekton-results-api-service -n openshift-pipelines --no-headers -o custom-columns=":spec.host"):443
  2. 输入以下命令为 Tekton Results API 创建身份验证令牌:

    $ oc create token sa <service_account>

    保存此命令输出的字符串。

  3. 可选:创建 ~/.config/tkn/results.yaml 文件,以使用 Tekton Results API 自动身份验证。该文件必须具有以下内容:

    address: <tekton_results_route> 1
    token: <authentication_token> 2
    ssl:
       roots_file_path: /home/example/cert.pem 3
       server_name_override: tekton-results-api-service.openshift-pipelines.svc.cluster.local 4
     service_account:
       namespace: service_acc_1 5
       name: service_acc_1 6
    1
    到 Tekton Results API 的路由。使用与您为 RESULTS_API 设置的值相同。
    2
    oc create token 命令创建的身份验证令牌。如果您提供此令牌,它会覆盖 service_account 设置,opc 使用这个令牌进行身份验证。
    3
    文件的位置包含您为 API 端点配置的 SSL 证书。
    4
    如果您为 OpenShift Pipelines 配置了自定义目标命名空间,请将 openshift-pipelines 替换为此命名空间的名称。
    5 6
    用于使用 Tekton Results API 进行身份验证的服务帐户名称。如果您提供了身份验证令牌,则不需要提供 service_account 参数。

    或者,如果您没有创建 ~/.config/tkn/results.yaml 文件,您可以使用 --authtoken 选项将令牌传递给每个 opc 命令。

1.4.2. 按名称查询结果和记录

您可以使用其名称列出和查询结果和记录。

先决条件

  • 已安装 Tekton Results。
  • 已安装 opc 工具并准备其环境来查询 Tekton 结果。
  • 安装了 jq 软件包。

流程

  1. 列出与管道运行对应的所有结果名称,以及在命名空间中创建的任务。输入以下命令:

    $ opc results list --addr ${RESULTS_API} <namespace_name>

    示例命令

    $ opc results list --addr ${RESULTS_API} results-testing

    输出示例

    Name                                                          Start                                   Update
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed  2023-06-29 02:49:53 +0530 IST           2023-06-29 02:50:05 +0530 IST
    results-testing/results/ad7eb937-90cc-4510-8380-defe51ad793f  2023-06-29 02:49:38 +0530 IST           2023-06-29 02:50:06 +0530 IST
    results-testing/results/d064ce6e-d851-4b4e-8db4-7605a23671e4  2023-06-29 02:49:45 +0530 IST           2023-06-29 02:49:56 +0530 IST

  2. 输入以下命令列出结果中的所有记录的名称:

    $ opc results records list --addr ${RESULTS_API} <result_name>

    示例命令

    $ opc results records list --addr ${RESULTS_API} results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed

    输出示例

    Name                                                                                                   Type                                    Start                                   Update
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e9c736db-5665-441f-922f-7c1d65c9d621  tekton.dev/v1beta1.TaskRun              2023-06-29 02:49:53 +0530 IST           2023-06-29 02:49:57 +0530 IST
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/5de23a76-a12b-3a72-8a6a-4f15a3110a3e  results.tekton.dev/v1alpha2.Log         2023-06-29 02:49:57 +0530 IST           2023-06-29 02:49:57 +0530 IST
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/57ce92f9-9bf8-3a0a-aefb-dc20c3e2862d  results.tekton.dev/v1alpha2.Log         2023-06-29 02:50:05 +0530 IST           2023-06-29 02:50:05 +0530 IST
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e9a0c21a-f826-42ab-a9d7-a03bcefed4fd  tekton.dev/v1beta1.TaskRun              2023-06-29 02:49:57 +0530 IST           2023-06-29 02:50:05 +0530 IST
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/04e2fbf2-8653-405f-bc42-a262bcf02bed  tekton.dev/v1beta1.PipelineRun          2023-06-29 02:49:53 +0530 IST           2023-06-29 02:50:05 +0530 IST
    results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e6eea2f9-ec80-388c-9982-74a018a548e4  results.tekton.dev/v1alpha2.Log         2023-06-29 02:50:05 +0530 IST           2023-06-29 02:50:05 +0530 IST

  3. 输入以下命令从记录中检索管道运行或任务的 YAML 清单:

    $ opc results records get --addr ${RESULTS_API} <record_name> \
      | jq -r .data.value | base64 -d | \
      xargs -0 python3 -c 'import sys, yaml, json; j=json.loads(sys.argv[1]); print(yaml.safe_dump(j))'

    示例命令

    $ opc results records get --addr ${RESULTS_API} \
      results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e9c736db-5665-441f-922f-7c1d65c9d621 | \
      jq -r .data.value | base64 -d | \
      xargs -0 python3 -c 'import sys, yaml, json; j=json.loads(sys.argv[1]); print(yaml.safe_dump(j))'

  4. 可选:使用日志记录名称从记录中运行的任务的日志记录信息。要获取日志记录名称,请将 记录 替换为记录名称中的日志。输入以下命令:

    $ opc results logs get --addr ${RESULTS_API} <log_record_name> | jq -r .data | base64 -d

    示例命令

    $ opc results logs get --addr ${RESULTS_API} \
      results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/logs/e9c736db-5665-441f-922f-7c1d65c9d621 | \
      jq -r .data | base64 -d

1.4.3. 搜索结果

您可以使用通用表达式语言(CEL)查询搜索结果。例如,您可以查找没有成功的管道运行的结果。但是,大部分相关信息都不包含在结果对象中;若要根据名称、完成时间和其他数据搜索,请搜索记录。

先决条件

  • 已安装 Tekton Results。
  • 已安装 opc 工具并准备其环境来查询 Tekton 结果。

流程

  • 输入以下命令使用 CEL 查询搜索结果:

    $ opc results list --addr ${RESULTS_API} --filter="<cel_query>" <namespace-name>

将 < namespace_name > 替换为创建管道运行或任务运行的命名空间。

表 1.1. 对结果的 CEL 查询示例

用途CEL 查询

所有运行失败的结果

!(summary.status == SUCCESS)

结果包括 an 1 和 ann2 注解的所有管道运行

summary.annotations.contains ('ann1')&& summary.annotations.contains ('ann2')&& summary.type=='PIPELINE_RUN'

1.4.4. 搜索记录

您可以使用通用表达式语言(CEL)查询搜索记录。当每个记录包含管道运行或任务运行的完整 YAML 信息时,您可以按照许多不同的条件查找记录。

先决条件

  • 已安装 Tekton Results。
  • 已安装 opc 工具并准备其环境来查询 Tekton 结果。

流程

  • 输入以下命令使用 CEL 查询搜索记录:

    $ opc results records list --addr ${RESULTS_API} --filter="<cel_query>" <namespace_name>/result/-

    将 < namespace_name > 替换为创建管道运行或任务运行的命名空间。或者,输入以下命令在单个结果中搜索记录:

    $ opc results records list --addr ${RESULTS_API} --filter="<cel_query>" <result_name>

    <result_name > 替换为结果的完整名称。

表 1.2. CEL 对记录的查询示例

用途CEL 查询

所有任务运行或管道运行的记录

!(data.status.conditions[0].status == 'True')

记录 TaskRunPipelineRun 自定义资源(CR)的名称为 run1

data.metadata.name == 'run1'

PipelineRun CR 启动的所有任务运行记录,名为 run1

data_type == 'TASK_RUN' && data.metadata.labels['tekton.dev/pipelineRun'] == 'run1'

从名为 pipeline1Pipeline CR 创建的管道运行和任务运行记录

data.metadata.labels['tekton.dev/pipeline'] == 'pipeline1'

从名为 pipeline1Pipeline CR 创建的所有管道运行记录

data.metadata.labels['tekton.dev/pipeline'] == 'pipeline1' && data_type == 'PIPELINE_RUN'

所有任务的记录运行,其中 TaskRun CR 名称以 hello不足

data.metadata.name.startsWith ('hello')&& data_type=='TASK_RUN'

所有管道运行的记录,超过五分钟才能完成

data.status.completionTime - data.status.startTime > duration ('5m')&& data_type == 'PIPELINE_RUN'

所有管道运行和在 2023 年 10 月 7 日完成的任务的记录

data.status.completionTime.getDate ()== 7 && data.status.completionTime.getMonth ()== 10 && data.status.completionTime.getFullYear ()== 2023

包括三个或更多任务的管道运行的记录

size(data.status.pipelineSpec.tasks) >= 3 && data_type == 'PIPELINE_RUN'

具有 an1注解的所有管道运行记录

data.metadata.annotations.contains('ann1') && data_type == 'PIPELINE_RUN'

所有带有 an1 的注解的管道运行记录,以及 PipelineRun CR 的名称都以 hello开头

data.metadata.annotations.contains ('ann1')&& data.metadata.name.startsWith ('hello')&& data_type == 'PIPELINE_RUN'

1.4.5. 搜索结果的参考信息

您可以对结果使用通用表达式语言(CEL)查询中的以下字段:

表 1.3. CEL 查询结果中的字段

CEL 字段描述

在其中创建 PipelineRunTaskRun 自定义资源(CR)的命名空间。

uid

结果的唯一标识符。

annotations

PipelineRunTaskRun CR 中添加的注解。

summary

结果摘要。

create_time

结果的创建时间。

update_time

结果的最后更新时间。

您可以使用 summary.status 字段来确定管道运行是否成功。此字段可以有以下值:

  • UNKNOWN
  • SUCCESS
  • 失败
  • TIMEOUT (超时)
  • CANCELLED
注意

不要使用引号,如 "' )来为此字段提供值。

1.4.6. 搜索记录的参考信息

您可以对记录使用通用表达式语言(CEL)查询中的以下字段:

表 1.4. CEL 查询记录中的字段

CEL 字段描述

name

记录名称

 

data_type

记录类型标识符

tekton.dev/v1beta1.TaskRunTASK_RUNtekton.dev/v1beta1.PipelineRunPIPELINE_RUNresults.tekton.dev/v1alpha2.Log

data

任务运行或管道运行的 YAML 数据。在日志记录中,此字段包含日志输出。

 

因为 data 字段包含任务运行或管道运行的整个 YAML 数据,所以您可以在 CEL 查询中使用此数据的所有元素。例如,data.status.completionTime 包含任务运行或管道运行的完成时间。

1.5. 其他资源

第 2 章 使用 OpenShift Logging Operator 查看管道日志

管道运行、任务运行和事件侦听器生成的日志存储在其各自的 pod 中。检查和分析用于故障排除和审计的日志非常有用。

但是,保留 pod 不会造成不必要的资源消耗和杂乱的命名空间。

要消除对 pod 查看管道日志的依赖,您可以使用 OpenShift Elasticsearch Operator 和 OpenShift Logging Operator。这些 Operator 可帮助您使用 Elasticsearch Kibana 堆栈查看管道日志,即使您删除了包含日志的 pod。

2.1. 先决条件

在 Kibana 仪表板中尝试查看管道日志前,请确保以下内容:

  • 步骤由集群管理员执行。
  • 管道运行和任务运行的日志可用。
  • 安装了 OpenShift Elasticsearch Operator 和 OpenShift Logging Operator。

2.2. 在 Kibana 中查看管道日志

在 Kibana web 控制台中查看管道日志:

流程

  1. 以集群管理员身份登录到 OpenShift Container Platform Web 控制台。
  2. 在菜单栏右上角,点击 grid 图标 → ObservabilityLogging。这时会显示 Kibana Web 控制台。
  3. 创建索引模式:

    1. Kibana Web 控制台左侧导航面板中,点击 Management
    2. 单击 Create index pattern
    3. Step 1 of 2: Define index patternIndex pattern 中输入一个 * 特征并点 Next Step
    4. Step 2 of 2: Configure settingsTime filter field name 中,从下来菜单中选择 @timestamp,点 Create index pattern
  4. 添加过滤器:

    1. Kibana Web 控制台左侧导航面板中,点 Discover
    2. Add a filter +Edit Query DSL

      注意
      • 对于以下每个示例过滤器,编辑查询并单击 Save
      • 这些过滤器会逐个应用。
      1. 过滤与管道相关的容器:

        过滤管道容器的查询示例

        {
          "query": {
        	"match": {
          	"kubernetes.flat_labels": {
            	"query": "app_kubernetes_io/managed-by=tekton-pipelines",
            	"type": "phrase"
          	}
        	}
          }
        }

      2. 过滤所有不是 place-tools 容器的容器。作为使用图形下拉菜单而不是编辑查询 DSL 的一个示例,请考虑以下方法:

        图 2.1. 使用下拉列表字段进行过滤示例

        Not place-tools
      3. 在标签中过滤 pipelinerun 以高亮显示:

        在标签中过滤 pipelinerun 的查询示例

        {
          "query": {
        	"match": {
          	"kubernetes.flat_labels": {
            	"query": "tekton_dev/pipelineRun=",
            	"type": "phrase"
          	}
        	}
          }
        }

      4. 在标签中过滤 pipeline 以高亮显示:

        在标签中过滤 pipeline 以高亮显示的查询示例

        {
          "query": {
        	"match": {
          	"kubernetes.flat_labels": {
            	"query": "tekton_dev/pipeline=",
            	"type": "phrase"
          	}
        	}
          }
        }

    3. Available fields 列表中,选择以下字段:

      • kubernetes.flat_labels
      • message

        确保所选字段显示在 Selected fields 列表下。

    4. 日志显示在 message 字段下。

      图 2.2. 过滤的消息

      过滤的消息

2.3. 其他资源

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.