TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

全盘剖析 Cilium 指标:Agent、Operator、Envoy、Hubble 四大组件

状态:草稿(2026-10-05),已反映实测结果。 指标列表和数值是实验环境中单个节点上的 Agent、同节点的 Envoy 和 Hubble,以及一个 Operator 的只读单点快照。指标含义基于 HELP 文本和 Cilium 文档,在撰写本文时未重新打开文档进行核对(未确认)。未执行 PromQL 示例(未执行)。编写规则:以实测数据为基础,未测量的内容标记为「未实测」。

目录

1. 提供指标的四个地方

Cilium 1.20.1(kube-proxy-replacement=true,启用 VXLAN 隧道和 Hubble)在四个地方分别提供指标。它们全部作为集群内部的无头服务(Headless Service)开放。

来源 端口 服务 指标系列 时间序列数(单个节点或单个 Pod)
Agent 9962 cilium-agent 169 1,667
Operator 9963 cilium-operator 96 769
Envoy 9964 cilium-envoy 450 2,863
Hubble 9965 hubble-metrics 14 约 8 万

配置是 enable-metrics=true, enable-hubble-open-metrics=true 。Hubble 将导出的指标由 hubble-metrics 配置决定。

dns drop tcp flow port-distribution icmp
httpV2:exemplars=true;labelsContext=source_ip,source_namespace,source_workload,destination_ip,destination_namespace,destination_workload,traffic_direction

绝大多数数字来自 Hubble 这一事实是本文的一个重要观察,因此将在第 6 节中单独讨论。

2. Agent 指标(cilium_* 约 100 个系列)

在 169 个系列中,Agent 有 cilium_* 约 100 个,其余为 Go 运行时(go_*)和进程指标。其含义是将 HELP 文本翻译为韩语后的结果。

2.1 数据平面:转发、丢弃、连接跟踪

指标 类型 含义
cilium_forward_count_total, cilium_forward_bytes_total counter 转发的数据包和字节数(按方向)
cilium_drop_count_total, cilium_drop_bytes_total counter 丢弃的数据包和字节数(按原因、方向)
cilium_datapath_conntrack_gc_runs_total counter 连接跟踪清理操作执行次数
cilium_datapath_conntrack_gc_entries gauge 清理后立即存活/删除的条目数
cilium_datapath_conntrack_gc_duration_seconds histogram 清理耗时
cilium_datapath_conntrack_gc_interval_seconds gauge 清理间隔
cilium_datapath_conntrack_gc_key_fallbacks_total, …dump_resets_total counter 清理过程中的键替换、转储重启次数
cilium_nat_endpoint_max_connection gauge 每个外部端点的源端口饱和度(最大值)
cilium_bpf_ratelimit_dropped_total counter 因 BPF 速率限制而丢弃的数量
cilium_act_processing_time_seconds histogram 遍历活动连接跟踪映射的时间

2.2 BPF 资源

指标 类型 含义
cilium_bpf_map_pressure gauge 每个映射的填充率(0~1)
cilium_bpf_map_capacity gauge 每个映射组的容量
cilium_bpf_map_ops_total counter 每个映射的操作次数
cilium_bpf_maps, cilium_bpf_progs gauge BPF 映射和程序的数量
cilium_bpf_maps_virtual_memory_max_bytes, cilium_bpf_progs_virtual_memory_max_bytes gauge 各自使用的内核内存上限

2.3 端点、身份、策略

指标 类型 含义
cilium_endpoint gauge 此 Agent 管理的端点数
cilium_endpoint_state gauge 按状态分类的端点数(ready、regenerating 等)
cilium_endpoint_regenerations_total, …_time_stats_seconds counter, histogram 端点再生次数与时间
cilium_endpoint_component_status, …restoration_* gauge 组件状态、重启后的恢复阶段及耗时
cilium_identity, cilium_identity_label_sources gauge 已分配身份数(按类型)、按标签来源分类的身份数
cilium_identity_updater_timer_* histogram 身份更新定时器的耗时、等待时间、合并请求数
cilium_ip_addresses, cilium_ipam_* gauge, counter 已分配 IP 数、IPAM 容量与事件
cilium_ipcache_errors_total counter IP 与身份缓存错误
cilium_policy, cilium_policy_max_revision gauge 已加载策略数、最大版本号
cilium_policy_endpoint_enforcement_status gauge 按强制方式分类的端点数(ingress、exhaust、both、none、audit-*)
cilium_policy_change_total, …implementation_delay, …incremental_update_duration counter, histogram 策略变更次数、应用延迟
cilium_policy_selector_cache_*, …selector_match_count_max gauge, histogram 选择器缓存大小、操作延迟、单个选择器选中的身份数
cilium_policy_l7_total, …missing_proxy_redirects counter, gauge L7 代理处理请求数、丢失的代理重定向数
cilium_fqdn_selectors, cilium_fqdn_gc_deletions_total gauge, counter FQDN 选择器数、FQDN 清理条目数
cilium_localredirectpolicy_controller_duration_seconds histogram 本地重定向策略处理时间

2.4 Kubernetes 集成与控制平面

指标 类型 含义
cilium_k8s_client_api_calls_total counter kube-apiserver 调用次数(按主机、方法、响应码)
cilium_k8s_client_api_latency_time_seconds, …rate_limiter_duration_seconds histogram 调用延迟、客户端限速等待
cilium_k8s_workqueue_* (7个系列) counter, gauge, histogram 工作队列的添加、深度、等待时间、处理时间、重试
cilium_kubernetes_events_received_total, …events_total counter 接收/处理的 Kubernetes 事件数
cilium_kubernetes_resource_sync_duration gauge 按资源分类的同步耗时
cilium_k8s_terminating_endpoints_events_total counter 终止过程中的端点事件数
cilium_event_ts gauge 控制平面最后接收事件的时间
cilium_agent_api_process_time_seconds histogram Agent API 调用处理时间
cilium_api_limiter_* (6个系列) gauge, counter API 限速器的限制、等待、进行中的请求
cilium_controllers_failing, …runs_total, …runs_duration_seconds, …group_runs_total gauge, counter, histogram 内部控制器的失败次数、运行次数与时间
cilium_hive_* (9个系列) gauge, counter, histogram 内部模块(hive)的启动时间、状态、任务执行次数与时间
cilium_drift_checker_config_delta gauge Agent 配置与原始配置的不一致数
cilium_errors_warnings_total counter 错误和警告日志数(按级别、子系统)
cilium_subprocess_start_total counter 子进程启动次数
cilium_version gauge 版本信息

2.5 节点与集群

指标 类型 含义
cilium_nodes_all_num gauge 管理的节点数
cilium_nodes_all_events_received_total, …datapath_validations_total counter 节点事件数、数据路径验证调用数
cilium_node_health_connectivity_status gauge 按与其他节点 ICMP/HTTP 连接状态分类的端点数
cilium_node_health_connectivity_latency_seconds histogram 观察到的到其他节点的最后延迟
cilium_unreachable_nodes, cilium_unreachable_health_endpoints gauge 不可达节点和健康端点数
cilium_clustermesh_remote_clusters gauge 连接的远程集群数

2.6 功能开启状态显示(cilium_feature_* 32个)

这是一组值为 1 时表示开启的 Gauge 集合。对于配置审计非常方便。从单个节点读取的开启状态如下:

没有与加密相关的指标。 wireguard 与 encrypt 所在的行均为 0。这与透明加密(WireGuard)处于关闭状态一致,开启后生成的指标未能亲自开启进行测试(未实测,为避免更改生产配置)。相反,阅读 Cilium 官方指标文档(Feature Metrics 表)后发现,存在一个用于通告透明加密模式的 Gauge(transparent_encryption,标签为 mode, node2node_enabled, strict_mode_enabled),并且 mode 的值可以包含 wireguard 和 ipsec 。由于未能确认实际暴露名称的前缀,开启后应当通过 grep -i encryption 进行查找。

2.7 进程与运行时

cilium_process_*(CPU 时间、打开的文件、驻留内存、网络收发字节等 9 个系列)和 go_*(内存统计 22 个系列、GC、调度器)。单节点上 Agent 的驻留内存约为 270MiB(283,545,600B)。

3. Operator 指标(96 个系列)

分组 指标 含义
IPAM cilium_operator_ipam_* 约 15 个系列 IP 耗尽解决、Kubernetes 同步、重新同步的队列、延迟、耗时
身份清理 …identity_gc_entries, …identity_gc_latency, …identity_gc_runs 身份垃圾回收结果、耗时、次数
双写 …doublewrite_* 4个 CRD 与 KVStore 之间的身份数比较
LB IPAM …lbipam_conflicting_pools, …services_matching, …services_unsatisfied 池冲突、匹配/不匹配的服务数
CES …number_of_ceps_per_ces 绑定到一个 CiliumEndpointSlice 的端点数
功能开启 …feature_* Gateway API、Ingress 控制器、L7 感知流量管理、LB IPAM、节点 IPAM 开启
其他 …unmanaged_pods, …errors_warnings_total, …k8s_client_*、工作队列、进程 Cilium 未管理的 Pod 数、错误数、API 调用、队列、资源

实验环境中 Gateway API 和 Ingress 控制器处于开启状态的事实与此功能开启指标相符。

4. Envoy 指标(450 个系列)

Cilium 的 Envoy 处理 Gateway API 和 L7 策略,并按原样提供标准的 Envoy 指标。系列数按前缀基准排列,其中 envoy_cluster_* 191, envoy_http_* 89, envoy_listener_* 78, envoy_server_* 28, envoy_cilium_* 约占 14。

