TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

Cilium指標のすべてを解剖:エージェント、オペレーター、Envoy、Hubbleの4つの領域

状態:ドラフト(2026-10-05)、実測を反映。 指標のリストと値は、実験環境の1ノードにおけるエージェント、同一ノードのEnvoyとHubble、および1つのオペレーターから読み取り専用で取得したある時点のスナップショットです。指標の意味はHELP文字列とCiliumのドキュメントに基づいており、この記事の執筆時点でドキュメントを再度開いて突合はしていません(未確認)。PromQLの例は実行していません(未実行)。作成ルール:実測データが基本であり、測定できなかったものは「未実測」と表記します。

目次

1. 指標を出力する4つの場所

Cilium 1.20.1(kube-proxy-replacement=true、VXLANトンネル、Hubble有効)は、4つの場所で別々に指標を出力します。すべてクラスター内のヘッドレスサービスとして公開されています。

出力元 ポート サービス 指標系列 時系列数(1ノードまたは1ポッドあたり)
エージェント 9962 cilium-agent 169 1,667
オペレーター 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の1箇所から来ているという点がこの記事の重要な着眼点であるため、第6節で個別に扱います。

2. エージェント指標(cilium_* 約100系列)

エージェントは169の系列のうち 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 このエージェントが管理するエンドポイント数
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、egress、both、none、audit-*)
cilium_policy_change_total, …implementation_delay, …incremental_update_duration counter, histogram ポリシー変更回数、反映遅延
cilium_policy_selector_cache_*, …selector_match_count_max gauge, histogram セレクターキャッシュのサイズ、演算遅延、1つのセレクターが選択するアイデンティティ数
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 エージェント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 エージェントの設定と元設定の不一致数
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であれば有効であるという意味のゲージの集まりです。設定の監査に便利です。1ノードから読み取った有効状態は以下の通りです。

暗号化に関する指標はありません。 wireguard と encrypt が含まれる行が0でした。透過的暗号化(WireGuard)が無効になっている状態と一致しており、有効にした後に生成される指標は直接有効にして確認できていません(未実測、運用設定を変更しないため)。代わりにCilium公式指標ドキュメント(Feature Metricsの表)を読むと、透過的暗号化モードを通知するゲージ(transparent_encryption、ラベルは mode, node2node_enabled, strict_mode_enabled)があり、 mode の値に wireguard と ipsec が入り得ると記載されています。実際に露出される名前のプレフィックスは確認できなかったため、有効にした後は grep -i encryption で検索する必要があります。

2.7 プロセスとランタイム

cilium_process_*(CPU時間、オープンファイル、常駐メモリ、ネットワーク送受信バイトなど9系列)と go_*(メモリ統計22系列、GC、スケジューラー)があります。エージェントの常駐メモリは1ノードあたり約270MiB(283,545,600B)でした。

3. オペレーター指標(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 CiliumEndpointSlice1つにまとめられたエンドポイント数
機能有効化 …feature_* Gateway API、Ingressコントローラー、L7認識トラフィック管理、LB IPAM、ノードIPAMの有効化
その他 …unmanaged_pods, …errors_warnings_total, …k8s_client_*、ワークキュー、プロセス Ciliumが管理していないポッド数、エラー数、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拡張

1ノードのEnvoyは、サーバー稼働時間1,019,397秒(約11.8日)、メモリ割り当て約10MBでした。ゲートウェイを通過したリクエストは1つのリスナーあたり14,270件であり、レスポンスコード系列別では2xxが12,916件、3xxが1,217件、4xxが51件、5xxが4件でした。5xxが全体の約0.03%です。ただし、これはそのノードのEnvoy単体が処理した分であり、他のノードのEnvoyは合算していません。

5. 実測で読み解くエージェントの状態(1ノード、稼働約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、non-TCP 2,412
エラーログ数 ERROR(サブシステム未指定)1件

6. Hubble指標のカーディナリティの問題

例えば、1ノードにおいてHubbleは指標系列が14個のみであるにもかかわらず、時系列が約8万個ありました。主な原因は3つの系列です。

系列 時系列数
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 の異なる値が数千個あり、送信元名前空間やワークロードが空の項目が多く、クラスター外から入ってくるリクエストと見られ、この値は訪問者が増えるにつれて増え続けます(送信元の区別は確認していません)。

この構成には2つの問題があります。

  1. Prometheusのメモリとストレージのコストが増加します。 1台のノードだけでも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. 面接で想定される質問

9. よくある誤解

確認できなかったこと

参考資料

確認したバージョンと日付

2026-10-05時点。Cilium 1.20.1、稼働約11.8日(エージェント起動時刻基準)。

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます