Tekton 组件的指标采集
目录
概述前提条件Tekton PipelinesPipelineRun 指标running_pipelineruns 标签级别Status 标签值TaskRun 指标config-observability 配置Histogram 桶边界推荐生产环境配置Tekton TriggersController 指标(端口 9000)EventListener Sink 指标Tekton ResultsWatcher 指标删除指标共享指标Watcher config-observabilityAPI Server 指标Tekton ChainsChains 指标Controller Framework 指标部署 ServiceMonitorPipeline ServiceMonitorTriggers ServiceMonitorEventListener Sink ServiceMonitorResults ServiceMonitorChains ServiceMonitor验证直接检查指标端点检查 Prometheus 目标示例 PromQL 查询MonitorDashboard 示例Tekton Pipeline 仪表盘Tekton Pipeline 仪表盘解读(常见问题)Tekton Triggers 仪表盘Tekton Triggers 仪表盘解读(常见问题)Tekton Results 仪表盘Tekton Results 监控面板解读(常见问题)Tekton Chains 监控面板Tekton Chains 监控面板解读(常见问题)概述
Tekton 组件通过 HTTP 端点暴露兼容 Prometheus 的指标。通过部署 ServiceMonitor 资源,Prometheus(或 VictoriaMetrics)可以自动发现并抓取这些指标。
命名空间说明:本文档默认使用
tekton-pipelines作为控制平面组件(Pipelines、Triggers、Results、Chains)的命名空间。 主要例外是 EventListener 服务,它们运行在创建 EventListener 的应用命名空间中。如果您的部署使用了不同的命名空间,请同时更新下面命令和
ServiceMonitor资源中的namespaceSelector字段。
本文档涵盖以下 Tekton 组件的指标:
- Tekton Pipelines - PipelineRun / TaskRun 执行指标
- Tekton Triggers - EventListener、TriggerBinding 及相关资源指标
- Tekton Results - 运行删除和存储指标
- Tekton Chains - 签名和溯源指标
- Controller Framework - 所有控制器共享的基础设施指标
还涵盖:
- 如何通过
config-observability配置指标行为 - 如何部署
ServiceMonitor资源进行抓取 - 如何验证指标采集是否正常
前提条件
- 已安装并运行 Tekton 控制平面组件(至少包括您计划抓取的组件:Pipelines、Triggers、Results 和/或 Chains)。
kubectl已配置指向目标集群,且您的账户有权限在监控命名空间创建ServiceMonitor资源。- 已部署监控栈(Prometheus 或兼容的 VictoriaMetrics),且能发现/抓取
ServiceMonitor资源(或您平台使用的等效抓取发现对象)。 - 您的 Prometheus/VictoriaMetrics 实例配置了发现您创建的
ServiceMonitor对象(命名空间和标签选择器匹配)。 - 网络策略和防火墙允许抓取 Pod 访问 Tekton 指标端口(大多数控制平面服务为
9090,Triggers controller 和 EventListener sink 为9000)。 - 若需 EventListener sink 指标,EventListener 必须存在于目标命名空间并暴露
http-metrics端口。
Tekton Pipelines
Tekton Pipelines 组件包含多个子服务,在端口 9090 暴露指标:
Pipeline controller 指标使用前缀 tekton_pipelines_controller_。
PipelineRun 指标
* 标记为 * 的标签为可选,取决于
config-observability配置。
running_pipelineruns 标签级别
running_pipelineruns 指标的标签由 metrics.running-pipelinerun.level 控制:
Status 标签值
PipelineRun 指标的状态标签值:
success- PipelineRun 成功完成failed- PipelineRun 失败cancelled- PipelineRun 被取消
TaskRun 指标的状态标签值:
success- TaskRun 成功完成failed- TaskRun 失败
TaskRun 指标
config-observability 配置
tekton-pipelines 命名空间中的 config-observability ConfigMap 控制 Pipeline controller 的指标行为。该 ConfigMap 由 Tekton Operator 管理,应通过 TektonConfig 资源的 spec.pipeline.options.configMaps 字段配置。详情请参见 调整子组件的可选配置项。
热重载行为:
config-observability在运行时被监视。大多数关键更改(如metrics.*)无需重启 Pod 即可生效。仪表盘/查询更改可能需等待一两个抓取周期。仅当 Pod 规格设置更改时(例如 Deployment 中的CONFIG_OBSERVABILITY_NAME变更)才需重启。
通过 TektonConfig 配置示例:
Histogram 桶边界
当持续时间类型为 histogram 时,使用以下桶边界(单位:秒):
对应:10秒、30秒、1分钟、5分钟、15分钟、30分钟、1小时、1.5小时、3小时、6小时、12小时、24小时。
推荐生产环境配置
生产环境建议使用聚合级别以控制标签基数:
若需调试时的单次运行粒度,可临时切换为:
注意这会显著增加时间序列数量。
Tekton Triggers
Tekton Triggers 组件从不同进程暴露两类指标。
Controller 指标(端口 9000)
Triggers controller 每 60 秒报告一次资源计数指标。
Triggers controller 指标使用前缀 controller_。
EventListener Sink 指标
每个 EventListener Pod 暴露额外的 HTTP 和事件处理指标。这些指标来自 EventListener sink 进程(非 controller)。Prometheus 指标前缀为 eventlistener_。
eventlistener_http_duration_seconds的桶边界:0.001, 0.01, 0.1, 1, 10(秒)eventlistener_event_received_count的状态值:succeeded、failedeventlistener_triggered_resources的 kind 值为创建对象的 Kubernetes 资源 Kind(如PipelineRun、TaskRun)
这些 sink 指标按 EventListener Pod 暴露,不来自中央 controller。如果 EventListener Pod 暴露指标端口,可能需要单独的
ServiceMonitor或PodMonitor进行抓取。
Tekton Results
Tekton Results 有两个子服务暴露指标。
Watcher 指标
Watcher 指标使用前缀 watcher_。
删除指标
* 可选标签取决于 Results Watcher 的
config-observability配置。
注意:
pipelinerun_delete_count、pipelinerun_delete_duration_seconds、taskrun_delete_count和taskrun_delete_duration_seconds仅在 Watcher 实际删除运行时记录。除非在tekton-results-watcherDeployment 上将--completed_run_grace_period参数设置为非零值,否则这些指标将保持空(无数据点)。默认该参数为0,禁用自动删除。设置为正值(如10m)可启用宽限期后删除,负值则表示归档后立即删除。
Results Watcher 状态标签值:
success- 运行成功完成failed- 运行失败cancelled- 运行被取消
共享指标
这些指标由 Watcher 中 PipelineRun 和 TaskRun reconciler 共同注册,跟踪存储相关事件。
kind 标签标识运行类型(某些指标系列中为 PipelineRun / TaskRun,另一些为 pipelinerun / taskrun)。
注意:
runs_not_stored_count仅在运行被外部删除(如通过kubectl delete)且 Watcher 持有 finalizer 以协调归档时记录。除非满足以下全部条件,否则该指标保持空:
--logs_api参数为false(禁用日志存储)——启用日志时,Watcher 会跳过基于 finalizer 的协调。--disable_crd_update参数为false(启用注解更新)。--store_deadline参数设置为非零时长——Watcher 等待归档完成的最长时间,超时则放弃并允许删除。- 运行在成功归档前被外部删除(无
results.tekton.dev/stored=true注解),且store_deadline已过。正常情况下(运行先归档后删除,或由 Watcher 自身通过
--completed_run_grace_period触发删除),该计数器保持为零。非零值表示可能存在数据丢失:运行在状态保存到 Results API 前被删除。
快速复现(测试环境): 若未看到该指标,通常表示触发条件未满足,而非指标缺失。
- 通过
TektonConfig配置 Results Watcher,确保logs_api=false、disable_crd_update=false,且store_deadline非零(例如30s)。- 临时将 Results API 副本数设为
0(spec.result.options.deployments.tekton-results-api.spec.replicas: 0),使运行无法归档。- 创建一个 TaskRun 或 PipelineRun,等待完成。
- 等待
store_deadline过期后,外部删除该运行(kubectl delete ...)。- 查看 Watcher
/metrics或 Prometheus 中的watcher_runs_not_stored_count(组件前缀名称),应会增加。- 恢复原有
TektonConfig(重新启用 Results API 副本和正常的logs_api设置)。
run_storage_latency_seconds 直方图桶边界(秒):
Watcher config-observability
Results Watcher 有自己的 config-observability ConfigMap(通过 CONFIG_OBSERVABILITY_NAME 环境变量命名,通常为 tekton-results-config-observability)。该 ConfigMap 由 Tekton Operator 管理,应通过 TektonConfig 资源的 spec.results.options.configMaps 字段配置。详情请参见 调整子组件的可选配置项。
热重载行为:Results Watcher 也监视此 ConfigMap,大多数关键更改无需重启 Pod。仅当 Deployment 级别设置(如环境变量/参数)变更时需重启。
支持以下键:
注意:与 Tekton Pipelines 不同,Results Watcher 不支持
pipelinerun/taskrun单次运行粒度级别,也没有metrics.count.enable-reason、metrics.running-pipelinerun.level或metrics.taskrun.throttle.enable-namespace键。上游已知问题:
taskrun_delete_duration_seconds使用metrics.pipelinerun.duration-type(而非metrics.taskrun.duration-type)决定聚合类型,疑为源码中的复制粘贴错误。
API Server 指标
API 服务器通过 go-grpc-prometheus 库在端口 9090 暴露标准 gRPC Prometheus 指标,包括:
grpc_server_handled_total- 服务器完成的 RPC 总数grpc_server_started_total- 服务器启动的 RPC 总数grpc_server_msg_received_total/grpc_server_msg_sent_total- 消息计数grpc_server_handling_seconds(启用PROMETHEUS_HISTOGRAM时)- RPC 处理时长
Tekton Chains
Tekton Chains 是一个安全组件,用于生成、签名并存储 Tekton Pipelines 构建工件的溯源信息。它观察已完成的 TaskRun 和 PipelineRun,然后创建证明和签名。
Chains controller 指标使用前缀 watcher_(与 Results Watcher 相同,但自定义指标名称不同,无冲突)。
Chains 指标
所有 Chains 指标均为无标签的计数器。
注意:官方 Tekton Chains 文档还提及 TaskRun 和 PipelineRun 的
*_signing_failures_total计数器,但当前上游源码中未见此指标。请根据部署版本核实。
Controller Framework 指标
所有 Tekton 控制器自动暴露以下基础设施指标。指标使用与组件自定义指标相同的前缀(如 tekton_pipelines_controller_、controller_、watcher_)。
部署 ServiceMonitor
要启用 Prometheus 对 Tekton 组件的抓取,请部署 ServiceMonitor 资源。
前提条件见 前提条件。
根据您的监控栈,参考以下指导:
- 若使用 Prometheus(Prometheus Operator),标签如
metadata.labels.prometheus: kube-prometheus必须与 Prometheus CR 的spec.serviceMonitorSelector匹配,否则该ServiceMonitor不会被抓取。 - 若使用 VictoriaMetrics,通常不需要类似
prometheus: kube-prometheus的标签;请根据您的监控配置创建ServiceMonitor/VMServiceScrape。
使用 Prometheus 时,可用以下命令查找并验证选择器:
若集群中无 Prometheus CR,通常监控由平台管理(如 VictoriaMetrics)或采用其他方式实现。此时通常不需 prometheus: kube-prometheus 标签,请遵循平台抓取规则。
更多信息请参见 集成外部指标。
Pipeline ServiceMonitor
Pipeline ServiceMonitor YAML
该 ServiceMonitor 匹配带有标签 app.kubernetes.io/part-of: tekton-pipelines(包括 remote-resolvers)的 Pipeline 服务,并在 tekton-pipelines 命名空间中抓取。
Triggers ServiceMonitor
Triggers ServiceMonitor YAML
该 ServiceMonitor 仅收集 Triggers controller 指标(controller_*),不包含 EventListener sink 指标。
EventListener Sink ServiceMonitor
EventListener Sink ServiceMonitor YAML
EventListener 服务通常运行在应用命名空间,因此此示例使用
namespaceSelector.any: true以支持跨命名空间抓取。若需更严格的范围,请改用matchNames并显式列出允许的命名空间。
Results ServiceMonitor
Results 服务同时带有 app.kubernetes.io/part-of: tekton-results 和 app.kubernetes.io/name 标签。为精确定位 API 和 Watcher(排除 Postgres),此示例匹配 app.kubernetes.io/name:
Results ServiceMonitor YAML
Results API 服务器使用端口名
prometheus(9090),Watcher 使用端口名metrics(9090)。每个服务仅暴露其中一个端口名,故只会抓取匹配的端点。
Chains ServiceMonitor
Chains ServiceMonitor YAML
验证
部署 ServiceMonitor 资源后,验证 Prometheus 是否抓取目标。
直接检查指标端点
EventListener sink 指标如
eventlistener_event_received_count和eventlistener_http_duration_seconds是请求驱动的。验证这些指标前,请至少向 EventListener 发送一次请求。
检查 Prometheus 目标
示例 PromQL 查询
MonitorDashboard 示例
以下 MonitorDashboard 资源提供了可直接使用的 Tekton 组件监控仪表盘。部署到 cpaas-system 命名空间的 tekton 文件夹下。
重要:每个面板必须包含唯一整数
id、datasource: prometheus和空的transformations: []。每个目标必须包含datasource: prometheus和refId。本文档中的持续时间 P50/P95 面板使用*_bucket查询,需metrics.*.duration-type=histogram;若使用lastvalue,请用类似avg_over_time(...)的 LastValue 风格表达式替换。
Tekton Pipeline 仪表盘
Tekton Pipeline Dashboard YAML
Tekton Pipeline 仪表盘解读(常见问题)
PipelineRun 总数(按状态)是控制器记录的完成事件计数器,不是 PipelineRun 对象总数。当前实现中,用户触发的取消(spec.status=Cancelled)可能未进入此计数路径,故cancelled序列可能缺失。验证取消量请查看 PipelineRun 对象和事件。正在运行的 PipelineRun是实时快照(当前运行数量),可独立于PipelineRun 总数变化。最近 5 分钟完成的 PipelineRun是吞吐量指标,低流量或空闲时出现 0 是正常。PipelineRun 成功率(累积)是控制器启动以来的累积值,不是 5 分钟窗口的成功率。短期失败不会立即导致大幅波动。Reconcile 调用次数(按成功)统计控制器 reconcile 循环次数,不是 PipelineRun 数量。- 状态序列仅显示在选定时间范围内有样本的标签值。无样本时曲线/图例不显示。
TaskRun 持续时间 P50 / P95(独立)和TaskRun 持续时间 P50 / P95(Pipeline 内)分开显示,避免混合查询不稳定。若环境仅暴露一类直方图,另一面板为空属正常。
Tekton Triggers 仪表盘
Tekton Triggers Dashboard YAML
Tekton Triggers 仪表盘解读(常见问题)
EventListener 数量、TriggerTemplate 数量、TriggerBinding 数量、ClusterTriggerBinding和ClusterInterceptor是对象计数快照,不是请求量或事件处理吞吐量。所有触发器资源计数(趋势)显示相同资源计数的合并趋势。抓取周期内与单资源趋势面板的短暂偏差属正常。- 无 Triggers 资源时显示
0是正常,不代表抓取失败。
Tekton Results 仪表盘
Tekton Results Dashboard YAML
Tekton Results 监控面板解读(常见问题)
- 此监控面板版本基于 Results Watcher 的
reconcile/workqueue指标以及 Results API 的 gRPC 指标,因此在常见部署场景下(logs_api=true,自动删除禁用)保持数据充足。 PipelineRun Reconcile Count (last 5m)和TaskRun Reconcile Count (last 5m)分别展示了success=true和success=false的 5 分钟增量。PipelineRun Reconcile Latency P95和TaskRun Reconcile Latency P95是基于 watcher reconcile 延迟直方图计算得出,流量较低时曲线可能较稀疏。Workqueue Depth显示当前队列深度,Workqueue Adds (last 5m)显示最近 5 分钟的入队量。gRPC Error Percentage (Results API, excl. NotFound/Canceled)表示异常错误占总请求的百分比,排除了常见业务返回码(NotFound、Canceled)。
Tekton Chains 监控面板
Tekton Chains 监控面板 YAML
Tekton Chains 监控面板解读(常见问题)
TaskRun Signatures Created (last 5m)、PipelineRun Signatures Created (last 5m)、Payloads Stored (last 5m)和Marked Signed (last 5m)使用increase(...[5m]),表示最近五分钟的增量。- 当没有新的签名或存储活动时,这些曲线会降至
0,这并不表示组件故障。 Payloads Stored和Marked Signed代表不同的处理阶段,因此它们的数值不一定总是匹配。