分组 代表指标 含义
服务器 envoy_server_uptime, _live, _memory_allocated, _concurrency 运行时间、存活状态、内存、工作线程数
监听器 envoy_listener_downstream_cx_total, _active 每个监听器的连接数
HTTP envoy_http_downstream_rq_total, …rq_xx, …cx_active 每个连接管理器的请求数、响应码系列(1xx~5xx)、活动连接
上游 envoy_cluster_upstream_rq_total, …rq_pending_total, …cx_active 每个集群的请求、等待、活动连接
Cilium 专有 envoy_cilium_* 策略同步(NPDS)等 Cilium 扩展

单节点的 Envoy 服务器运行时间为 1,019,397 秒(约 11.8 天),内存分配约为 10MB。通过网关的请求在单个监听器中为 14,270 笔,按响应码系列分类为:2xx 12,916、3xx 1,217、4xx 51、5xx 4 笔。5xx 约占总数的 0.03%。不过,这只是该节点上一个 Envoy 实例处理的份额,未汇总其他节点的 Envoy。

5. 通过实测解读 Agent 状态(单节点,运行约 11.8 天)

观测 数值 解读
转发量 发送 2.31TB(7.07 亿数据包),接收 0.98TB(6.62 亿数据包) 除以运行时间,发送平均约 2.3MB/s
丢弃: Unsupported L3 protocol (接收) 1,081,453 绝大多数的丢弃
丢弃: Unsupported L2 protocol 接收 1,742,发送 16,658
丢弃: Service backend not found (接收) 159 发送到无后端服务的包
丢弃: Policy denied (接收) 1 策略拒绝仅有 1 笔
BPF 映射填充 ct_any4_global 3.7%, lb4_services_v2 0.92%, ct4_global 0.75%,其余低于 0.5% 余量非常充裕
端点 全部 ready
控制器 失败 0
不可达节点 0
连接跟踪清理 间隔 525 秒,TCP 存活条目 960,非 TCP 2,412
错误日志数 ERROR(未指定子系统)1 笔

6. Hubble 指标的基数问题

例如,在一个节点上,Hubble 只有 14 个指标系列,但时间序列却大约有 8 万个。罪魁祸首是三个系列。

系列 时间序列数
hubble_http_request_duration_seconds (包含直方图桶) 53,956
hubble_port_distribution_total 22,607
hubble_http_requests_total 4,001
其余 11 个系列 约 300

原因是设置的 labelsContext 。由于此设置指示 source_ip 和 destination_ip 用作标签,因此请求进入的 每个客户端 IP 都成为了一个独立的时间序列。在最大的系列中, source_ip 的不同值有数千个,且许多项的源命名空间和工作负载为空,这似乎是来自集群外部的请求,并且随着访客的增加,该值不断增加(未确认来源分类)。

这种配置有两个问题:

  1. Prometheus 的内存和存储成本增加。 仅在一个节点上就有 8 万个时间序列,随着接收外部请求的节点增加,成本也会增加。
  2. 访客的 IP 地址原封不动地保留在指标存储中。 从个人信息角度来看,这也是需要检查的部分。

改进方向似乎是从 labelsContext 中移除 source_ip 和 destination_ip ,只保留命名空间和工作负载。不过这只是一个提议,并未实际修改以确认时间序列是否减少(未测试)。

配置中虽然有 dns ,但输出中没有 hubble_dns_* 指标。 14 个系列分别是 HTTP、端口分布、流、丢弃、TCP 标志、ICMP、丢失事件、指标处理器、gRPC。虽然已知 DNS 指标需要单独的 DNS 可视性设置,但在本实验环境中并未确认,原因未知(未确认)。

7. 告警和仪表盘候选(未执行)

这是未执行的示例。指标名称与上述实际测量相匹配。

# 연결할 수 없는 노드, 실패한 컨트롤러
cilium_unreachable_nodes > 0
cilium_controllers_failing > 0

# BPF 맵이 가득 차기 전에
cilium_bpf_map_pressure > 0.9

# 정책 거절과 서비스 백엔드 없음: 노이즈인 L2/L3 프로토콜 사유는 제외한다
sum by (reason) (rate(cilium_drop_count_total{reason!~"Unsupported.*"}[5m])) > 0

# 준비되지 않은 엔드포인트
cilium_endpoint_state{endpoint_state!="ready"} > 0

# 쿠버네티스 API 오류
sum by (return_code) (rate(cilium_k8s_client_api_calls_total{return_code=~"5.."}[5m])) > 0

8. 面试可能问到的问题

控制器失败数、不可达节点数、端点状态、映射压力。

就会出现 DNS 指标”:在本实验环境中并未出现。

指标含义的补充说明所引用的 Cilium 文档此次未重新打开进行对照。

参考资料

基于 2026-10-05。Cilium 1.20.1,运行约 11.8 天(以代理启动时间为准)。

登录后即可点赞

评论

还没有评论。

登录后即可发表评论