Skip to main content

监控指标

OpenKruise Agents 通过两个组件对外暴露 Prometheus 指标:

  • Sandbox Controller —— 调谐 Sandbox、SandboxSet、SandboxClaim 等资源,输出每个实例的状态、生命周期与异常类指标。
  • Sandbox Manager —— 提供 E2B 协议接入与 Sandbox 路由 / 代理数据面,输出请求级别的领取(claim)、生命周期、路由与配额指标。

本文介绍指标端点、Prometheus 抓取配置,以及在 openkruise/agents 仓库 master 分支上注册的全部指标。

端点​

组件HTTP 路径默认端口说明
Sandbox Manager/metrics8080(--port)/metrics 处理器挂在主服务 mux 上。如需独立监听端口,可使用 --metrics-port。
Sandbox Controller/metrics8443(--metrics-bind-address)标准的 controller-runtime 指标端点,通过 HTTPS 提供服务。

Sandbox Controller 的指标端点受 controller-runtime 的认证 / 鉴权过滤器保护,抓取端必须提供有权访问 /metrics 的 ServiceAccount Token。

Prometheus 抓取配置​

自建 Prometheus(prometheus.yml)​

scrape_configs:
- job_name: sandbox-manager
scrape_interval: 30s
scrape_timeout: 30s
metrics_path: /metrics
scheme: http
kubernetes_sd_configs:
- role: endpoints
namespaces:
names:
- sandbox-system # 替换为 Sandbox Manager 实际部署的命名空间
relabel_configs:
- source_labels: [__meta_kubernetes_endpoint_port_name]
regex: manager
action: keep

- job_name: sandbox-controller
scrape_interval: 30s
scrape_timeout: 30s
metrics_path: /metrics
scheme: https
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
kubernetes_sd_configs:
- role: endpoints
namespaces:
names:
- sandbox-system
relabel_configs:
- source_labels: [__meta_kubernetes_endpoint_port_name]
regex: https
action: keep

Prometheus Operator(ServiceMonitor)​

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: sandbox-manager
namespace: sandbox-system
labels:
release: prometheus # 需要与 Prometheus Operator 的 serviceMonitorSelector 匹配
spec:
namespaceSelector:
matchNames:
- sandbox-system
selector:
matchLabels:
app.kubernetes.io/name: sandbox-manager
endpoints:
- port: manager # Service 中指向容器端口 8080 的端口名
path: /metrics
interval: 30s
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: sandbox-controller
namespace: sandbox-system
labels:
release: prometheus
spec:
namespaceSelector:
matchNames:
- sandbox-system
selector:
matchLabels:
app.kubernetes.io/name: sandbox-controller
control-plane: controller-manager
endpoints:
- port: https
path: /metrics
scheme: https
interval: 30s
bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
tlsConfig:
insecureSkipVerify: true

指标清单​

下文列出的指标名与源码中注册的名称完全一致,未追加任何 namespace 或 subsystem 前缀。两个组件还会暴露标准的 controller-runtime、workqueue_*、rest_client_*、go_*、process_* 指标,为节省篇幅不在表中重复列出。

Sandbox Controller​

源码位置:pkg/controller/sandbox/metrics.go、 pkg/controller/sandboxset/metrics.go、 pkg/controller/sandboxclaim/metrics.go、 pkg/controller/sandboxclaim/core/metrics.go。

Sandbox 实例状态​

状态类 Gauge 仅在 Sandbox 处于对应状态时才会输出。

