状态:草稿(2026-10-05),已反映实测结果。 指标列表和数值是实验环境中单个节点上的 Agent、同节点的 Envoy 和 Hubble,以及一个 Operator 的只读单点快照。指标含义基于 HELP 文本和 Cilium 文档,在撰写本文时未重新打开文档进行核对(未确认)。未执行 PromQL 示例(未执行)。编写规则:以实测数据为基础,未测量的内容标记为「未实测」。
目录
- 1. 提供指标的四个地方
- 2. Agent 指标(cilium_* 约 100 个系列)
- 3. Operator 指标(96 个系列)
- 4. Envoy 指标(450 个系列)
- 5. 通过实测解读 Agent 状态(单节点,运行约 11.8 天)
- 6. Hubble 指标的基数问题
- 7. 告警与仪表盘候选(未执行)
- 8. 面试可能问到的问题
- 9. 常见误解
- 未能确认的内容
- 参考资料
- 确认的版本和日期
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 集合。对于配置审计非常方便。从单个节点读取的开启状态如下:
- 开启(1): 带宽管理器、Envoy 配置与 Envoy 代理、kube-proxy 替代、节点端口配置、主机防火墙、非默认拒绝策略。(身份分配、IPAM、数据路径模式等项目通过模式标签而非数值进行区分,因此在此处未作解读。)
- 关闭(0): BGP、出口网关(Egress Gateway)、L2 负载均衡器与 L2 Pod 宣告、SCTP、VTEP、本地重定向策略、双向认证、端点切片、端点路由。
- 累积数(counter): 显示自 Agent 启动以来按类型累积加载的策略值。
没有与加密相关的指标。 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 笔 |
Unsupported L3 protocol几乎占据了所有丢弃。 怀疑可能是非 IPv4 数据包(如 IPv6 等),但由于未打开数据包进行确认(未确认)。此原因并非策略拒绝,因此不应将其解读为入侵信号,在创建告警时单独过滤掉此原因似乎可以减少噪音。- BPF 映射填充率都很低。 这意味着即使服务数量增加,在一段时间内仍然非常充裕。
Service backend not found159 笔 是发往端点已消失的服务的包。这可能是滚动更新短暂间隙中产生的正常数值,但如果持续增加则需要进行检查。
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 的不同值有数千个,且许多项的源命名空间和工作负载为空,这似乎是来自集群外部的请求,并且随着访客的增加,该值不断增加(未确认来源分类)。
这种配置有两个问题:
- Prometheus 的内存和存储成本增加。 仅在一个节点上就有 8 万个时间序列,随着接收外部请求的节点增加,成本也会增加。
- 访客的 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. 面试可能问到的问题
- 当替代 kube-proxy 时,服务负载均衡状态是通过什么指标查看的?
cilium_bpf_map_pressure的lb4_*映射填充以及丢弃原因Service backend not found。 - 因策略被拦截的流量在哪里查看? 代理的
cilium_drop_count_total{reason="Policy denied"}和 Hubble 的hubble_drop_total。 - 如果开启 Hubble 指标后 Prometheus 变慢了怎么办?
labelsContext首先怀疑 - 。像 IP 这样拥有大量值的标签会导致时间序列激增。 如何一眼看出 Cilium 状态是否正常?
控制器失败数、不可达节点数、端点状态、映射压力。
- 9. 常见误解
- “有丢弃就是攻击”:本实验环境中的绝大多数丢弃不是策略拒绝,而是不支持的协议。
- “指标系列少,时间序列也少”:Hubble 在 14 个系列中产生了约 8 万个时间序列。标签值的种类决定了这一点。
dns“在 Hubble 中只写
就会出现 DNS 指标”:在本实验环境中并未出现。
- 未能确认的事项
- 随时间的变化。所有值都是某一时间点的快照,未计算速率(rate)或趋势。
Unsupported L3 protocol除测量节点外的其他节点代理、Envoy,以及如果存在其他运营商 Pod 的话它们的值。- 丢弃的实际协议。
source_ip移除 Hubble - 后时间序列会减少多少。
- 不输出 DNS 指标的原因。
指标含义的补充说明所引用的 Cilium 文档此次未重新打开进行对照。
- https://docs.cilium.io/en/stable/observability/metrics/
- https://docs.cilium.io/en/stable/observability/hubble/
参考资料
基于 2026-10-05。Cilium 1.20.1,运行约 11.8 天(以代理启动时间为准)。