Skip to main content
operator 会暴露与 Prometheus 兼容的指标以及 Kubernetes 健康探针,以便你观测其协调活动、发现卡住的控制器,并在发生故障时发出告警。 本指南将介绍 operator 暴露了哪些内容、如何抓取这些内容,以及哪些查询在日常使用中最实用。
本指南介绍的是 operator 进程本身 (controller manager) 。对于 ClickHouse server 指标 (查询、parts、复制延迟) ,请使用 ClickHouse 中的 Prometheus 端点 单独进行抓取。

端点

operator 进程会在 manager pod (容器组) 内暴露两个 HTTP 端点: 直接运行 operator 二进制文件时,指标端点默认关闭 (--metrics-bind-address=0) 。Helm 图表会通过 metrics.enable: truemetrics.port: 8080 启用它。 健康探针端点始终启用;部署模板会将 /healthz/readyz 配置为该 pod (容器组) 在端口 8081 上的存活探针和就绪探针。

Operator 二进制参数

相关的 manager 参数 (定义在 cmd/main.go 中) :
该参数帮助文本中的 8443 (HTTPS) / 8080 (HTTP) 约定仅作提示。Helm 图表会在 8080 上提供 HTTPS,因为它同时设置了 metrics.port: 8080metrics.secure: true。这里不会根据端口检测模式——选择 HTTPS 还是 HTTP 取决于 --metrics-secure

通过 Helm 启用指标

该 Helm 图表 已为指标端口创建了一个 Service,并且还可选择为 prometheus-operator 创建 ServiceMonitor 指标端点默认已启用 (metrics.enable: true、端口 8080,并通过 metrics.secure: true 以 HTTPS 方式提供服务) 。通常你唯一需要修改的设置是 prometheus.enable,这样 Helm 图表 就会为你创建一个 ServiceMonitor
如果不使用 cert-manager,还需要设置 certManager.enable: false。此时,ServiceMonitor 将以 insecureSkipVerify: true 抓取指标,仅依赖 bearer-token 身份验证。 完整的指标相关默认配置如下:
应用:
安装后,Helm 图表 会创建:
  • Service/<resource-prefix>-metrics-service — 暴露端口 8080 (当 metrics.secure: true 时使用 HTTPS) 。
  • ServiceMonitor/<resource-prefix>-controller-manager-metrics-monitor — 在 prometheus.enable: true 时创建。
  • ClusterRole/<resource-prefix>-metrics-reader — 为非资源 URL /metrics 授予 get 权限。

保护指标端点

metrics.secure: true 时,指标服务器会对每次抓取都强制启用 TLS Kubernetes 身份验证/授权。抓取器必须:
  1. 提供有效的 Kubernetes Bearer 令牌。
  2. 使用一个绑定到集群角色的 ServiceAccount,且该集群角色被授予对非资源 URL /metrics 执行 get 的权限。
该 Helm 图表 附带了这样一个集群角色:
将其绑定到抓取器 (通常为 Prometheus) 使用的 ServiceAccount:
如果指标端点返回 401 Unauthorized403 Forbidden,则说明抓取器正在使用 HTTPS,但缺少 Kubernetes Bearer 令牌、该令牌未获授权,或者其 ServiceAccount 缺少上述绑定。在共享集群中,不建议通过设置 metrics.secure: false 来禁用安全性,因为任何能够通过网络访问该 pod (容器组) 的人都可能抓取该端点。

ServiceMonitor 参考

prometheus.enable: true 时,该 Helm 图表 会渲染出如下形态的 ServiceMonitor:
如果你的 Prometheus 实例未运行 cert-manager,请设置 tlsConfig.insecureSkipVerify: true,并仅依赖 bearer-token 身份验证——当 certManager.enable: false 时,该 chart 已默认这样做。

独立 Prometheus 示例

如果您未使用 kube-prometheus-stack,该仓库在 examples/prometheus_secure_metrics_scraper.yaml 中提供了一个完整的独立示例。它会创建一个 ServiceAccount、所需的 RBAC,以及一个用于选取该 operator 的 ServiceMonitor 的 Prometheus CR。

健康探针端点

这两个端点都注册了同一个简单的 Ping 检查 (sigs.k8s.io/controller-runtime 中的 healthz.Ping) 。因此,探针失败表示“manager 进程未在 :8081 上提供 HTTP 服务”,而不是“控制器不健康”。要检测控制器级别的问题,请改用协调指标 默认情况下,这两个端点都通过端口 8081 提供服务。它们接入部署的方式如下:
探针反复失败通常意味着探针服务本身根本没有启动起来——例如,manager 在启动过程中提前退出。请检查 manager 日志,查看是否有 unable to start manager、RBAC 失败或 cache did not sync 错误。

指标目录

该 Operator 不会注册自定义的 Prometheus 收集器。以下内容均由底层的 controller-runtimeclient-go 库暴露。按用途分组后,最有用的序列包括:

协调活动

controller 标记是 controller-runtime 根据通过 For(...) 注册的资源类型推导出来的。按当前 internal/controller/clickhouseinternal/controller/keeper 中的代码,它们分别对应 clickhouseclusterkeepercluster。如果你自定义了 operator,请对 /metrics 执行一次性抓取以进行验证。

工作队列

namecontroller 这两个标记的值相同 (即控制器名称) 。

API 服务器流量

Leader 选举

Helm 图表默认启用 --leader-elect,因此在标准 Helm 安装中会提供此指标。若直接运行该二进制文件且未使用此标志,则不会提供该指标。

运行时

标准 Go 进程和运行时采集器——go_goroutinesgo_memstats_*process_cpu_seconds_totalprocess_resident_memory_bytes 等。

常用 PromQL 查询

健康总览

积压检测

限流与 API 压力

Leader 状态 (HA 部署)

建议的告警

PrometheusRule 的参考起点 (请根据你的环境调整阈值) :
只有在启用 leader 选举时,最后一条规则才有意义。

验证设置

下面进行一次快速的端到端检查,假设该 Helm 图表 安装在 clickhouse-operator-system 中:
如果抓取返回的是 Prometheus 指标暴露格式的指标,则说明端点和 RBAC 已正确配置。
  • 安装 — 与监控相关的 Helm 配置值。
  • 配置 — 与指标服务器共享的 TLS 配置。
最后修改于 2026年7月3日