指标类型标签说明
sandbox_infoGaugenamespace、name,以及通过白名单透出的标签常量 1 序列,承载 Sandbox 的静态元信息。
sandbox_labelsGauge动态,由 --metric-labels-allowlist 控制常量 1 序列,将选定的 Sandbox 标签透出为 Prometheus 标签。
sandbox_createdGaugenamespace、nameSandbox 创建时间的 Unix 时间戳。
sandbox_deletion_timestampGaugenamespace、namemetadata.deletionTimestamp 的 Unix 时间戳(若已设置)。
sandbox_status_phaseGaugenamespace、name、phase当前 status.phase(Pending、Running、Paused、Resuming、Failed、Succeeded、Terminating),活跃 phase 取值为 1。
sandbox_status_readyGaugenamespace、nameReady 时为 1,否则为 0。
sandbox_status_ready_timeGaugenamespace、name上次进入 Ready 状态的 Unix 时间戳。
sandbox_status_inplace_updatingGaugenamespace、nameInplaceUpdate 条件为 False(即正在原地升级)时为 1。
sandbox_status_inplace_updating_timeGaugenamespace、nameInplaceUpdate 上次变为 False 的 Unix 时间戳。
sandbox_status_unpausedGaugenamespace、nameSandboxPaused 条件为 False 时为 1。
sandbox_status_unpaused_timeGaugenamespace、nameSandboxPaused 上次变为 False 的 Unix 时间戳。
sandbox_status_unresumedGaugenamespace、nameSandboxResumed 条件为 False 时为 1。
sandbox_status_unresumed_timeGaugenamespace、nameSandboxResumed 上次变为 False 的 Unix 时间戳。
sandbox_status_abnormalGaugenamespace、name、type观察到指定 type 的异常状况时为 1。
sandbox_status_abnormal_timeGaugenamespace、name、type上次观察到该异常状况的 Unix 时间戳。
sandbox_runtime_container_abnormalGaugenamespace、name、container运行时容器处于异常状态时为 1。
sandbox_runtime_container_abnormal_timeGaugenamespace、name、container上次观察到容器异常状态的 Unix 时间戳。

Sandbox 生命周期计数与耗时​

指标类型标签说明
sandbox_creation_totalCounternamespace、result控制器尝试创建 Sandbox 的次数,按结果区分。
sandbox_creation_duration_secondsHistogramnamespace从 Sandbox 创建到 Ready 的耗时。
sandbox_pause_totalCounternamespace、result控制器执行的休眠操作次数。
sandbox_pause_duration_secondsHistogramnamespace控制器侧休眠操作的耗时。
sandbox_resume_totalCounternamespace、result控制器执行的唤醒操作次数。
sandbox_resume_duration_secondsHistogramnamespace控制器侧唤醒操作的耗时。
sandbox_inplace_update_duration_secondsHistogramnamespace原地升级的耗时。
sandbox_deletion_duration_secondsHistogramnamespace从设置 deletionTimestamp 到完全删除的耗时。

SandboxSet​

指标类型标签说明
sandboxset_createdGaugenamespace、nameSandboxSet 创建时间的 Unix 时间戳。
sandboxset_replicasGaugenamespace、name当前 status.replicas。
sandboxset_available_replicasGaugenamespace、name当前 status.availableReplicas。
sandboxset_desired_replicasGaugenamespace、name当前 spec.replicas。
sandboxset_updated_replicasGaugenamespace、name当前 status.updatedReplicas。
sandboxset_updated_available_replicasGaugenamespace、name当前 status.updatedAvailableReplicas。
sandboxset_sandboxes_created_totalCounternamespace、name该 SandboxSet 创建的 Sandbox 总数。
sandboxset_sandboxes_claimed_totalCounternamespace、name该 SandboxSet 中已被领取的 Sandbox 总数。

SandboxClaim​

指标类型标签说明
sandbox_claim_infoGaugenamespace、name,以及 selector 透出的标签常量 1 序列,承载 SandboxClaim 的静态元信息。
sandbox_claim_createdGaugenamespace、nameSandboxClaim 创建时间的 Unix 时间戳。
sandbox_claim_status_phaseGaugenamespace、name、phaseSandboxClaim 当前所处的阶段。
sandbox_claim_start_timeGaugenamespace、name开始领取的 Unix 时间戳。
sandbox_claim_completion_timeGaugenamespace、name领取完成的 Unix 时间戳。
sandbox_claim_claimed_replicasGaugenamespace、name当前已领取的副本数。
sandbox_claim_desired_replicasGaugenamespace、namespec 中期望的副本数。
sandbox_claim_duration_secondsHistogramnamespace控制器侧观测到的端到端领取耗时。
sandboxset_claims_totalCounternamespace、name每个 SandboxSet 上观察到的领取事件总数。
sandboxclaim_expired_totalCounternamespace在被满足前过期的 SandboxClaim 数量。

Sandbox Manager​

源码位置:pkg/sandbox-manager/metrics.go、 pkg/servers/e2b/metrics.go、 pkg/proxy/metrics.go、 pkg/sandbox-manager/quota/metrics.go、 pkg/sandbox-manager/infra/sandboxcr/metrics.go。

领取(Claim)链路​

