OpenShift Pipelines 中的可观察性
OpenShift Pipelines 的可观察性功能
摘要
第 1 章 为 OpenShift Pipelines 可观察性使用 Tekton 结果
Tekton Results 是一个记录每个管道运行和任务运行的完整信息的服务。您可以根据需要修剪 PipelineRun
和 TaskRun
资源,并使用 Tekton Results API 或 opc
命令行工具访问其 YAML 清单以及日志信息。
Tekton Results 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
1.1. Tekton Results 概念
Tekton Results 归档管道运行和任务以结果和记录的形式运行。
对于每个完成运行的 PipelineRun
和 TaskRun
自定义资源(CR),Tekton Results 会创建一个 记录。
结果 可以包含一个或多个记录。记录始终是一个结果的一部分。
结果与管道运行对应,包括 PipelineRun
CR 本身以及作为管道运行一部分启动的所有 TaskRun
CR 的记录。
如果任务运行是直接启动的,如果没有使用管道运行,则会为此任务运行创建一个结果。此结果包含同一任务运行的记录。
每个结果都有一个名称,其中包含创建 PipelineRun
或 TaskRun
CR 的命名空间以及 CR 的 UUID。结果名称为 < namespace_name>/results/<parent_run_uuid
> 的格式。在这个格式中,<parent_run_uuid
> 是管道运行的 UUD,或其他任务运行已直接启动的。
结果名称示例
results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed
每个记录都有一个名称,其中包含记录的结果名称,以及 PipelineRun
或 TaskRun
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
记录包括 TaskRun
或 PipelineRun
CR 的完整 YAML 清单,因为它会在完成运行后存在。此清单包含运行规格、为运行指定的任何注解,以及有关运行结果的特定信息,如完成时间和运行是否成功。
当 TaskRun
或 PipelineRun
CR 存在时,您可以使用以下命令查看 YAML 清单:
$ oc get pipelinerun <cr_name> -o yaml
Tekton Results 在 TaskRun
或 PipelineRun
CR 被删除后保留此清单,并使其可用于查看和搜索。
管道的 YAML 清单在完成后运行
kind: PipelineRun spec: params: - name: message value: five timeouts: pipeline: 1h0m0s pipelineRef: name: echo-pipeline taskRunTemplate: 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/v1 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/v1 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/v1 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/v1 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/v1 fieldsType: FieldsV1 resourceVersion: "126429" creationTimestamp: "2023-08-07T11:41:39Z" deletionTimestamp: "2023-08-07T11:42:23Z" deletionGracePeriodSeconds: 0 apiVersion: tekton.dev/v1
Tekton Results 还会创建一个日志记录,其中包含作为管道运行或任务运行的一部分运行的所有工具的日志信息。
您可以通过其名称访问每个结果并记录。您还可以使用通用表达式语言(CEL)查询来根据其包含的信息(包括 YAML 清单)搜索结果和记录。
1.2. 准备安装 Tekton 结果
在安装 Tekton 结果前,您必须完成几个准备步骤。
1.2.1. 使用 SSL 证书准备 secret
Tekton Results 使用 HTTPS 协议提供 REST API,这需要 SSL 证书。使用此证书提供 secret。如果您有一个由证书颁发机构(CA)提供的现有证书,请使用此证书,否则创建自签名证书。
先决条件
-
已安装
openssl
命令行工具。
流程
如果您没有 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 的路由端点。输入以下命令从证书创建传输安全层(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 数据库来存储数据。您可以将安装配置为使用自动安装的 PostgreSQL 服务器,该服务器使用 Tekton Results 或已在部署中存在的外部 PostgreSQL 服务器。在这两种情况下,为机密提供数据库凭据。
流程
完成以下步骤之一:
如果您不需要使用外部 PostgreSQL 服务器,请输入以下命令,使用名为
result
的数据库用户以及openshift-pipelines
命名空间中的随机密码:$ 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. 为日志信息准备存储或 LokiStack 转发
Tekton Results 使用单独的存储来记录与管道运行和任务运行相关的信息。您可以配置以下存储类型之一:
- Red Hat OpenShift Pipelines 集群中的持久性卷声明(PVC)
- Google Cloud Storage
- S3 存储桶存储
另外,您可以在 OpenShift Container Platform 集群上安装 LokiStack 和 OpenShift Logging,并配置将日志信息转发到 LokiStack。此选项为更高的负载提供更好的可扩展性。
在 OpenShift Pipelines 1.16 中,Tekton Results 能够在 PVC、Google Cloud Storage 和 S3 存储桶存储上原生存储日志信息的功能已弃用,计划在以后的发行版本中删除。
可以使用 Tekton Results 命令行界面和 API 提供日志记录信息,无论您配置的日志信息存储或 LokiStack 转发的类型都无关。
流程
完成以下流程之一:
要使用 PVC,请完成以下步骤:
使用 PVC 的以下定义,创建名为
pvc.yaml
的文件:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: tekton-logs spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
输入以下命令应用定义:
$ oc apply -n openshift-pipelines -f pvc.yaml
要使用 Google Cloud Storage,请完成以下步骤:
-
使用
gcloud
命令创建应用凭据文件。有关在文件中提供应用程序凭证的说明,请参阅 Google Cloud 文档中的使用 gcloud CLI 提供的用户凭证。 输入以下命令从应用程序凭证文件创建 secret:
$ oc create secret generic gcs-credentials \ --from-file=$HOME/.config/gcloud/application_default_credentials.json \ -n openshift-pipelines
根据需要调整应用程序凭证文件的路径和文件名。
-
使用
要使用 S3 存储桶存储,请完成以下步骤:
使用以下内容创建名为
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"
输入以下命令从文件创建 secret:
$ oc create secret generic s3-credentials \ --from-file=s3_secret.yaml -n openshift-pipelines
要配置 LokiStack 转发,请完成以下步骤:
- 在 OpenShift Container Platform 集群中,使用 Loki Operator 安装 LokiStack,同时安装 OpenShift Logging Operator。
根据您安装了 OpenShift Logging 版本 6 或版本 5,为
ClusterLogForwarder
自定义资源(CR)创建一个ClusterLogForwarder.yaml
清单文件,包含以下 YAML 清单之一:如果安装了 OpenShift Logging 版本 6,
ClusterLogForwarder
CR 的 YAML 清单apiVersion: observability.openshift.io/v1 kind: ClusterLogForwarder metadata: name: collector namespace: openshift-logging spec: inputs: - application: selector: matchLabels: app.kubernetes.io/managed-by: tekton-pipelines name: only-tekton type: application managementState: Managed outputs: - lokiStack: labelKeys: application: ignoreGlobal: true labelKeys: - log_type - kubernetes.namespace_name - openshift_cluster_id authentication: token: from: serviceAccount target: name: logging-loki namespace: openshift-logging name: default-lokistack tls: ca: configMapName: openshift-service-ca.crt key: service-ca.crt type: lokiStack pipelines: - inputRefs: - only-tekton name: default-logstore outputRefs: - default-lokistack serviceAccount: name: collector
如果安装了 OpenShift Logging 版本 5,
ClusterLogForwarder
CR 的 YAML 清单apiVersion: "logging.openshift.io/v1" kind: ClusterLogForwarder metadata: name: instance namespace: openshift-logging spec: inputs: - name: only-tekton application: selector: matchLabels: app.kubernetes.io/managed-by: tekton-pipelines pipelines: - name: enable-default-log-store inputRefs: [ only-tekton ] outputRefs: [ default ]
要在
openshift-logging
命名空间中创建ClusterLogForwarder
CR,以集群管理员用户身份使用 OpenShift CLI (oc
)登录到 OpenShift Container Platform 集群,然后输入以下命令:$ oc apply -n openshift-logging ClusterLogForwarder.yaml
1.3. 安装 Tekton 结果
要安装 Tekton Results,您必须提供所需资源,然后创建并应用 TektonResult
自定义资源(CR)。应用 TektonResult
自定义资源时,OpenShift Pipelines Operator 会安装 Results 服务。
先决条件
- 已使用 Operator 安装 OpenShift Pipelines。
- 您已使用 SSL 证书准备了 secret。
- 为日志信息准备存储。
- 您已使用数据库凭证准备了 secret。
流程
根据以下示例,创建名为
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
为此文件添加存储或转发日志信息的配置:
如果配置了持久性卷声明(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
如果配置了 S3 存储桶存储,请添加以下行来提供 S3 secret 的名称:
secret_name: s3-credentials
如果您配置了 LokiStack 转发,请添加以下行,以启用将日志信息转发到 LokiStack:
loki_stack_name: logging-loki 1 loki_stack_namespace: openshift-logging 2
可选: 如果要使用外部 PostgreSQL 数据库服务器来存储 Tekton Results 信息,请在文件中添加以下行:
db_host: postgres.internal.example.com 1 db_port: 5432 2 is_external_db: true
输入以下命令应用资源定义:
$ oc apply -n openshift-pipelines -f result.yaml
输入以下命令为 Tekton Results 服务 API 公开路由:
$ oc create route -n openshift-pipelines \ passthrough tekton-results-api-service \ --service=tekton-results-api-service --port=8080
1.4. 为 Tekton 结果配置保留策略
默认情况下,Tekton Results 存储管道运行、任务运行、事件和日志无限期存储。这会导致存储资源的不必要的使用,并可能会影响您的数据库性能。
您可以在集群级别为 Tekton Results 配置保留策略,以删除旧的结果及其关联的记录和日志。您可以通过编辑 TektonResult
自定义资源(CR)来实现此目的。
先决条件
- 已安装 Tekton 结果。
流程
在
TektonResult
CR 中,为 Tekton Results 配置保留策略,如下例所示:Tekton Results 的保留策略示例
apiVersion: operator.tekton.dev/v1alpha1 kind: TektonResult metadata: name: result spec: options: configMaps: config-results-retention-policy: data: runAt: "3 5 * * 0" 1 maxRetention: "30" 2
1.5. 使用 opc 命令行工具查询 Tekton Results
您可以使用 opc
命令行工具查询 Tekton 结果以获取结果和记录。要安装 opc
命令行工具,请为 tkn
命令行工具安装软件包。有关安装此软件包的步骤,请参阅安装 tkn。
您可以使用记录的名称和结果来检索其中的数据。
您可以使用通用表达式语言(CEL)查询搜索结果和记录。这些搜索显示结果或记录的 UUID。您可以使用提供的示例来创建对常见搜索类型的查询。您还可以使用参考信息来创建其他查询。
1.5.1. 准备 opc 工具环境以查询 Tekton Results
在查询 Tekton 结果前,您必须为 opc
工具准备环境。
先决条件
- 已安装 Tekton 结果。
-
已安装
opc
工具。
流程
输入以下命令将
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
输入以下命令为 Tekton Results API 创建身份验证令牌:
$ oc create token <service_account>
保存此命令输出的字符串。
可选:创建
~/.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.5.2. 根据名称查询结果和记录
您可以使用其名称列出和查询结果和记录。
先决条件
- 已安装 Tekton 结果。
-
已安装
opc
工具,并准备好其环境来查询 Tekton Results。 -
安装了
jq
软件包。
流程
列出与管道运行和在命名空间中创建的任务对应的结果的名称。输入以下命令:
$ 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
输入以下命令列出结果中所有记录的名称:
$ 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/v1.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/v1.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/v1.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
输入以下命令从记录中检索管道运行或任务的 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))'
可选:使用日志记录名称从记录中检索任务运行的日志信息。要获取日志记录名称,请将
记录
替换为记录名称中的日志。输入以下命令:
$ 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.5.3. 搜索结果
您可以使用通用表达式语言(CEL)查询来搜索结果。例如,您可以找到管道运行的结果,这些结果没有成功。但是,大多数相关信息都不包含在结果对象中;若要根据名称、完成时间和其他数据搜索,请搜索记录。
先决条件
- 已安装 Tekton 结果。
-
已安装
opc
工具,并准备好其环境来查询 Tekton Results。
流程
输入以下命令使用 CEL 查询来搜索结果:
$ opc results list --addr ${RESULTS_API} --filter="<cel_query>" <namespace-name>
将 < ;namespace_name
> 替换为管道运行或任务运行的命名空间。
用途 | CEL 查询 |
---|---|
所有失败的结果 |
|
结果所有管道运行包含注解 |
|
1.5.4. 搜索记录
您可以使用通用表达式语言(CEL)查询搜索记录。因为每个记录包含管道运行或任务运行的完整 YAML 信息,您可以根据许多不同的条件查找记录。
先决条件
- 已安装 Tekton 结果。
-
已安装
opc
工具,并准备好其环境来查询 Tekton Results。
流程
输入以下命令使用 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
> 替换为结果的全名。
用途 | CEL 查询 |
---|---|
所有任务运行或管道运行的记录 |
|
|
|
所有由名为 |
|
所有管道运行和任务运行的记录从名为 |
|
所有管道运行的记录都从名为 |
|
所有任务的记录,其中 |
|
完成所有管道运行的记录时间超过五分钟 |
|
所有管道运行和任务运行的记录在 2023 年 10 月 7 日完成 |
|
所有管道运行的记录包括三个或更多任务 |
|
具有 |
|
所有管道运行的记录,其中包含 |
|
1.5.5. 搜索结果的参考信息
您可以使用通用表达式语言(CEL)查询中的以下字段进行结果:
CEL 字段 | 描述 |
---|---|
|
创建 |
| 结果的唯一标识符。 |
|
添加到 |
| 结果摘要。 |
| 结果的创建时间。 |
| 结果的最后更新时间。 |
您可以使用 summary.status
字段来确定管道运行是否成功。此字段可以有以下值:
-
UNKNOWN
-
SUCCESS
-
失败
-
TIMEOUT (超时)
-
CANCELLED
不要使用引号字符,如 "
或 '
来为此字段提供值。
1.5.6. 搜索记录的参考信息
您可以使用 Common Expression Language (CEL)查询记录中的以下字段:
CEL 字段 | 描述 | 值 |
---|---|---|
| 记录名称 | |
| 记录类型标识符 |
|
| 任务运行或管道运行的 YAML 数据。在日志记录中,此字段包含日志输出。 |
因为 data
字段包含任务运行或管道运行的整个 YAML 数据,所以您可以在 CEL 查询中使用此数据的所有元素。例如,data.status.completionTime
包含任务运行或管道运行的完成时间。
1.6. 其他资源
第 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 控制台中查看管道日志:
流程
- 以集群管理员身份登录到 OpenShift Container Platform Web 控制台。
- 在菜单栏右上角,点击 grid 图标 → Observability → Logging。这时会显示 Kibana Web 控制台。
创建索引模式:
- 在 Kibana Web 控制台左侧导航面板中,点击 Management。
- 单击 Create index pattern。
-
在 Step 1 of 2: Define index pattern → Index pattern 中输入一个
*
特征并点 Next Step。 - 在 Step 2 of 2: Configure settings → Time filter field name 中,从下来菜单中选择 @timestamp,点 Create index pattern。
添加过滤器:
- 在 Kibana Web 控制台左侧导航面板中,点 Discover。
点 Add a filter + → Edit Query DSL。
注意- 对于以下每个示例过滤器,编辑查询并单击 Save。
- 这些过滤器会逐个应用。
过滤与管道相关的容器:
过滤管道容器的查询示例
{ "query": { "match": { "kubernetes.flat_labels": { "query": "app_kubernetes_io/managed-by=tekton-pipelines", "type": "phrase" } } } }
过滤所有不是
place-tools
容器的容器。作为使用图形下拉菜单而不是编辑查询 DSL 的一个示例,请考虑以下方法:图 2.1. 使用下拉列表字段进行过滤示例
在标签中过滤
pipelinerun
以高亮显示:在标签中过滤
pipelinerun
的查询示例{ "query": { "match": { "kubernetes.flat_labels": { "query": "tekton_dev/pipelineRun=", "type": "phrase" } } } }
在标签中过滤
pipeline
以高亮显示:在标签中过滤
pipeline
以高亮显示的查询示例{ "query": { "match": { "kubernetes.flat_labels": { "query": "tekton_dev/pipeline=", "type": "phrase" } } } }
从 Available fields 列表中,选择以下字段:
-
kubernetes.flat_labels
message
确保所选字段显示在 Selected fields 列表下。
-
日志显示在 message 字段下。
图 2.2. 过滤的消息