ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Tekton Pipeline 控制器指标(Metrics)完整指南:OpenTelemetry 导出、ConfigMap 配置与 PromQL 实践

Tekton Pipeline 控制器指标(Metrics)完整指南:OpenTelemetry 导出、ConfigMap 配置与 PromQL 实践 云原生CI/CDDevOps后端【免费下载链接】pipelineA cloud-native Pipeline resource.项目地址https://gitcode.com/gh_mirrors/pipelin/pipeline点击查看免费下载Tekton Pipeline 控制器会在controller-service的9090端口对外暴露一组可观测性指标覆盖 PipelineRun/TaskRun 的时长、计数、运行中实例、被限流实例、Pod 调度延迟以及 Knative/Go 运行时基础设施指标。本文以仓库中的 docs/metrics.md 为主体结合 pkg/pipelinerunmetrics/metrics.go、pkg/taskrunmetrics/metrics.go、pkg/apis/config/metrics.go 等源码与 config/config-observability.yaml 实际配置系统讲解指标清单、导出协议、聚合级别与时长类型配置以及迁移到 OpenTelemetry 后的查询与排障方法帮助你在生产集群中搭建完整的 Tekton Pipeline 监控体系。一、指标概览与导出方式Tekton Pipeline 控制器Deployment 名为tekton-pipelines-controller位于tekton-pipelines命名空间通过名为controller-service的 Service 在端口9090暴露全部指标。所有指标均基于 OpenTelemetry 埋点导出具体行为由config-observabilityConfigMap 控制见 config/config-observability.yaml。默认启用Prometheus 导出即在9090/metrics上提供 Prometheus 文本格式的抓取端点同时支持OTLP gRPC 与 OTLP HTTPhttp/protobuf导出可将指标直接发送到 OpenTelemetry Collector 或兼容后端也可将导出完全关闭none。在源码层面PipelineRun 与 TaskRun 指标分别由 pkg/pipelinerunmetrics/metrics.go 与 pkg/taskrunmetrics/metrics.go 中的Recorder结构体注册与上报。两者都通过otel.GetMeterProvider().Meter(tekton_pipelines_controller)创建仪表Meter因此所有指标都会带有一个otel_scope_name标签标识埋点包该标签是信息性标签对绝大多数 PromQL 查询透明无影响。二、核心 Tekton 指标Core Tekton Metrics下表列出了控制器提供的全部核心 Tekton 指标。其中标记为*的标签Labels/Tags是可选的——是否出现取决于metrics.taskrun.level与metrics.pipelinerun.level的聚合级别配置详见下文第四节。名称类型Labels/Tags状态tekton_pipelines_controller_pipelinerun_duration_seconds_[bucket, sum, count]Histogram/LastValue(Gauge)*pipelinepipeline_name*pipelinerunpipelinerun_namestatusstatusnamespacepipelinerun-namespace*reasonreasonexperimentaltekton_pipelines_controller_pipelinerun_taskrun_duration_seconds_[bucket, sum, count]Histogram/LastValue(Gauge)*pipelinepipeline_name*pipelinerunpipelinerun_namestatusstatus*tasktask_name*taskruntaskrun_namenamespacepipelineruns-taskruns-namespace*reasonreasonexperimentaltekton_pipelines_controller_pipelinerun_totalCounterstatusstatusexperimentaltekton_pipelines_controller_running_pipelinerunsGaugeexperimentaltekton_pipelines_controller_taskrun_duration_seconds_[bucket, sum, count]Histogram/LastValue(Gauge)statusstatus*tasktask_name*taskruntaskrun_namenamespacepipelineruns-taskruns-namespace*reasonreasonexperimentaltekton_pipelines_controller_taskrun_totalCounterstatusstatusexperimentaltekton_pipelines_controller_running_taskrunsGaugeexperimentaltekton_pipelines_controller_running_taskruns_throttled_by_quotaGaugenamespacepipelinerun-namespaceexperimentaltekton_pipelines_controller_running_taskruns_throttled_by_nodeGaugenamespacepipelinerun-namespaceexperimentaltekton_pipelines_controller_running_pipelineruns_waiting_on_pipeline_resolutionGaugeexperimentaltekton_pipelines_controller_running_pipelineruns_waiting_on_task_resolutionGaugeexperimentaltekton_pipelines_controller_running_taskruns_waiting_on_task_resolution_countGaugeexperimentaltekton_pipelines_controller_taskruns_pod_latency_millisecondsHistogramnamespacenamespace*tasktask_name*taskruntaskrun_name无界基数参见上游 issue #9393experimental需要说明的几点时长指标的类型二选一pipelinerun_duration_seconds、pipelinerun_taskrun_duration_seconds、taskrun_duration_seconds三类时长指标既可以是 Histogram直方图也可以是 LastValue(Gauge)具体由metrics.taskrun.duration-type与metrics.pipelinerun.duration-type决定见第四节。status 取值从 pkg/pipelinerunmetrics/metrics.go 的DurationAndCount实现可见status取值为success、failed、cancelled。当 Succeeded 条件为False且 Reason 为PipelineRunReasonCancelledTaskRun 对应TaskRunReasonCancelled时标记为cancelled否则为failed条件为True时为success。duration 计算口径duration CompletionTime - StartTime若CompletionTime尚未设置则使用time.Since(StartTime)。相关逻辑同样位于上述DurationAndCount中。reason 标签可选默认不携带reason标签需开启metrics.count.enable-reason: true才会出现在时长指标上*_total计数器永远不会携带 reason 标签。等待解析resolution指标用于观测 PipelineRun/TaskRun 因等待 PipelineRef/TaskRef 解析而挂起的情况对应状态 ReasonPipelineRunReasonResolvingPipelineRef与TaskRunReasonResolvingTaskRef见 pkg/pipelinerunmetrics/metrics.go 的observeRunningPipelineRuns。限流指标running_taskruns_throttled_by_quota统计因 Kubernetes ResourceQuota 而被挂起的 TaskRun Pod/容器数量running_taskruns_throttled_by_node统计因节点级约束如资源不足被挂起的数量。源码中通过pod.ReasonExceededResourceQuota与pod.ReasonExceededNodeResources状态 Reason 进行归类见 pkg/taskrunmetrics/metrics.go 的observeRunningTaskRuns。Pod 调度延迟taskruns_pod_latency_milliseconds以毫秒为单位统计 TaskRun Pod 的调度延迟采用直方图类型其显式桶边界为[5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000]见 pkg/taskrunmetrics/metrics.go。该指标带task、taskrun标签且基数无界需要关注基数增长。三、基础设施指标Infrastructure Metrics以下指标由 Knative 与 Go 运行时基础设施提供。它们的名称在 OpenCensus 向 OpenTelemetry 迁移过程中发生了变更完整对照见 metrics-migration-otel.md名称类型描述kn_workqueue_adds_totalCounterWorkqueue 新增条目数kn_workqueue_depthGaugeWorkqueue 当前深度kn_workqueue_queue_duration_secondsHistogram条目在队列中停留的时间kn_workqueue_process_duration_secondsHistogram处理条目耗时kn_workqueue_retries_totalCounterWorkqueue 重试次数kn_workqueue_unfinished_work_secondsGauge进行中工作的秒数http_client_request_duration_secondsHistogramK8s API 客户端请求时长kn_k8s_client_http_response_status_code_totalCounterK8s API 响应状态码计数go_goroutinesGaugegoroutine 数量go_memstats_alloc_bytesGauge已分配且仍在使用中的字节数迁移要点来自 metrics-migration-otel.mdWorkqueue 指标tekton_pipelines_controller_workqueue_*→kn_workqueue_*前缀变更其中queue_latency_seconds更名为queue_duration_seconds、work_duration_seconds更名为process_duration_secondsK8s 客户端指标tekton_pipelines_controller_client_latency→http_client_request_duration_secondstekton_pipelines_controller_client_results→kn_k8s_client_http_response_status_code_totalGo 运行时指标tekton_pipelines_controller_go_*→go_*如go_goroutines、go_memstats_alloc_bytes已移除指标tekton_pipelines_controller_reconcile_count与tekton_pipelines_controller_reconcile_latency请改用kn_workqueue_adds_total与kn_workqueue_process_duration_seconds。注意旧版 OpenCensus 配置键metrics.backend-destination、metrics.stackdriver-project-id等已不再受支持。仓库中的测试数据文件 pkg/apis/config/testdata/config-observability.yaml 仍保留着这些旧键作为历史参照但实际运行环境中必须使用新的 OpenTelemetry 配置键。四、通过config-observabilityConfigMap 配置指标config-observabilityConfigMap 位于tekton-pipelines命名空间仓库提供了完整示例 config/config-observability.yaml。控制器通过 pkg/apis/config/store.go 的NewStore注册NewMetricsFromConfigMap构造函数监听该 ConfigMap 的变更并支持运行时热更新见 pkg/pipelinerunmetrics/metrics.go 的OnStore它会比对新旧配置仅在配置变化时重新配置 Recorder。4.1 指标与追踪导出协议metrics-protocol键控制指标的导出协议值描述prometheus在 9090 端口启动 HTTP 服务器提供/metrics抓取端点默认值grpc通过 OTLP gRPC 导出到配置的metrics-endpointhttp/protobuf通过 OTLP HTTP 导出到配置的metrics-endpointnone禁用指标导出tracing-protocol键控制分布式追踪值描述none禁用追踪默认值grpc通过 OTLP gRPC 将 trace 导出到tracing-endpointhttp/protobuf通过 OTLP HTTP 将 trace 导出到tracing-endpointstdout将 trace 打印到标准输出用于调试配套的键还包括metrics-endpointOTLP 导出端点gRPC/http 协议下必填如otel-collector.observability.svc.cluster.local:4317metrics-export-interval指标导出间隔如30s、1mtracing-endpoint、tracing-sampling-rate追踪导出端点与采样率0.01.0默认1.0即 100% 采样runtime-profiling、runtime-export-interval运行时 profile 开关与导出间隔。注意来自 config/config-observability.yaml 的内联注释tracing-protocol等键配置的是全局 OpenTelemetry TracerProvider仅用于 notification 与 cloud event reconcilerTaskRun/PipelineRun reconciler 使用通过config-tracing独立配置的 tracer两者互不影响。4.2 Tekton 专用指标设置默认情况下TaskRun 与 PipelineRun 指标的配置值为metrics.taskrun.level: task metrics.taskrun.duration-type: histogram metrics.pipelinerun.level: pipeline metrics.running-pipelinerun.level: metrics.pipelinerun.duration-type: histogram metrics.count.enable-reason: falseConfigMap 中可用的取值与说明如下ConfigMap data值描述metrics.taskrun.leveltaskrun指标聚合级别为 taskrunmetrics.taskrun.leveltask指标聚合级别为 task指标中不含 taskrun 标签metrics.taskrun.levelnamespace指标聚合级别为 namespace指标中不含 task 与 taskrun 标签metrics.pipelinerun.levelpipelinerun指标聚合级别为 pipelinerunmetrics.pipelinerun.levelpipeline指标聚合级别为 pipeline指标中不含 pipelinerun 标签metrics.pipelinerun.levelnamespace指标聚合级别为 namespace指标中不含 pipeline 与 pipelinerun 标签metrics.running-pipelinerun.levelpipelinerunrunning-pipelinerun 指标聚合级别为 pipelinerunmetrics.running-pipelinerun.levelpipelinerunning-pipelinerun 指标聚合级别为 pipeline指标中不含 pipelinerun 标签metrics.running-pipelinerun.levelnamespacerunning-pipelinerun 指标聚合级别为 namespace指标中不含 pipeline 与 pipelinerun 标签metrics.running-pipelinerun.level空running-pipelinerun 指标聚合级别为 cluster指标中不含 namespace、pipeline 与 pipelinerun 标签metrics.taskrun.duration-typehistogramtekton_pipelines_controller_pipelinerun_taskrun_duration_seconds与tekton_pipelines_controller_taskrun_duration_seconds为直方图类型metrics.taskrun.duration-typelastvalue上述两个指标为 gauge/lastvalue 类型metrics.pipelinerun.duration-typehistogramtekton_pipelines_controller_pipelinerun_duration_seconds为直方图类型metrics.pipelinerun.duration-typelastvaluetekton_pipelines_controller_pipelinerun_duration_seconds为 gauge/lastvalue 类型metrics.count.enable-reasonfalse是否在时长指标*_duration_seconds上包含reason标签永远不会影响总数计数器*_totalmetrics.taskrun.throttle.enable-namespacefalse是否在tekton_pipelines_controller_running_taskruns_throttled_by_quota指标上包含namespace标签这些默认值在 pkg/apis/config/metrics.go 中以常量形式定义并落地默认聚合级别DefaultTaskrunLevel task、DefaultPipelinerunLevel pipeline、DefaultRunningPipelinerunLevel 空即集群级默认时长类型DefaultDurationTaskrunType histogram、DefaultDurationPipelinerunType histogram默认开关CountWithReason false、ThrottleWithNamespace false。newMetricsFromMap函数在解析 ConfigMap 时对每个键进行覆盖式读取未配置则保持默认其中metrics.count.enable-reason与metrics.taskrun.throttle.enable-namespace只要值不等于字符串false即视为开启。仓库测试数据 pkg/apis/config/testdata/config-observability-namespacelevel.yaml、pkg/apis/config/testdata/config-observability-throttle.yaml 与 pkg/apis/config/testdata/config-observability-reason.yaml 分别验证了 namespace 级别、限流标签与 reason 标签的解析行为。重要约束当选择pipelinerun或taskrun级别即带上具体实例名标签时时长指标没有 Histogram 可用只会提供 LastValue/Gauge——因为单实例只会产生一个数据点直方图只会生成单个桶没有意义。同时官方明确建议不要使用 TaskRun 与 PipelineRun 级别的指标因为这会引入无界基数unbounded cardinality导致可观测性数据库膨胀、性能劣化。生产环境推荐使用task、pipeline或namespace级别的聚合。4.3 时长直方图的桶边界源码中为时长直方图定义了自定义显式桶边界见 pkg/taskrunmetrics/metrics.go 与 pkg/pipelinerunmetrics/metrics.go10, 30, 60, 300, 900, 1800, 3600, 5400, 10800, 21600, 43200, 86400即 10 秒、30 秒、1 分钟、5 分钟、15 分钟、30 分钟、1 小时、1.5 小时、3 小时、6 小时、12 小时、24 小时单位秒外加隐式的Inf桶。Pod 调度延迟直方图则使用毫秒桶边界[5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000]。五、验证指标修改config-observabilityConfigMap 后可通过端口转发快速验证配置是否生效kubectl port-forward -n tekton-pipelines service/tekton-pipelines-controller 9090然后在另一个终端访问并检查指标端点curl http://127.0.0.1:9090/metricsPrometheus 的抓取目标ServiceMonitor 或tekton-pipelines-controllerService 的 annotation应指向tekton-pipelines-controller的9090端口。若修改配置后未生效可参考 metrics-migration-otel.md 的排障建议重启控制器并观察日志——kubectl rollout restart deployment/tekton-pipelines-controller -n tekton-pipelines kubectl logs -n tekton-pipelines deployment/tekton-pipelines-controller | grep -i observability六、PromQL 查询实践以下查询示例基于默认配置core 指标名称与 OpenCensus 时代保持一致迁移后无需修改PipelineRun 成功率sum(rate(tekton_pipelines_controller_pipelinerun_total{statussuccess}[5m])) / sum(rate(tekton_pipelines_controller_pipelinerun_total[5m]))PipelineRun 时长 P95默认配置下直方图桶无需额外聚合histogram_quantile(0.95, rate(tekton_pipelines_controller_pipelinerun_duration_seconds_bucket[5m]) )若开启了metrics.count.enable-reason: true必须对reason标签做聚合以避免基数膨胀histogram_quantile(0.95, sum by(le) ( rate(tekton_pipelines_controller_pipelinerun_duration_seconds_bucket[5m]) ) )控制器内存与 Workqueue 处理速率基础设施指标注意新前缀go_memstats_alloc_bytesrate(kn_workqueue_adds_total{namepipelinerun}[5m])运行中的 PipelineRun 数量tekton_pipelines_controller_running_pipelineruns七、迁移与排障速查从 OpenCensus 迁移到 OpenTelemetry 是破坏性变更升级前需重点关注详见 metrics-migration-otel.md更新 ConfigMap将metrics.backend-destination: prometheus改为metrics-protocol: prometheus更新仪表盘与告警基础设施指标名称已全部变更kn_workqueue_*、go_*、http_client_*core 指标tekton_pipelines_controller_pipelinerun_*/taskrun_*在默认配置下完全向后兼容无需修改谨慎启用 reason 标签metrics.count.enable-reason: true会使时间序列数量增加 35 倍查询中请使用sum by(le)聚合规避在预发环境先行验证该迁移是硬切换升级后控制器只输出 OpenTelemetry 指标旧指标名将不再存在。常见排障手段来自 metrics-migration-otel.mdPrometheus 未抓取检查 Prometheus UI → Status → Targets 中tekton-pipelines-controller状态是否为UP并确认 ServiceMonitor 配置OTLP 导出失败检查控制器日志中otel|export|metric关键字并用nc -zv otel-collector... 4317测试端点连通性配置未生效滚动重启控制器并检查config-observability相关日志或提升config-logging中loglevel.controller为debug。八、总结Tekton Pipeline 的指标体系分为两层以 PipelineRun/TaskRun 为核心的业务指标时长、计数、运行数、限流、解析等待、Pod 调度延迟与 Knative/Go 提供的基础设施指标。通过config-observabilityConfigMap你可以自由切换 Prometheus / OTLP gRPC / OTLP HTTP 导出协议按namespace、pipeline、task或实例级别调整聚合粒度并在 Histogram 与 LastValue 之间选择时长指标类型。生产环境的推荐做法是保持默认的task/pipeline聚合级别与 Histogram 时长类型不要开启enable-reason将基础设施告警切换到kn_*与go_*新指标名从而在可控基数下获得稳定的 Tekton Pipeline 可观测性。赞分享云原生CI/CDDevOps后端【免费下载链接】pipelineA cloud-native Pipeline resource.项目地址https://gitcode.com/gh_mirrors/pipelin/pipeline点击查看免费下载相关推荐OneUptime Metrics Monitor 完整指南基于 OpenTelemetry 的指标监控与告警配置OneUptime Metrics Monitor 完整指南基于 OpenTelemetry 的指标监控与告警配置 导读 Metrics Monitor指标可观测性后端运维前端云原生微服务AI AgentArgo Workflows 指标Metrics完全指南控制器指标、自定义指标与 Prometheus/OpenTelemetry 采集实战Argo Workflows 指标Metrics完全指南控制器指标、自定义指标与 Prometheus/OpenTelemetry 采集实战 Argo W云原生容器编排工作流自动化任务调度后端Clair v4 指标Metrics监控指南Prometheus 与 OTLP 导出配置详解Clair v4 指标Metrics监控指南Prometheus 与 OTLP 导出配置详解 Clair v4 内置了完整的可观测性能力通过独立的 in网络安全应用安全云原生后端上一篇Gibbeds Borderlands 2 Tools打开《无主之地2》无限可能的魔法钥匙下一篇Dagger TypeScript SDK 中 WorkspaceFindUpOpts 类型别名详解Workspace.findUp 的起点参数与向上查找语义创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表