指标类型标签说明
sandbox_claim_totalCounternamespace、result、lock_typeSandbox Manager 收到的领取请求数。
sandbox_claim_creation_responsesCounternamespace、result由领取触发的 Sandbox 创建次数,按结果区分。
sandbox_claim_duration_secondsHistogramnamespaceSandbox Manager 侧观测到的端到端领取耗时。
sandbox_claim_retriesHistogramnamespace满足一次领取所需的重试次数。

生命周期操作​

指标类型标签说明
sandbox_clone_totalCounternamespace、result收到的 Sandbox 克隆请求数。
sandbox_clone_duration_secondsHistogramnamespace克隆操作的耗时。
sandbox_delete_responsesCounternamespace、result收到的删除请求数。
sandbox_delete_duration_secondsHistogramnamespace删除操作的耗时。
sandbox_pause_responsesCounternamespace、resultSandbox Manager 收到的休眠请求数。
sandbox_pause_duration_secondsHistogramnamespaceSandbox Manager 侧观测到的休眠耗时。
sandbox_resume_responsesCounternamespace、resultSandbox Manager 收到的唤醒请求数。
sandbox_resume_duration_secondsHistogramnamespaceSandbox Manager 侧观测到的唤醒耗时。
sandbox_snapshot_totalCounternamespace、resultE2B Server 收到的快照创建请求数。
sandbox_snapshot_duration_secondsHistogramnamespace快照创建耗时。

sandbox_pause_duration_seconds 与 sandbox_resume_duration_seconds 在 Sandbox Manager 与 Sandbox Controller 中各自独立注册,是两组不同的序列、由不同的抓取 job 拉取。比较时请保留 job 标签。

路由与代理​

指标类型标签说明
sandbox_routesGauge——当前代理路由表中的路由数量。
sandbox_peersGauge——已连接的 Peer 节点数。
sandbox_route_sync_totalCounternamespace、type、result已执行的路由同步操作数。
sandbox_route_sync_duration_secondsHistogramnamespace、type路由同步操作的耗时。

配额​

指标类型标签说明
sandbox_manager_quota_acquire_totalCounternamespace、result尝试获取配额的次数。
sandbox_manager_quota_release_totalCounternamespace、result尝试释放配额的次数。
sandbox_manager_quota_backend_errors_totalCounternamespace、error_type配额后端返回错误的次数。
sandbox_manager_quota_breaker_state_totalCounternamespace、from、to配额熔断器状态切换次数。
sandbox_manager_quota_breaker_open_duration_secondsHistogramnamespace配额熔断器处于打开状态的累计时长。
sandbox_manager_quota_antidrift_skipped_totalCounternamespace、reason跳过的反漂移(anti-drift)调谐次数。
sandbox_manager_quota_antidrift_errors_totalCounternamespace、error_type反漂移调谐失败次数。
sandbox_manager_quota_antidrift_event_release_totalCounternamespace、result事件驱动的反漂移配额释放次数。

基础设施回退​

指标类型标签说明
sandbox_get_claimed_fallback_totalCounternamespace、reasonSandbox Manager 在读取已领取 Sandbox 时触发回退的次数。
sandboxcr_quota_source_event_drop_totalCounternamespace、reason监听 Sandbox CR 时被丢弃的配额来源事件数。

推荐的告警与面板​

以下 PromQL 仅作为起点,阈值请结合实际流量画像调整。

  • 资源池枯竭 —— sum(sandboxset_available_replicas) by (namespace, name) == 0 且 sum(sandboxset_desired_replicas) by (namespace, name) > 0。
  • 领取耗时 —— histogram_quantile(0.95, sum(rate(sandbox_claim_duration_seconds_bucket[5m])) by (le, namespace))。
  • 领取失败率 —— sum(rate(sandbox_claim_total{result!="success"}[5m])) by (namespace) / sum(rate(sandbox_claim_total[5m])) by (namespace)。
  • 生命周期回归 —— 周环比对比 sandbox_pause_duration_seconds_bucket、sandbox_resume_duration_seconds_bucket、sandbox_clone_duration_seconds_bucket 的 p95。
  • 路由不稳定 —— rate(sandbox_route_sync_total{result!="success"}[5m]) > 0,或 sandbox_peers 低于预期副本数。
  • 配额后端压力 —— rate(sandbox_manager_quota_backend_errors_total[5m]) 持续大于 0,或 sandbox_manager_quota_breaker_state_total{to="open"} 持续上升。
  • 控制器健康度 —— 标准的 controller_runtime_reconcile_errors_total、workqueue_unfinished_work_seconds、rest_client_requests_total{code=~"5.."}。

注意事项​