모니터링 & 메트릭

모니터링 & 메트릭 (Monitoring & Metrics)

Cilium과 Hubble은 모두 Prometheus 메트릭을 제공하도록 구성할 수 있어요. Prometheus는 플러그형 메트릭 수집·저장 시스템이며 Grafana(메트릭 시각화 프론트엔드)의 데이터 소스 역할을 합니다. Cilium 메트릭과 Hubble 메트릭은 서로 독립적으로 활성화할 수 있습니다.

출처: Monitoring & Metrics

본문

Cilium과 Hubble 메트릭은 서로 독립적으로 활성화할 수 있어요.

Cilium 메트릭 (Cilium Metrics)

Cilium 메트릭은 Cilium 자체의 상태, 즉 cilium-agent, cilium-envoy, cilium-operator 프로세스에 대한 인사이트를 제공해요. Prometheus 메트릭을 활성화한 상태로 Cilium을 실행하려면 prometheus.enabled=true Helm 값을 설정해 배포하세요.

Cilium 메트릭은 cilium_ Prometheus 네임스페이스 아래로 내보내집니다. Envoy 메트릭은 envoy_ Prometheus 네임스페이스 아래로 내보내지며, 그중 Cilium이 정의한 메트릭은 envoy_cilium_ 네임스페이스 아래로 내보내져요. Kubernetes에서 실행·수집할 때는 파드 이름과 네임스페이스로 태깅됩니다.

설치 (Installation)

cilium-agent(Envoy 포함)의 메트릭은 Helm 값 prometheus.enabled=true로 활성화할 수 있어요. cilium-operator 메트릭은 기본적으로 활성화되어 있으며, 비활성화하려면 Helm 값 operator.prometheus.enabled=false로 설정하세요.

Helm Repository

helm install cilium cilium/cilium --version 1.20.2 \
   --namespace kube-system \
   --set prometheus.enabled=true \
   --set operator.prometheus.enabled=true

OCI Registry

helm install cilium oci://quay.io/cilium/charts/cilium 1.20.2 \
   --namespace kube-system \
   --set prometheus.enabled=true \
   --set operator.prometheus.enabled=true

Cilium 메트릭 스크레이핑

Prometheus 포트 구성

포트는 각각 prometheus.port, envoy.prometheus.port, operator.prometheus.port로 구성할 수 있어요.

메트릭이 활성화되고 ServiceMonitor가 비활성화된 경우(hubble.metrics.serviceMonitor.enabled: false), 모든 Cilium 컴포넌트는 다음과 같은 어노테이션을 갖게 됩니다. 이 어노테이션은 Prometheus에게 메트릭을 스크레이프할지 여부를 알리는 데 사용할 수 있어요.

ServiceMonitor가 활성화된 경우(hubble.metrics.serviceMonitor.enabled: true)에는 이 어노테이션이 생략되고, Prometheus는 ServiceMonitor 리소스를 통해 메트릭을 발견합니다.

prometheus.io/scrape: true
prometheus.io/port: 9962

Envoy 메트릭을 수집하기 위해 Cilium 차트는 prometheus.io/scrape:'true' 어노테이션이 설정된 cilium-agent라는 Kubernetes headless 서비스를 만듭니다:

prometheus.io/scrape: true
prometheus.io/port: 9964

각 컴포넌트는 Prometheus 스크레이프·포트 어노테이션을 하나만 가질 수 있기 때문에, 다른 Cilium 컴포넌트 외에 이 추가 headless 서비스가 필요해요.

scrape_configs 섹션에 다음 옵션을 설정하면 Prometheus가 Cilium과 Envoy 메트릭을 자동으로 수집합니다:

scrape_configs:
- job_name: 'kubernetes-pods'
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
    - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
      action: keep
      regex: true
    - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
      action: replace
      regex: ([^:]+)(?::\d+)?;(\d+)
      replacement: ${1}:${2}
      target_label: __address__

Prometheus Operator ServiceMonitor

prometheus.serviceMonitor.enabled=true, envoy.prometheus.serviceMonitor.enabled=true, 또는 operator.prometheus.serviceMonitor.enabled=true를 각각 설정하면 Prometheus Operator ServiceMonitor를 자동으로 생성할 수 있어요.

Hubble 메트릭 (Hubble Metrics)

Cilium 메트릭이 Cilium 자체의 상태를 모니터링하게 하는 반면, Hubble 메트릭은 Cilium이 관리하는 Kubernetes 파드의 연결성과 보안과 관련된 네트워크 동작을 모니터링하게 해줘요.

일부 메트릭은 추가 옵션으로 구성할 수도 있어요. 사용 가능한 전체 메트릭과 옵션 목록은 Hubble 내보내기 메트릭 섹션을 참고하세요.

정적 또는 동적 exporter

Hubble 메트릭은 정적(static) 또는 동적(dynamic) exporter로 구성할 수 있어요.

동적 메트릭 exporter를 사용하면 에이전트 재시작 없이 정의된 메트릭을 필요에 따라 변경할 수 있습니다.

정적 메트릭 exporter로 설치

정적 exporter가 활성화된 Hubble 메트릭으로 Cilium을 배포하려면 hubble.enabled=true로 Hubble을 활성화하고 hubble.metrics.enabled를 통해 활성화할 Hubble 메트릭 집합을 제공해야 해요.

Helm Repository

helm install cilium cilium/cilium --version 1.20.2 \
   --namespace kube-system \
   --set prometheus.enabled=true \
   --set operator.prometheus.enabled=true \
   --set hubble.enabled=true \
   --set hubble.metrics.enableOpenMetrics=true \
   --set hubble.metrics.enabled="{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}"

OCI Registry

helm install cilium oci://quay.io/cilium/charts/cilium 1.20.2 \
   --namespace kube-system \
   --set prometheus.enabled=true \
   --set operator.prometheus.enabled=true \
   --set hubble.enabled=true \
   --set hubble.metrics.enableOpenMetrics=true \
   --set hubble.metrics.enabled="{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}"

동적 메트릭 exporter로 설치

동적 Hubble 메트릭이 활성화된 Cilium을 배포하려면 hubble.enabled=true와 hubble.metrics.dynamic.enabled=true로 Hubble을 활성화해야 해요.

이 예제에서는 exporter를 활성화하기 전에 메트릭 집합이 담긴 ConfigMap을 적용하지만, 원하는 메트릭 집합(과 ConfigMap)은 설치 중에 만들 수도 있어요.

Helm Reference 문서를 참고하세요 (hubble.metrics.dynamic.* 키).

apiVersion: v1
kind: ConfigMap
metadata:
  name: cilium-dynamic-metrics-config
  namespace: kube-system
data:
  dynamic-metrics.yaml: |
    metrics:
      - name: dns
      - contextOptions:
        - name: sourceContext
          values:
          - workload-name
          - reserved-identity
        - name: destinationContext
          values:
          - workload-name
          - reserved-identity
        name: flow
      - name: drop
      - name: tcp
      - contextOptions:
        - name: sourceContext
          values:
          - workload-name
          - reserved-identity
        name: icmp
      - contextOptions:
        - name: exemplars
          values:
          - true
        - name: labelsContext
          values:
          - source_ip
          - source_namespace
          - source_workload
          - destination_ip
          - destination_namespace
          - destination_workload
          - traffic_direction
        - name: sourceContext
          values:
          - workload-name
          - reserved-identity
        - name: destinationContext
          values:
          - workload-name
          - reserved-identity
        name: httpV2
      - contextOptions:
        - name: sourceContext
          values:
          - app
          - workload-name
          - pod
          - reserved-identity
        - name: destinationContext
          values:
          - app
          - workload-name
          - pod
          - dns
          - reserved-identity
        - name: labelsContext
          values:
          - source_namespace
          - destination_namespace
        excludeFilters:
        - destination_pod:
          - default/
        name: policy

ConfigMap을 배포하세요:

kubectl apply -f dynamic-metrics.yaml

Helm Repository

helm install cilium cilium/cilium --version 1.20.2 \
   --namespace kube-system \
   --set prometheus.enabled=true \
   --set operator.prometheus.enabled=true \
   --set hubble.enabled=true \
   --set hubble.metrics.enableOpenMetrics=true \
   --set hubble.metrics.enabled=[] \
   --set hubble.metrics.dynamic.enabled=true \
   --set hubble.metrics.dynamic.config.configMapName=cilium-dynamic-metrics-config \
   --set hubble.metrics.dynamic.config.createConfigMap=false

OCI Registry

helm install cilium oci://quay.io/cilium/charts/cilium 1.20.2 \
   --namespace kube-system \
   --set prometheus.enabled=true \
   --set operator.prometheus.enabled=true \
   --set hubble.enabled=true \
   --set hubble.metrics.enableOpenMetrics=true \
   --set hubble.metrics.enabled=[] \
   --set hubble.metrics.dynamic.enabled=true \
   --set hubble.metrics.dynamic.config.configMapName=cilium-dynamic-metrics-config \
   --set hubble.metrics.dynamic.config.createConfigMap=false

Hubble 메트릭 스크레이핑

Prometheus 포트 구성

Hubble 메트릭의 포트는 hubble.metrics.port Helm 값으로 구성할 수 있어요.

Hubble 메트릭을 TLS로 활성화하는 방법은 문서의 Hubble Metrics TLS 및 인증 섹션을 참고하세요.

Note

HTTP 같은 L7 메트릭은 레이어 7 프로토콜 가시성을 활성화한 파드에 대해서만 내보내져요.

비어 있지 않은 hubble.metrics.enabled Helm 값으로 배포하면, Cilium 차트는 prometheus.io/scrape:'true' 어노테이션이 설정된 hubble-metrics라는 Kubernetes headless 서비스를 만듭니다:

prometheus.io/scrape: true
prometheus.io/port: 9965

Prometheus의 scrape_configs 섹션에 다음 옵션을 설정하면 엔드포인트의 모든 Hubble 메트릭을 자동으로 스크레이프합니다:

scrape_configs:
  - job_name: 'kubernetes-endpoints'
    scrape_interval: 30s
    kubernetes_sd_configs:
      - role: endpoints
    relabel_configs:
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
        action: replace
        target_label: __address__
        regex: (.+)(?::\d+);(\d+)
        replacement: $1:$2

Prometheus Operator ServiceMonitor

hubble.metrics.serviceMonitor.enabled=true를 설정하면 Prometheus Operator ServiceMonitor를 자동으로 생성할 수 있어요.

OpenMetrics

추가로 hubble.metrics.enableOpenMetrics=true를 설정해 OpenMetrics를 선택할 수 있어요. OpenMetrics를 활성화하면 Hubble 메트릭 엔드포인트가 클라이언트가 명시적으로 요청할 때 OpenMetrics 형식으로 메트릭을 내보내는 것을 지원합니다.

OpenMetrics를 사용하면 Exemplars 같은 추가 기능을 지원해서, 내보낸 메트릭에 trace ID를 임베드해 메트릭을 트레이스와 연결할 수 있어요.

Prometheus는 OpenMetrics를 활용하도록 구성되어야 하며, exemplars 저장 기능이 활성화된 경우에만 exemplar를 스크레이프합니다.

OpenMetrics는 메트릭 이름과 라벨에 몇 가지 추가 요구사항을 부과하므로 이 기능은 현재 선택적(opt-in)입니다. 다만 모든 Hubble 메트릭이 OpenMetrics 요구사항을 충족한다고 생각합니다.

Cluster Mesh API Server 메트릭

Cluster Mesh API Server 메트릭은 clustermesh-apiserver 프로세스, kvstoremesh 프로세스(활성화된 경우), 사이드카 etcd 인스턴스의 상태에 대한 인사이트를 제공해요. Cluster Mesh API Server 메트릭은 cilium_clustermesh_apiserver_ Prometheus 네임스페이스 아래로 내보내집니다. KVStoreMesh 메트릭은 cilium_kvstoremesh_ 네임스페이스로, etcd 메트릭은 etcd_ 네임스페이스로 내보내져요.

설치 (Installation)

다음 값을 설정해서 다양한 Cluster Mesh API Server 컴포넌트의 메트릭을 활성화할 수 있어요:

  • clustermesh-apiserver: clustermesh.apiserver.metrics.enabled=true
  • kvstoremesh: clustermesh.apiserver.metrics.kvstoremesh.enabled=true
  • sidecar etcd 인스턴스: clustermesh.apiserver.metrics.etcd.enabled=true

Helm Repository

helm install cilium cilium/cilium --version 1.20.2 \
   --namespace kube-system \
   --set clustermesh.useAPIServer=true \
   --set clustermesh.apiserver.metrics.enabled=true \
   --set clustermesh.apiserver.metrics.kvstoremesh.enabled=true \
   --set clustermesh.apiserver.metrics.etcd.enabled=true

OCI Registry

helm install cilium oci://quay.io/cilium/charts/cilium 1.20.2 \
   --namespace kube-system \
   --set clustermesh.useAPIServer=true \
   --set clustermesh.apiserver.metrics.enabled=true \
   --set clustermesh.apiserver.metrics.kvstoremesh.enabled=true \
   --set clustermesh.apiserver.metrics.etcd.enabled=true

포트는 각각 clustermesh.apiserver.metrics.port, clustermesh.apiserver.metrics.kvstoremesh.port, clustermesh.apiserver.metrics.etcd.port로 구성할 수 있어요.

clustermesh.apiserver.metrics.serviceMonitor.enabled=true를 설정하면 Prometheus Operator ServiceMonitor를 자동으로 생성할 수 있어요.

예제 Prometheus & Grafana 배포

실행 중인 Prometheus와 Grafana 스택이 없다면 다음으로 스택을 배포할 수 있어요:

kubectl apply -f https://raw.githubusercontent.com/cilium/cilium/1.20.2/examples/kubernetes/addons/prometheus/monitoring-example.yaml

이것은 cilium-monitoring 네임스페이스에서 Prometheus와 Grafana를 실행해요. Cilium 또는 Hubble 메트릭을 활성화했다면 Prometheus가 자동으로 스크레이프합니다. 그런 다음 Grafana를 노출해 브라우저로 접근할 수 있어요.

kubectl -n cilium-monitoring port-forward service/grafana --address 0.0.0.0 --address :: 3000:3000

브라우저를 열고 http://localhost:3000/에 접근하세요.

메트릭 레퍼런스 (Metrics Reference)

cilium-agent

구성 (Configuration)

메트릭을 노출하려면 cilium-agent를 --prometheus-serve-addr 옵션으로 실행하세요. 이 옵션은 IP:Port 쌍을 받지만 빈 IP(예: :9962)를 전달하면 서버가 모든 사용 가능한 인터페이스에 바인딩됩니다(컨테이너에는 보통 하나만 있어요).

메트릭을 커스터마이즈하려면 +/- 접두사를 사용해 특정 메트릭을 활성화/비활성화하세요. 대규모 클러스터에서는 cilium_node_health_connectivity_status와 cilium_node_health_connectivity_latency_seconds 같은 고카디널리티(high-cardinality) 메트릭을 비활성화하는 것을 고려하세요.

Helm

prometheus.metrics 값을 사용하세요:

helm install cilium cilium/cilium 1.20.2 \
    --namespace kube-system \
    --set prometheus.enabled=true \
    --set prometheus.metrics="{-cilium_node_health_connectivity_status,-cilium_node_health_connectivity_latency_seconds}"

CLI

--metrics 플래그를 사용하세요:

cilium-agent --prometheus-serve-addr=:9962 \
    --metrics="-cilium_node_health_connectivity_status -cilium_node_health_connectivity_latency_seconds"
기능 메트릭 (Feature Metrics)

Cilium Feature Metrics는 cilium_feature Prometheus 네임스페이스 아래로 내보내집니다.

다음 테이블은 기능 메트릭을 네 개 그룹으로 분류해요:

  • 고급 연결 및 로드 밸런싱 (adv_connect_and_lb) 이 범주에는 Bandwidth Manager, BGP, Envoy Proxy, Cluster Mesh 같은 고급 네트워킹 및 로드 밸런싱 기능이 포함됩니다.
  • 컨트롤 플레인 (controlplane) 이 메트릭들은 identity 할당 모드와 IP 주소 관리(IPAM)를 포함한 컨트롤 플레인 구성을 추적해요.
  • 데이터패스 (datapath) 이 그룹의 메트릭은 인터넷 프로토콜 모드, 체이닝 모드, 네트워크 모드 같은 데이터패스 구성을 모니터링해요.
  • 네트워크 정책 (network_policies) 이 그룹은 Cilium Network Policies, Host Firewall, DNS 정책, Mutual Auth를 포함한 정책 적용 관련 메트릭을 다룹니다.

예를 들어 Cilium 에이전트에서 Bandwidth Manager가 활성화되었는지 확인하려면 cilium_feature_adv_connect_and_lb_bandwidth_manager_enabled 메트릭을 관찰하세요. 모든 메트릭은 cilium_feature + 그룹 이름 + 메트릭 이름 형식을 따릅니다. 값 0은 기능이 비활성화됨을, 1은 활성화됨을 나타냅니다.

Note

"counter" 유형의 메트릭은 에이전트가 해당 오브젝트(예: 네트워크 정책)를 처리했지만 적극적으로 적용 중이 아닐 수 있어요. 이 메트릭들은 오브젝트가 수신·처리되었는지 관찰하는 용도이며, 반드시 적용되었다는 뜻은 아닙니다.

adv_connect_and_lb

| 이름 | 라벨 | 가능한 라벨 값 | 설명 | 유형 | | bandwidth_manager_enabled | 없음 | 없음 | 에이전트에서 Bandwidth Manager 활성화됨 | gauge | | bgp_enabled | 없음 | 없음 | 에이전트에서 BGP 활성화됨 | gauge | | big_tcp_enabled | address_family | "ipv4-ipv6-dual-stack" | 에이전트에서 Big TCP 활성화됨 | gauge | | | | "ipv4-only" | | | | | | "ipv6-only" | | | | cilium_envoy_config_enabled | 없음 | 없음 | 에이전트에서 Cilium Envoy Config 활성화됨 | gauge | | cilium_node_config_enabled | 없음 | 없음 | 에이전트에서 Cilium Node Config 활성화됨 | gauge | | clustermesh_enabled | max_connected_clusters | "255" | 활성 Cluster Mesh 연결/피어의 모드 | gauge | | | | "511" | | | | clustermesh_enabled | mode | "clustermesh-apiserver" | | | | | | "clustermesh-apiserver_or_etcd" | | | | | | "etcd" | | | | | | "kvstoremesh" | | | | egress_gateway_enabled | 없음 | 없음 | 에이전트에서 Egress Gateway 활성화됨 | gauge | | envoy_proxy_enabled | mode | "embedded" | 에이전트에서 Envoy Proxy 모드 활성화됨 | gauge | | | | "standalone" | | | | kube_proxy_replacement_enabled | 없음 | 없음 | 에이전트에서 KubeProxyReplacement 활성화됨 | gauge | | l2_lb_enabled | 없음 | 없음 | 에이전트에서 L2 LB announcement 활성화됨 | gauge | | l2_pod_announcement_enabled | 없음 | 없음 | 에이전트에서 L2 pod announcement 활성화됨 | gauge | | node_port_configuration | acceleration | "best-effort" | 에이전트에서 Node Port 구성 활성화됨 | gauge | | | | "disabled" | | | | | | "native" | | | | | | "testing-only" | | | | node_port_configuration | algorithm | "maglev" | | | | | | "random" | | | | node_port_configuration | mode | "dsr" | | | | | | "hybrid" | | | | | | "snat" | | | | sctp_enabled | 없음 | 없음 | 에이전트에서 SCTP 활성화됨 | gauge | | transparent_encryption | mode | "ipsec" | 에이전트에서 암호화 모드 활성화됨 | gauge | | | | "wireguard" | | | | transparent_encryption | node2node_enabled | "false" | | | | | | "true" | | | | transparent_encryption | strict_mode_enabled | "false" | | | | | | "true" | | | | vtep_enabled | 없음 | 없음 | 에이전트에서 VTEP 활성화됨 | gauge |

controlplane

| 이름 | 라벨 | 가능한 라벨 값 | 설명 | 유형 | | cilium_endpoint_slices_enabled | 없음 | 없음 | 에이전트에서 Cilium Endpoint Slices 활성화됨 | gauge | | identity_allocation | mode | "crd" | 에이전트에서 Identity Allocation 모드 활성화됨 | gauge | | | | "doublewrite-readcrd" | | | | | | "doublewrite-readkvstore" | | | | | | "kvstore" | | | | ipam | mode | "alibabacloud" | 에이전트에서 IPAM 모드 활성화됨 | gauge | | | | "azure" | | | | | | "cluster-pool" | | | | | | "crd" | | | | | | "delegated-plugin" | | | | | | "eni" | | | | | | "kubernetes" | | | | | | "multi-pool" | | |

datapath

| 이름 | 라벨 | 가능한 라벨 값 | 설명 | 유형 | | chaining_enabled | mode | "aws-cni" | 에이전트에서 체이닝 모드 활성화됨 | gauge | | | | "calico" | | | | | | "flannel" | | | | | | "generic-veth" | | | | | | "none" | | | | | | "portmap" | | | | config | configured_mode | "auto" | 에이전트에서 데이터패스 config 모드 활성화됨 | gauge | | | | "netkit" | | | | | | "netkit-l2" | | | | | | "veth" | | | | config | operational_mode | "netkit" | | | | | | "netkit-l2" | | | | | | "veth" | | | | endpoint_routes_enabled | 없음 | 없음 | 데이터패스에서 Endpoint Routes 활성화됨 | gauge | | internet_protocol | address_family | "ipv4-ipv6-dual-stack" | 에이전트에서 IP 모드 활성화됨 | gauge | | | | "ipv4-only" | | | | | | "ipv6-only" | | | | network | mode | "direct-routing" | 에이전트에서 네트워크 모드 활성화됨 | gauge | | | | "overlay-geneve" | | | | | | "overlay-vxlan" | | |

network_policies

| 이름 | 라벨 | 가능한 라벨 값 | 설명 | 유형 | | cidr_policies | mode | "nodes" | Nodes에 CIDR 정책을 적용하는 모드 | gauge | | cilium_clusterwide_envoy_config_total | action | "add" | 에이전트 시작 이후 수집된 Cilium Clusterwide Envoy Config 수 | counter | | | | "delete" | | | | cilium_clusterwide_network_policies_total | action | "add" | 에이전트 시작 이후 수집된 Cilium Clusterwide Network Policies 수 | counter | | | | "delete" | | | | cilium_envoy_config_total | action | "add" | 에이전트 시작 이후 수집된 Cilium Envoy Config 수 | counter | | | | "delete" | | | | cilium_network_policies_total | action | "add" | 에이전트 시작 이후 수집된 Cilium Network Policies 수 | counter | | | | "delete" | | | | deny_policies_total | action | "add" | 에이전트 시작 이후 수집된 Deny Policies 수 | counter | | | | "delete" | | | | dns_policies_total | action | "add" | 에이전트 시작 이후 수집된 DNS Policies 수 | counter | | | | "delete" | | | | fqdn_policies_total | action | "add" | 에이전트 시작 이후 수집된 ToFQDNs Policies 수 | counter | | | | "delete" | | | | host_firewall_enabled | 없음 | 없음 | 에이전트에서 Host firewall 활성화됨 | gauge | | host_network_policies_total | action | "add" | 에이전트 시작 이후 수집된 Host Network Policies 수 | counter | | | | "delete" | | | | http_header_matches_policies_total | action | "add" | 에이전트 시작 이후 수집된 HTTP HeaderMatches Policies 수 | counter | | | | "delete" | | | | http_policies_total | action | "add" | 에이전트 시작 이후 수집된 HTTP/GRPC Policies 수 | counter | | | | "delete" | | | | ingress_cidr_group_policies_total | action | "add" | 에이전트 시작 이후 수집된 Ingress CIDR Group Policies 수 | counter | | | | "delete" | | | | internal_traffic_policy_services_total | action | "add" | 에이전트 시작 이후 수집된 Internal Traffic Policy를 가진 K8s Services 수 | counter | | | | "delete" | | | | l3_policies_total | action | "add" | 에이전트 시작 이후 수집된 Layer 3 및 Layer 4 정책 수 | counter | | | | "delete" | | | | local_redirect_policies_total | action | "add" | 에이전트 시작 이후 수집된 Local Redirect Policies 수 | counter | | | | "delete" | | | | local_redirect_policy_enabled | 없음 | 없음 | 에이전트에서 Local Redirect Policy 활성화됨 | gauge | | mutual_auth_enabled | 없음 | 없음 | 에이전트에서 Mutual Auth 활성화됨 | gauge | | mutual_auth_policies_total | action | "add" | 에이전트 시작 이후 수집된 Mutual Auth Policies 수 | counter | | | | "delete" | | | | non_defaultdeny_policies_enabled | 없음 | 없음 | 에이전트에서 Non DefaultDeny Policies 활성화됨 | gauge | | non_defaultdeny_policies_total | action | "add" | 에이전트 시작 이후 수집된 Non DefaultDeny Policies 수 | counter | | | | "delete" | | | | sni_allow_list_policies_total | action | "add" | 에이전트 시작 이후 수집된 SNI Allow List Policies 수 | counter | | | | "delete" | | | | tls_inspection_policies_total | action | "add" | 에이전트 시작 이후 수집된 TLS Inspection Policies 수 | counter | | | | "delete" | | |

내보내기 메트릭 (Exported Metrics)

Endpoint

| 이름 | 라벨 | 기본값 | 설명 | | endpoint | | Enabled | 이 에이전트가 관리하는 엔드포인트 수 | | endpoint_component_status | type, status | Enabled | 서로 다른 엔드포인트 컴포넌트 유형과 상태로 태깅된 엔드포인트 수 | | endpoint_restoration_endpoints | phase, outcome | Enabled | phase와 outcome으로 구분되는 복원된 엔드포인트 수 | | endpoint_restoration_duration_seconds | phase | Enabled | 복원 phase의 시간(초) | | endpoint_regenerations_total | reason, outcome, error | Enabled | reason, outcome, error로 태깅된 완료된 엔드포인트 재생성 횟수 | | endpoint_regeneration_time_stats_seconds | scope, status | Enabled | 엔드포인트 재생성 시간 통계 | | endpoint_state | endpoint_state | Enabled | 전체 엔드포인트 수 |

Services

| 이름 | 라벨 | 기본값 | 설명 | | services_events_total | action | Enabled | action 유형으로 구분되는 서비스 이벤트 수 | | service_implementation_delay | action | Enabled | 서비스나 서비스 파드가 변경된 시점부터 이벤트 큐 지연을 제외하고 서비스·네트워크·엔드포인트의 데이터플레인 프로그래밍이 전파되는 데 걸리는 시간(초) |

Cluster health

| 이름 | 라벨 | 기본값 | 설명 | | unreachable_nodes | | Enabled | 도달할 수 없는 노드 수 | | unreachable_health_endpoints | | Enabled | 도달할 수 없는 health 엔드포인트 수 |

Node Connectivity

| 이름 | 라벨 | 기본값 | 설명 | | node_health_connectivity_status | type, status | Enabled | 현재 Cilium 에이전트와 다른 Cilium 노드 사이의 ICMP·HTTP 연결성의 마지막 관찰 상태를 가진 엔드포인트 수 | | node_health_connectivity_latency_seconds | type, address_type, protocol | Enabled | 현재 Cilium 에이전트와 다른 Cilium 노드 사이의 마지막 관찰 지연(초) 히스토그램 |

Clustermesh

| 이름 | 라벨 | 기본값 | 설명 | | clustermesh_remote_cluster_services | target_cluster | Enabled | 원격 클러스터별 서비스 총수 | | clustermesh_remote_cluster_endpoint_slices | target_cluster | Enabled | 원격 클러스터별 엔드포인트 슬라이스 총수 | | clustermesh_remote_cluster_endpoints | target_cluster | Enabled | 원격 클러스터별 엔드포인트 총수 | | clustermesh_remote_cluster_nodes | target_cluster | Enabled | 원격 클러스터별 노드 총수 | | clustermesh_remote_clusters | | Enabled | 로컬 클러스터와 mesh를 이룬 원격 클러스터 총수 | | clustermesh_remote_cluster_failures | target_cluster | Enabled | 원격 클러스터 관련 실패 총수 | | clustermesh_remote_cluster_last_failure_ts | target_cluster | Enabled | 원격 클러스터의 마지막 실패 타임스탬프 | | clustermesh_remote_cluster_readiness_status | target_cluster | Enabled | 원격 클러스터의 준비(readiness) 상태 | | clustermesh_remote_cluster_cache_revocations | target_cluster | Enabled | 원격 클러스터 관련 캐시 철회(revocation) 총수 |

Datapath

| 이름 | 라벨 | 기본값 | 설명 | | datapath_conntrack_dump_resets_total | area, name, family | Enabled | conntrack 덤프 리셋 횟수. 맵을 덤프하는 동안 BPF 항목이 제거될 때 발생해요. | | datapath_conntrack_gc_runs_total | family, protocol, status | Enabled | conntrack 가비지 컬렉터 프로세스가 실행된 횟수 | | datapath_conntrack_gc_key_fallbacks_total | family, protocol | Enabled | BPF 맵을 반복할 때 키 폴백이 필요했던 횟수 | | datapath_conntrack_gc_entries | family, protocol, status | Enabled | 가비지 컬렉터 실행이 끝날 때 살아 있거나 삭제된 conntrack 항목 수 | | datapath_conntrack_gc_duration_seconds | family, protocol, status | Enabled | 가비지 컬렉터 프로세스의 시간(초) |

IPsec

| 이름 | 라벨 | 기본값 | 설명 | | ipsec_xfrm_error | error, type | Enabled | xfrm 오류 총수 | | ipsec_keys | | Enabled | 사용 중인 키 수 | | ipsec_xfrm_states | direction | Enabled | XFRM 상태 수 | | ipsec_xfrm_policies | direction | Enabled | XFRM 정책 수 |

eBPF

| 이름 | 라벨 | 기본값 | 설명 | | bpf_syscall_duration_seconds | operation, outcome | Disabled | 수행된 eBPF 시스템 콜 시간 | | bpf_map_ops_total | map_name, operation, outcome | Enabled | 수행된 eBPF 맵 연산 수 | | bpf_map_pressure | map_name | Enabled | 맵 압력은 필수 맵 크기와 구성된 크기의 비율로 정의돼요. 값 < 1.0은 맵 사용률을, 값 >= 1.0은 맵이 가득 찼음을 나타냅니다. Policy 맵 압력 메트릭은 맵 사용률이 기본값 0.1(10% 사용)인 policyMapPressureMetricsThreshold helm 값이 정한 임계값을 초과할 때만 내보내져요. | | bpf_map_capacity | map_group | Enabled | 맵 그룹(최대 용량 크기가 같은 맵 유형)별 eBPF 맵 최대 크기. 크기가 65536인 맵 유형은 내보내지 않으며, 누락된 맵 유형은 65536으로 가정할 수 있어요. | | bpf_maps_virtual_memory_max_bytes | | Enabled | 시스템에 설치된 eBPF 맵이 사용하는 최대 메모리 | | bpf_progs_virtual_memory_max_bytes | | Enabled | 시스템에 설치된 eBPF 프로그램이 사용하는 최대 메모리 | | bpf_ratelimit_dropped_total | usage | Enabled | BPF rate limiter로 인한 드랍 총수, 드랍 소스로 태깅됨 |

bpf_maps_virtual_memory_max_bytes와 bpf_progs_virtual_memory_max_bytes는 둘 다 현재 Cilium이 직접 관리하거나 관리하지 않는 eBPF의 시스템 전체 메모리 사용량을 보고해요. 이는 향후 변경되어 Cilium이 직접 관리하는 eBPF 메모리 사용량만 보고할 수 있습니다.

Drops/Forwards (L3/L4)

| 이름 | 라벨 | 기본값 | 설명 | | drop_count_total | reason, direction | Enabled | 드랍된 총 패킷 수 | | drop_bytes_total | reason, direction | Enabled | 드랍된 총 바이트 수 | | forward_count_total | direction | Enabled | 포워딩된 총 패킷 수 | | forward_bytes_total | direction | Enabled | 포워딩된 총 바이트 수 | | mtu_error_message_total | direction | Enabled | 처리된 icmp fragmentation-needed 또는 ICMPv6 packet-too-big 메시지 총수 | | fragmented_count_total | direction | Enabled | 처리된 단편화된(fragmented) 패킷 총수 |

Policy

| 이름 | 라벨 | 기본값 | 설명 | | policy | | Enabled | 현재 로드된 정책 수 | | policy_max_revision | | Enabled | 에이전트의 최고 정책 리비전 번호 | | policy_change_total | source, operation, outcome | Enabled | source, operation, outcome별 정책 변경 수 | | policy_endpoint_enforcement_status | enforcement | Enabled | 정책 적용 상태로 구분되는 엔드포인트 수 | | policy_implementation_delay | source | Enabled | 정책 변경과 데이터플레인에 완전히 배포되는 사이의 시간(초), 정책 소스로 구분됨 | | policy_selector_match_count_max | class | Enabled | 네트워크 정책 셀렉터가 선택한 최대 identity 수 | | policy_incremental_update_duration | scope | Enabled | 새로 학습된 identity가 BPF 정책 맵과 L7 프록시를 포함한 정책 시스템에 추가되는 데 걸린 시간 | | policy_missing_proxy_redirects | | Enabled | 엔드포인트 정책에서 누락된 프록시 리다이렉트 총수 |

Policy L7 (HTTP/FQDN)

| 이름 | 라벨 | 기본값 | 설명 | | proxy_redirects | protocol_l7 | Enabled | 엔드포인트에 설치된 리다이렉트 수 | | proxy_upstream_reply_seconds | error, protocol_l7, scope | Enabled | 업스트림 서버가 요청에 응답할 때까지 기다린 시간(초) | | proxy_datapath_update_timeout_total | | Disabled | FQDN IP 업데이트로 인한 데이터패스 업데이트 타임아웃 총수 | | policy_l7_total | rule, proxy_type | Enabled | L7 요청/응답 총수 |

Identity

| 이름 | 라벨 | 기본값 | 설명 | | identity | type | Enabled | 현재 할당된 identity 수 | | identity_label_sources | source | Enabled | 주어진 라벨 소스에서 하나 이상의 라벨을 포함하는 identity 수 | | ipcache_errors_total | type, error | Enabled | ipcache와 상호작용 중 오류 수 | | ipcache_events_total | type | Disabled | ipcache와 상호작용 중 이벤트 수 | | identity_updater_timer_duration | name | Enabled | 주기적 정책 프로세스를 실행하는 데 필요한 시간(초). name="id-alloc-update-policy-maps"는 BPF 정책 맵에 증분 업데이트를 적용하는 데 걸린 시간입니다. | | identity_updater_timer_trigger_latency | name | Enabled | 다음 라운드를 시작하기 전 이전 프로세스가 끝나기를 기다린 시간(초). name="id-alloc-update-policy-maps"는 BPF 정책 맵에 증분 업데이트를 적용하기 전 대기 시간입니다. | | identity_updater_timer_trigger_folds | name | Enabled | 한 번의 실행으로 합쳐진 타이머 트리거 횟수. name="id-alloc-update-policy-maps"는 BPF 정책 맵에 증분 업데이트를 적용합니다. |

Events external to Cilium

| 이름 | 라벨 | 기본값 | 설명 | | event_ts | source, scope, action | Enabled | Cilium이 컨트롤 플레인 소스로부터 이벤트를 받은 마지막 타임스탬프, 리소스별·action별 | | k8s_event_lag_seconds | source | Disabled | Kubernetes 이벤트 지연 - kubelet에서 CNI ADD 이벤트를 받은 시점과 kube-api-server에서 Pod 이벤트를 받은 시점 사이의 계산값 |

Controllers

| 이름 | 라벨 | 기본값 | 설명 | | controllers_runs_total | status | Enabled | 컨트롤러 프로세스가 실행된 횟수 | | controllers_runs_duration_seconds | status | Enabled | 컨트롤러 프로세스의 시간(초) | | controllers_group_runs_total | status, group_name | Enabled | 컨트롤러 그룹 이름으로 구분된 컨트롤러 프로세스 실행 횟수 | | controllers_failing | | Enabled | 실패 중인 컨트롤러 수 |

controllers_group_runs_total 메트릭은 시스템 내 각 컨트롤러의 성공·실패 횟수를 컨트롤러 그룹 이름과 완료 상태로 구분해 보고해요. 컨트롤러가 많기 때문에 이 메트릭은 컨트롤러별로 활성화됩니다. 이는 controller-group-metrics 구성 플래그나 prometheus.controllerGroupMetrics helm 값으로 전달되는 allow-list로 구성돼요. 현재 권장되는 기본 그룹 이름 집합은 Cilium Helm 차트의 values 파일에서 찾을 수 있어요. 특별한 이름 "all"과 "none"이 지원됩니다.

SubProcess

| 이름 | 라벨 | 기본값 | 설명 | | subprocess_start_total | subsystem | Enabled | Cilium이 하위 프로세스를 시작한 횟수 |

Kubernetes

| 이름 | 라벨 | 기본값 | 설명 | | kubernetes_resource_sync_duration | scope | Enabled | 특정 Kubernetes 리소스 동기화 시간(초) | | kubernetes_events_received_total | scope, action, valid, equal | Enabled | 수신된 Kubernetes 이벤트 수 | | kubernetes_events_total | scope, action, status | Enabled | 처리된 Kubernetes 이벤트 수 | | k8s_terminating_endpoints_events_total | | Enabled | Kubernetes에서 받은 종료 중(terminating) 엔드포인트 이벤트 수 |

Kubernetes Rest Client

| 이름 | 라벨 | 기본값 | 설명 | | k8s_client_api_latency_time_seconds | path, method | Enabled | path와 method로 구분되는 처리된 API 호출 시간 | | k8s_client_rate_limiter_duration_seconds | | Enabled | Kubernetes 클라이언트 rate limiter 지연(초) | | k8s_client_api_calls_total | host, method, return_code | Enabled | host, method, return code로 구분되는 kube-apiserver로의 API 호출 수 |

Kubernetes workqueue

| 이름 | 라벨 | 기본값 | 설명 | | k8s_workqueue_depth | name | Enabled | workqueue의 현재 깊이 | | k8s_workqueue_adds_total | name | Enabled | workqueue가 처리한 총 추가(add) 수 | | k8s_workqueue_queue_duration_seconds | name | Enabled | 요청 전 항목이 workqueue에 머무는 시간(초) | | k8s_workqueue_work_duration_seconds | name | Enabled | workqueue에서 항목을 처리하는 시간(초) | | k8s_workqueue_unfinished_work_seconds | name | Enabled | work_duration이 관찰하지 않은 진행 중인 작업 시간(초). 큰 값은 멈춘 스레드를 나타냅니다. 이 값이 증가하는 속도를 관찰해 멈춘 스레드 수를 유추할 수 있어요. | | k8s_workqueue_longest_running_processor_seconds | name | Enabled | workqueue의 가장 오래 실행된 프로세서 시간(초) | | k8s_workqueue_retries_total | name | Enabled | workqueue가 처리한 총 재시도 수 |

IPAM

| 이름 | 라벨 | 기본값 | 설명 | | ipam_capacity | family, cidr | Enabled | family로 구분되는 IPAM 풀의 총 IP 수 | | ipam_events_total | action, family | Enabled | action과 데이터패스 family 유형으로 구분되는 수신 IPAM 이벤트 수 | | ip_addresses | family | Enabled | 할당된 IP 주소 수 |

KVstore

| 이름 | 라벨 | 기본값 | 설명 | | kvstore_operations_duration_seconds | action, kind, outcome, scope | Enabled | kvstore 연산 시간 | | kvstore_events_queue_seconds | action, scope | Enabled | 수신 이벤트가 큐에 들어가기 전까지 기다린 시간(초) | | kvstore_quorum_errors_total | error | Enabled | 쿼럼(quorum) 오류 수 | | kvstore_sync_errors_total | scope, source_cluster | Enabled | kvstore 동기화에 실패한 횟수 | | kvstore_sync_queue_size | scope, source_cluster | Enabled | kvstore에서 동기화를 위해 큐에 넣은 요소 수 | | kvstore_initial_sync_completed | scope, source_cluster, action | Enabled | kvstore와의 초기 동기화가 완료되었는지 여부 |

Agent

| 이름 | 라벨 | 기본값 | 설명 | | api_process_time_seconds | path, method, return_code | Enabled | cilium-agent로의 모든 API 호출 처리 시간, API 메서드·경로·반환 HTTP 코드로 구분됨 |

FQDN

| 이름 | 라벨 | 기본값 | 설명 | | fqdn_gc_deletions_total | | Enabled | FQDN 가비지 컬렉터 작업에서 정리된 FQDN 수 | | fqdn_active_names | endpoint | Disabled | DNS 캐시에서 (TTL 기준으로) 만료되지 않은 도메인 수, 엔드포인트별 | | fqdn_active_ips | endpoint | Disabled | DNS 캐시에서 (TTL 기준으로) 만료되지 않은 도메인과 연결된 IP 수, 엔드포인트별 | | fqdn_alive_zombie_connections | endpoint | Disabled | (TTL 기준으로) 만료되었지만 여전히 활성 연결과 연결된(zombie) 도메인과 연결된 IP 수, 엔드포인트별 | | fqdn_selectors | | Enabled | 등록된 ToFQDN 셀렉터 수 |

Hive

| 이름 | 라벨 | 기본값 | 설명 | | hive_start_duration | | Enabled | hive.Start 메서드의 시간 | | hive_stop_duration | | Disabled | hive.Stop 메서드의 시간. 메트릭이 hive로 처리될 때(cilium-agent, cilium-operator에서 일반적) 보고되지 않음 | | hive_populate_duration | | Enabled | hive.Populate 메서드의 시간 |

Jobs

| 이름 | 라벨 | 기본값 | 설명 | | hive_jobs_runs_total | module_id, job_name | Enabled | 작업(job) 실행 총수 | | hive_jobs_runs_failed | module_id, job_name | Enabled | 오류를 반환한 작업 실행 수 | | hive_jobs_oneshot_last_run_duration_seconds | module_id, job_name | Enabled | 마지막 oneshot 작업 실행 시간 | | hive_jobs_observer_last_run_duration_seconds | module_id, job_name | Enabled | 마지막 observer 작업 실행 시간 | | hive_jobs_observer_run_duration_seconds | module_id, job_name | Enabled | observer 작업 실행 시간 히스토그램 | | hive_jobs_timer_last_run_duration_seconds | module_id, job_name | Enabled | 마지막 timer 작업 실행 시간 | | hive_jobs_timer_run_duration_seconds | module_id, job_name | Enabled | timer 작업 실행 시간 히스토그램 |

API Rate Limiting

| 이름 | 라벨 | 기본값 | 설명 | | api_limiter_adjustment_factor | api_call | Enabled | 자동 조정을 위한 최근 조정 계수 | | api_limiter_processed_requests_total | api_call, outcome, return_code | Enabled | 처리된 총 API 요청 수 | | api_limiter_processing_duration_seconds | api_call, value | Enabled | 평균 및 추정 처리 시간(초) | | api_limiter_rate_limit | api_call, value | Enabled | 현재 rate limiting 구성(limit와 burst) | | api_limiter_requests_in_flight | api_call, value | Enabled | 현재 및 최대 허용 in-flight 요청 수 | | api_limiter_wait_duration_seconds | api_call, value | Enabled | 평균, 최소, 최대 대기 시간 | | api_limiter_wait_history_duration_seconds | api_call | Disabled | 처리된 API 호출별 대기 시간 히스토그램 |

BGP Control Plane

| 이름 | 라벨 | 기본값 | 설명 | | bgp_control_plane_session_state | instance_name, local_asn, neighbor, neighbor_asn | Enabled | 피어와의 BGP 세션 현재 상태, Up = 1 또는 Down = 0 | | bgp_control_plane_advertised_routes | instance_name, local_asn, neighbor, neighbor_asn, afi, safi | Enabled | 피어에 광고된 라우트 수 | | bgp_control_plane_received_routes | instance_name, local_asn, neighbor, neighbor_asn, afi, safi | Enabled | 피어에서 받은 라우트 수 | | bgp_control_plane_reconcile_errors_total | instance_name | Enabled | 오류를 반환한 조정(reconciliation) 실행 횟수 | | bgp_control_plane_reconcile_run_duration_seconds | instance_name | Enabled | 조정 실행 시간 히스토그램 |

모든 메트릭은 BGP Control Plane이 활성화된 경우에만 활성화됩니다.

cilium-operator

구성 (Configuration)

cilium-operator는 --enable-metrics 옵션으로 실행해 메트릭을 제공하도록 구성할 수 있어요. 기본적으로 operator는 9963 포트에서 메트릭을 노출하며, 포트는 --operator-prometheus-serve-addr 옵션으로 변경할 수 있어요.

기능 메트릭 (Feature Metrics)

Cilium Operator Feature Metrics는 cilium_operator_feature Prometheus 네임스페이스 아래로 내보내집니다.

다음 테이블은 기능 메트릭을 다음과 같은 그룹으로 분류해요:

  • 고급 연결 및 로드 밸런싱 (adv_connect_and_lb) 이 범주에는 Gateway API, Ingress Controller, LB IPAM, Node IPAM, L7 Aware Traffic Management 같은 고급 네트워킹·로드 밸런싱 기능이 포함됩니다.

예를 들어 Cilium operator에서 Gateway API가 활성화되었는지 확인하려면 cilium_operator_feature_adv_connect_and_lb_gateway_api_enabled 메트릭을 관찰하세요. 모든 메트릭은 cilium_operator_feature + 그룹 이름 + 메트릭 이름 형식을 따릅니다. 값 0은 비활성화, 1은 활성화를 나타냅니다.

Note

"counter" 유형의 메트릭은 operator가 해당 오브젝트(예: 네트워크 정책)를 처리했지만 적극적으로 적용 중이 아닐 수 있어요. 이 메트릭들은 오브젝트가 수신·처리되었는지 관찰하는 용도이며, 반드시 적용되었다는 뜻은 아닙니다.

adv_connect_and_lb

| 이름 | 라벨 | 가능한 라벨 값 | 설명 | 유형 | | gateway_api_enabled | 없음 | 없음 | operator에서 GatewayAPI 활성화됨 | gauge | | ingress_controller_enabled | 없음 | 없음 | operator에서 IngressController 활성화됨 | gauge | | l7_aware_traffic_management_enabled | 없음 | 없음 | operator에서 L7 Aware Traffic Management 활성화됨 | gauge | | lb_ipam_enabled | 없음 | 없음 | operator에서 LB IPAM 활성화됨 | gauge | | node_ipam_enabled | 없음 | 없음 | operator에서 Node IPAM 활성화됨 | gauge |

내보내기 메트릭 (Exported Metrics)

대부분의 메트릭은 cilium_operator_ Prometheus 네임스페이스 아래로 내보내집니다. 일부 메트릭은 대신 cilium_ 네임스페이스(에이전트와 공유) 아래로 내보내지며, 관련 섹션에서 별도로 표시됩니다.

BGP Control Plane Operator

| 이름 | 라벨 | 기본값 | 설명 | | bgp_control_plane_reconcile_errors_total | resource_kind, resource_name | Enabled | BGP 리소스 조정당 반환된 오류 수 | | bgp_control_plane_reconcile_run_duration_seconds | | Enabled | 조정 실행 시간 히스토그램 |

모든 메트릭은 BGP Control Plane이 활성화된 경우에만 활성화됩니다.

IPAM

Note

IPAM 메트릭은 AWS, Alibabacloud 또는 Azure IPAM 플러그인을 사용할 때만 모두 Enabled예요.

| 이름 | 라벨 | 기본값 | 설명 | | ipam_ip_allocation_ops | subnet_id | Enabled | IP 할당 연산 수 | | ipam_ip_release_ops | subnet_id | Enabled | IP 해제 연산 수 | | ipam_interface_creation_ops | subnet_id | Enabled | 인터페이스 생성 연산 수 | | ipam_release_duration_seconds | type, status, subnet_id | Enabled | IP 또는 인터페이스 해제 지연(초) | | ipam_allocation_duration_seconds | type, status, subnet_id | Enabled | IP 또는 인터페이스 할당 지연(초) | | ipam_nodes | category | Enabled | category별 노드 수 { total | in-deficit | at-capacity } | | ipam_resync_total | | Enabled | 외부 IPAM API와의 동기화 연산 수 | | ipam_api_duration_seconds | operation, response_code | Enabled | 외부 IPAM API와의 상호작용 시간 | | ipam_api_rate_limit_duration_seconds | operation | Enabled | 외부 IPAM API 접근 중 rate limiting 시간 | | ipam_available_ips | target_node | Enabled | 노드의 사용 가능한 IP 수(플러그인별 NIC/주소 제한 고려) | | ipam_used_ips | target_node | Enabled | 노드에서 현재 사용 중인 IP 수 | | ipam_needed_ips | target_node | Enabled | 노드의 할당을 충족하는 데 필요한 IP 수 |

LB-IPAM

Note

이 메트릭들은 cilium_operator_가 아니라 cilium_ 네임스페이스(예: cilium_lbipam_conflicting_pools) 아래로 내보내집니다.

| 이름 | 라벨 | 기본값 | 설명 | | lbipam_conflicting_pools | | Enabled | 충돌하는 풀 수 | | lbipam_ips_available | pool | Enabled | 풀별 사용 가능한 IP 수 | | lbipam_ips_used | pool | Enabled | 풀별 사용 중인 IP 수 | | lbipam_services_matching | | Enabled | 일치하는 서비스 수 | | lbipam_services_unsatisfied | | Enabled | 요청한 IP를 받지 못한 서비스 수 |

Controllers

| 이름 | 라벨 | 기본값 | 설명 | | controllers_group_runs_total | status, group_name | Enabled | 컨트롤러 그룹 이름으로 구분된 컨트롤러 프로세스 실행 횟수 |

controllers_group_runs_total 메트릭은 시스템 내 각 컨트롤러의 성공·실패 횟수를 컨트롤러 그룹 이름과 완료 상태로 구분해 보고해요. 컨트롤러가 많기 때문에 이 메트릭은 컨트롤러별로 활성화됩니다. 이는 controller-group-metrics 구성 플래그나 prometheus.controllerGroupMetrics helm 값으로 전달되는 allow-list로 구성돼요. 현재 권장되는 기본 그룹 이름 집합은 Cilium Helm 차트의 values 파일에서 찾을 수 있어요. 특별한 이름 "all"과 "none"이 지원됩니다.

CiliumEndpointSlices (CES)

| 이름 | 라벨 | 설명 | | number_of_ceps_per_ces | | 하나의 CES에 배치된 CEP 수 | | number_of_cep_changes_per_ces | opcode | 각 CES 업데이트에서 변경된 CEP 수 | | ces_sync_total | outcome, failure_type | outcome별 완료된 CES 동기화 수 | | ces_queueing_delay_seconds | queue | CiliumEndpointSlice 큐잉 지연(초) |

CES 컨트롤러에는 CES 업데이트를 처리하는 여러 내부 큐가 있다는 점을 참고하세요. 이 큐들이 내보내는 상세 메트릭은 아래의 내부 WorkQueues 섹션에서 찾을 수 있어요.

Unmanaged Pods

| 이름 | 라벨 | 기본값 | 설명 | | unmanaged_pods | | Enabled | Cilium operator가 관리하지 않는 것으로 관찰된 총 파드 수 |

"Double Write" Identity Allocation Mode

"Double Write" identity 할당 모드가 활성화되면 다음 메트릭을 사용할 수 있어요:

| 이름 | 라벨 | 기본값 | 설명 | | doublewrite_crd_identities | | Enabled | CRD identity 총수 | | doublewrite_kvstore_identities | | Enabled | KVStore의 identity 총수 | | doublewrite_crd_only_identities | | Enabled | KVStore에 없는 CRD identity 수 | | doublewrite_kvstore_only_identities | | Enabled | CRD로 존재하지 않는 KVStore의 identity 수 |

Identity Garbage Collection

Identity 가비지 컬렉션은 operator에서 실행돼요. 이 메트릭들은 CRD identity 할당 모드를 사용할 때만 보고됩니다.

| 이름 | 라벨 | 기본값 | 설명 | | identity_gc_entries | status, identity_type | Enabled | 가비지 컬렉터 실행이 끝날 때 살아 있거나 삭제된 identity 수 | | identity_gc_runs | outcome, identity_type | Enabled | identity 가비지 컬렉터가 실행된 횟수 | | identity_gc_latency | outcome, identity_type | Enabled | 마지막으로 성공한 identity GC 실행 시간 |

Identity Management Mode

| 이름 | 라벨 | 설명 | | cid_controller_work_queue_event_count | resource, outcome | CID 컨트롤러 작업 큐가 처리한 이벤트 수 | | cid_controller_work_queue_latency | resource, phase | CID 컨트롤러 작업 큐의 인큐·처리 지연(초) |

내부 WorkQueues (Internal WorkQueues)

Operator는 다양한 작업 처리를 관리하기 위해 내부 큐를 사용해요. 현재 Cilium Node Synchronizer 큐와 Cilium EndpointSlice Controller 큐만 아래 메트릭을 보고합니다.

| 이름 | 라벨 | 기본값 | 설명 | | workqueue_depth | queue_name | Enabled | workqueue의 현재 깊이 | | workqueue_adds_total | queue_name | Enabled | workqueue가 처리한 총 추가(add) 수 | | workqueue_queue_duration_seconds | queue_name | Enabled | 요청 전 항목이 workqueue에 머무는 시간(초) | | workqueue_work_duration_seconds | queue_name | Enabled | workqueue에서 항목을 처리하는 시간(초) | | workqueue_unfinished_work_seconds | queue_name | Enabled | work_duration이 관찰하지 않은 진행 중인 작업 시간(초). 큰 값은 멈춘 스레드를 나타납니다. | | workqueue_longest_running_processor_seconds | queue_name | Enabled | workqueue의 가장 오래 실행된 프로세서 시간(초) | | workqueue_retries_total | queue_name | Enabled | workqueue가 처리한 총 재시도 수 |

MCS-API

| 이름 | 라벨 | 기본값 | 설명 | | mcsapi_serviceexport_info | serviceexport, namespace | Enabled | 로컬 클러스터의 ServiceExport 정보 | | mcsapi_serviceexport_status_condition | serviceexport, namespace, condition, status, reason | Enabled | 로컬 클러스터의 ServiceExport 상태 조건 | | mcsapi_serviceimport_info | serviceimport, namespace | Enabled | 로컬 클러스터의 ServiceImport 정보 | | mcsapi_serviceimport_status_condition | serviceimport, namespace, condition, status, reason | Enabled | 로컬 클러스터의 ServiceImport 상태 조건 | | mcsapi_serviceimport_status_clusters | serviceimport, namespace | Enabled | 현재 ServiceImport를 지원하는 클러스터 수 |

Clustermesh

Note

clustermesh_remote_clusters, clustermesh_remote_cluster_failures, clustermesh_remote_cluster_last_failure_ts, clustermesh_remote_cluster_readiness_status, clustermesh_remote_cluster_cache_revocations는 cilium_operator_가 아니라 cilium_ 네임스페이스(예: cilium_clustermesh_remote_clusters) 아래로 내보내집니다. 이 섹션의 나머지 메트릭(clustermesh_remote_cluster_services, clustermesh_remote_cluster_endpoint_slices, clustermesh_remote_cluster_service_exports)은 cilium_operator_ 아래로 내보내집니다.

| 이름 | 라벨 | 기본값 | 설명 | | clustermesh_remote_clusters | | Enabled | 로컬 클러스터와 mesh를 이룬 원격 클러스터 총수 | | clustermesh_remote_cluster_failures | target_cluster | Enabled | 원격 클러스터 관련 실패 총수 | | clustermesh_remote_cluster_last_failure_ts | target_cluster | Enabled | 원격 클러스터의 마지막 실패 타임스탬프 | | clustermesh_remote_cluster_readiness_status | target_cluster | Enabled | 원격 클러스터의 준비 상태 | | clustermesh_remote_cluster_cache_revocations | target_cluster | Enabled | 원격 클러스터 관련 캐시 철회 총수 | | clustermesh_remote_cluster_services | target_cluster | Enabled | 원격 클러스터별 서비스 총수 | | clustermesh_remote_cluster_endpoint_slices | target_cluster | Enabled | 원격 클러스터별 엔드포인트 슬라이스 총수 | | clustermesh_remote_cluster_service_exports | target_cluster | Enabled | 원격 클러스터별 MCS-API 서비스 내보내기 총수 |

Hubble

구성 (Configuration)

Hubble 메트릭은 cilium-agent 안에서 실행되는 Hubble 인스턴스가 제공해요. 이것을 구성하는 커맨드라인 옵션은 --enable-hubble, --hubble-metrics-server, --hubble-metrics입니다. --hubble-metrics-server는 IP:Port 쌍을 받지만 빈 IP(예: :9965)를 전달하면 서버가 모든 인터페이스에 바인딩됩니다. --hubble-metrics는 공백으로 구분된 메트릭 목록을 받아요. 또한 Hubble 메트릭을 TLS로 수신 대기하고 선택적으로 mTLS로 인증받도록 구성할 수도 있어요. 자세한 내용은 Hubble Metrics TLS 및 인증을 참고하세요.

일부 메트릭은 메트릭별로 세미콜론으로 구분된 추가 옵션을 받을 수 있어요. 예를 들어 --hubble-metrics="dns:query;ignoreAAAA http:destinationContext=workload-name"는 dns 메트릭에 query와 ignoreAAAA 옵션을, http 메트릭에 destinationContext=workload-name 옵션을 적용합니다.

컨텍스트 옵션 (Context Options)

Hubble 메트릭은 컨텍스트 옵션을 통한 구성을 지원해요. 모든 메트릭에 지원되는 컨텍스트 옵션:

  • sourceContext — egress·ingress 트래픽 모두에 대한 메트릭의 source 라벨을 구성.
  • sourceEgressContext — egress 트래픽에 대한 메트릭의 source 라벨을 구성 (sourceContext보다 우선).
  • sourceIngressContext — ingress 트래픽에 대한 메트릭의 source 라벨을 구성 (sourceContext보다 우선).
  • destinationContext — egress·ingress 트래픽 모두에 대한 메트릭의 destination 라벨을 구성.
  • destinationEgressContext — egress 트래픽에 대한 메트릭의 destination 라벨을 구성 (destinationContext보다 우선).
  • destinationIngressContext — ingress 트래픽에 대한 메트릭의 destination 라벨을 구성 (destinationContext보다 우선).
  • labelsContext — 메트릭에서 활성화할 라벨 목록을 구성.

특정 메트릭에만 있는 컨텍스트 옵션도 있어요. 각 메트릭에서 어떤 옵션을 사용할 수 있는지는 개별 메트릭 문서를 참고하세요.

각 컨텍스트 옵션에 대한 자세한 내용은 아래를 참고하세요.

대부분의 Hubble 메트릭은 sourceContext와 destinationContext 옵션을 사용해 소스 및/또는 대상 컨텍스트를 라벨로 추가하도록 구성할 수 있어요. 가능한 값은:

| 옵션 값 | 설명 | | identity | 모든 Cilium 보안 identity 라벨 | | namespace | Kubernetes 네임스페이스 이름 | | pod | namespace/pod 형식의 Kubernetes 파드 이름과 네임스페이스 | | pod-name | Kubernetes 파드 이름 | | dns | 소스 또는 대상의 알려진 모든 DNS 이름(쉼표로 구분) | | ip | IPv4 또는 IPv6 주소 | | reserved-identity | 예약된 identity 라벨 | | workload | namespace/workload-name 형식의 Kubernetes 파드 워크로드 이름과 네임스페이스 | | workload-name | Kubernetes 파드의 워크로드 이름 (워크로드: Deployment, Statefulset, Daemonset, ReplicationController, CronJob, Job, DeploymentConfig(OpenShift) 등) | | app | 파드 라벨(app.kubernetes.io/name, k8s-app, app)에서 파생된 Kubernetes 파드의 앱 이름 |

소스 및/또는 대상 컨텍스트를 지정할 때 | 기호로 구분해 여러 컨텍스트를 지정할 수 있어요. 여러 개를 지정하면 첫 번째 비어 있지 않은 값이 메트릭에 라벨로 추가됩니다. 예를 들어 flow:destinationContext=dns|ip 메트릭 구성은 먼저 대상의 DNS 이름을 라벨로 사용하려고 시도하고, 대상의 DNS 이름을 알 수 없으면 대상의 IP 주소를 대신 사용해요.

Note

identity 라벨 목록에 여러 예약 라벨이 포함되는 3가지 경우가 있어요:

  1. reserved:kube-apiserver와 reserved:host
  2. reserved:kube-apiserver와 reserved:remote-node
  3. reserved:kube-apiserver와 reserved:world

이 3가지 경우 모두 reserved-identity 컨텍스트는 reserved:kube-apiserver를 반환합니다.

Hubble 메트릭은 메트릭에 추가할 라벨 목록을 제공하는 labelsContext로도 구성할 수 있어요. sourceContext와 destinationContext는 서로 다른 값을 같은 메트릭 라벨에 넣는 반면, labelsContext는 서로 다른 라벨 값에 넣어요.

| 옵션 값 | 설명 | | source_ip | 흐름의 소스 IP | | source_namespace | 흐름 소스가 Kubernetes 파드라면 그 파드의 네임스페이스 | | source_pod | 흐름 소스가 Kubernetes 파드라면 그 파드 이름 | | source_workload | 소스 파드의 워크로드 이름 (Deployment, Statefulset, Daemonset, ReplicationController, CronJob, Job, DeploymentConfig(OpenShift)) | | source_workload_kind | 소스 파드의 워크로드 종류, 예: Deployment, Statefulset, Daemonset, ReplicationController, CronJob, Job, DeploymentConfig(OpenShift) | | source_app | 파드 라벨(app.kubernetes.io/name, k8s-app, app)에서 파생된 소스 파드의 앱 이름 | | destination_ip | 흐름의 대상 IP | | destination_namespace | 흐름 대상이 Kubernetes 파드라면 그 파드의 네임스페이스 | | destination_pod | 흐름 대상이 Kubernetes 파드라면 그 파드 이름 | | destination_workload | 대상 파드의 워크로드 이름 (Deployment, Statefulset, Daemonset, ReplicationController, CronJob, Job, DeploymentConfig(OpenShift)) | | destination_workload_kind | 대상 파드의 워크로드 종류, 예: Deployment, Statefulset, Daemonset, ReplicationController, CronJob, Job, DeploymentConfig(OpenShift) | | destination_app | 파드 라벨(app.kubernetes.io/name, k8s-app, app)에서 파생된 대상 파드의 앱 이름 | | traffic_direction | 흐름의 트래픽 방향. 가능한 값은 ingress, egress, unknown. |

흐름 컨텍스트를 지정할 때 , 기호로 구분해 여러 값을 지정할 수 있어요. 나열된 모든 라벨은 비어 있어도 메트릭에 포함됩니다. 예를 들어 http:labelsContext=source_namespace,source_pod 구성은 모든 Hubble HTTP 메트릭에 source_namespace와 source_pod 라벨을 추가해요.

Note

메트릭 카디널리티를 제한하기 위해 Hubble은 파드 삭제 1분 후 그 특정 파드에 바인딩된 데이터 시리즈를 제거해요. 메트릭이 특정 파드에 바인딩된 것으로 간주되는 조건 중 하나:

  • sourceContext가 pod로 설정되고 메트릭 시리즈의 source 라벨이 <pod_namespace>/<pod_name>과 일치
  • destinationContext가 pod로 설정되고 메트릭 시리즈의 destination 라벨이 <pod_namespace>/<pod_name>과 일치
  • labelsContext가 source_namespace와 source_pod를 모두 포함하고 메트릭 시리즈 라벨이 삭제된 파드의 네임스페이스·이름과 일치
  • labelsContext가 destination_namespace와 destination_pod를 모두 포함하고 메트릭 시리즈 라벨이 삭제된 파드의 네임스페이스·이름과 일치

내보내기 메트릭 (Exported Metrics)

Hubble 메트릭은 hubble_ Prometheus 네임스페이스 아래로 내보내집니다.

lost events

이 메트릭은 다른 메트릭들과 달리 네트워크 흐름과 직접 연결되지 않아요. 다른 메트릭 중 하나라도 활성화되면 활성화됩니다.

| 이름 | 라벨 | 기본값 | 설명 | | lost_events_total | source | Enabled | 손실된 이벤트 수 |

라벨
  • source는 손실된 이벤트의 소스를 식별하며, 다음 중 하나:
    • perf_event_ring_buffer
    • observer_events_queue
    • hubble_ring_buffer
dns

| 이름 | 라벨 | 기본값 | 설명 | | dns_queries_total | rcode, qtypes, ips_returned | Disabled | 관찰된 DNS 쿼리 수 | | dns_responses_total | rcode, qtypes, ips_returned | Disabled | 관찰된 DNS 응답 수 | | dns_response_types_total | type, qtypes | Disabled | DNS 응답 유형 수 |

옵션

| 옵션 키 | 옵션 값 | 설명 | | query | N/A | 쿼리를 "query" 라벨로 포함 | | ignoreAAAA | N/A | 모든 AAAA 요청/응답 무시 |

이 메트릭은 컨텍스트 옵션을 지원합니다.

drop

| 이름 | 라벨 | 기본값 | 설명 | | drop_total | reason, protocol | Disabled | 드랍 수 |

옵션

이 메트릭은 컨텍스트 옵션을 지원합니다.

flow

| 이름 | 라벨 | 기본값 | 설명 | | flows_processed_total | protocol, type, subtype, verdict | Disabled | 처리된 총 흐름 수 |

옵션

이 메트릭은 컨텍스트 옵션을 지원합니다.

flows-to-world

이 메트릭은 대상 identity에 reserved:world 라벨을 포함하는 모든 비응답(non-reply) 흐름을 계산해요. 기본적으로 드랍된 흐름은 드랍 이유가 Policy denied인 경우에만 계산됩니다. 모든 드랍 흐름을 계산하려면 any-drop 옵션을 설정하세요.

| 이름 | 라벨 | 기본값 | 설명 | | flows_to_world_total | protocol, verdict | Disabled | reserved:world로 가는 총 흐름 수 |

옵션

| 옵션 키 | 옵션 값 | 설명 | | any-drop | N/A | 드랍 이유와 무관하게 드랍된 모든 흐름 계산 | | port | N/A | 대상 포트를 "port" 라벨로 포함 | | syn-only | N/A | TCP 흐름에서 비응답 SYN만 계산 |

이 메트릭은 컨텍스트 옵션을 지원합니다.

http

Deprecated, 대신 httpV2를 사용하세요. 이 메트릭들은 httpV2와 동시에 활성화할 수 없어요.

| 이름 | 라벨 | 기본값 | 설명 | | http_requests_total | method, protocol, reporter | Disabled | HTTP 요청 수 | | http_responses_total | method, protocol, status, reporter | Disabled | HTTP 응답 수 | | http_request_duration_seconds | method, reporter | Disabled | HTTP 요청 시간(초) 히스토그램 |

라벨
  • method는 요청/응답의 HTTP 메서드.
  • protocol은 요청의 HTTP 프로토콜 (예: HTTP/1.1, HTTP/2).
  • status는 응답의 HTTP 상태 코드.
  • reporter는 요청/응답의 출처. 클라이언트에서 시작되었으면 client, 서버에서 시작되었으면 server, 출처를 알 수 없으면 unknown으로 설정.
옵션

이 메트릭은 컨텍스트 옵션을 지원합니다.

httpV2

httpV2는 기존 http 메트릭의 업데이트된 버전이에요. 이 메트릭들은 http와 동시에 활성화할 수 없습니다.

주요 차이점은 http_requests_total과 http_responses_total이 통합되었고 응답 흐름 데이터를 사용한다는 점이에요.

또한 http_request_duration_seconds 메트릭의 source/destination 관련 라벨은 이제 요청 관점에서 봅니다. http 메트릭에서는 응답 흐름 데이터를 사용해 source/destination이 바뀌었지만, httpV2에서는 이를 올바르게 반영합니다.

| 이름 | 라벨 | 기본값 | 설명 | | http_requests_total | method, protocol, status, reporter | Disabled | HTTP 요청 수 | | http_request_duration_seconds | method, reporter | Disabled | HTTP 요청 시간(초) 히스토그램 |

라벨
  • method는 요청/응답의 HTTP 메서드.
  • protocol은 요청의 HTTP 프로토콜 (예: HTTP/1.1, HTTP/2).
  • status는 응답의 HTTP 상태 코드.
  • reporter는 요청/응답의 출처. 클라이언트에서 시작되었으면 client, 서버에서 시작되었으면 server, 출처를 알 수 없으면 unknown으로 설정.
옵션

| 옵션 키 | 옵션 값 | 설명 | | exemplars | true | HTTP 메트릭에 추출된 trace ID 포함. OpenMetrics 활성화 필요 |

이 메트릭은 컨텍스트 옵션을 지원합니다.

icmp

| 이름 | 라벨 | 기본값 | 설명 | | icmp_total | family, type | Disabled | ICMP 메시지 수 |

옵션

이 메트릭은 컨텍스트 옵션을 지원합니다.

port-distribution

| 이름 | 라벨 | 기본값 | 설명 | | port_distribution_total | protocol, port | Disabled | 대상 포트별로 분산된 패킷 수 |

옵션

이 메트릭은 컨텍스트 옵션을 지원합니다.

tcp

| 이름 | 라벨 | 기본값 | 설명 | | tcp_flags_total | flag, family | Disabled | TCP 플래그 발생 수 |

옵션

이 메트릭은 컨텍스트 옵션을 지원합니다.

sctp

| 이름 | 라벨 | 기본값 | 설명 | | sctp_chunk_types_total | chunk_type, family | Disabled | SCTP 청크 타입 발생 수 |

옵션

이 메트릭은 컨텍스트 옵션을 지원합니다.

dynamic_exporter_exporters_total

동적 hubble exporter 메트릭이에요.

| 이름 | 라벨 | 기본값 | 설명 | | dynamic_exporter_exporters_total | status | Enabled | 구성된 hubble exporter 수 |

라벨
  • status는 exporter 상태를 식별하며, 다음 중 하나:
    • active
    • inactive
dynamic_exporter_up

동적 hubble exporter 메트릭이에요.

| 이름 | 라벨 | 기본값 | 설명 | | dynamic_exporter_up | name | Enabled | exporter 상태 (1 - active, 0 - inactive) |

라벨
  • name은 exporter 이름을 식별.
dynamic_exporter_reconfigurations_total

동적 hubble exporter 메트릭이에요.

| 이름 | 라벨 | 기본값 | 설명 | | dynamic_exporter_reconfigurations_total | op | Enabled | 동적 exporter 재구성 횟수 |

라벨
  • op는 재구성 연산 유형을 식별하며, 다음 중 하나:
    • add
    • update
    • remove
dynamic_exporter_config_hash

동적 hubble exporter 메트릭이에요.

| 이름 | 라벨 | 기본값 | 설명 | | dynamic_exporter_config_hash | | Enabled | 마지막으로 적용된 구성의 해시 |

dynamic_exporter_config_last_applied

동적 hubble exporter 메트릭이에요.

| 이름 | 라벨 | 기본값 | 설명 | | dynamic_exporter_config_last_applied | | Enabled | 마지막으로 적용된 구성의 타임스탬프 |

clustermesh-apiserver

구성 (Configuration)

메트릭을 노출하려면 clustermesh-apiserver를 --prometheus-serve-addr 옵션으로 실행하세요. 이 옵션은 IP:Port 쌍을 받지만 빈 IP(예: :9962)를 전달하면 서버가 모든 인터페이스에 바인딩됩니다(컨테이너에는 보통 하나만 있어요).

내보내기 메트릭 (Exported Metrics)

모든 메트릭은 cilium_clustermesh_apiserver_ Prometheus 네임스페이스 아래로 내보내집니다.

Bootstrap

| 이름 | 설명 | | bootstrap_seconds | bootstrap을 완료하는 데 걸린 시간(초) |

KVstore

| 이름 | 라벨 | 설명 | | kvstore_operations_duration_seconds | action, kind, outcome, scope | kvstore 연산 시간 | | kvstore_events_queue_seconds | action, scope | 수신 이벤트가 큐에 들어가기 전까지 기다린 시간(초) | | kvstore_quorum_errors_total | error | 쿼럼 오류 수 | | kvstore_sync_errors_total | scope, source_cluster | kvstore 동기화 실패 횟수 | | kvstore_sync_queue_size | scope, source_cluster | kvstore에서 동기화를 위해 큐에 넣은 요소 수 | | kvstore_initial_sync_completed | scope, source_cluster, action | kvstore와의 초기 동기화 완료 여부 |

API Rate Limiting

| 이름 | 라벨 | 설명 | | api_limiter_processed_requests_total | api_call, outcome, return_code | 처리된 총 API 요청 수 | | api_limiter_processing_duration_seconds | api_call, value | 평균 및 추정 처리 시간(초) | | api_limiter_rate_limit | api_call, value | 현재 rate limiting 구성(limit와 burst) | | api_limiter_requests_in_flight | api_call, value | 현재 및 최대 허용 in-flight 요청 수 | | api_limiter_wait_duration_seconds | api_call, value | 평균, 최소, 최대 대기 시간 |

Controllers

| 이름 | 라벨 | 기본값 | 설명 | | controllers_group_runs_total | status, group_name | Enabled | 컨트롤러 그룹 이름으로 구분된 컨트롤러 프로세스 실행 횟수 |

controllers_group_runs_total 메트릭은 시스템 내 각 컨트롤러의 성공·실패 횟수를 컨트롤러 그룹 이름과 완료 상태로 구분해 보고해요. 이 메트릭은 컨트롤러별로 활성화됩니다. 이는 controller-group-metrics 구성 플래그로 전달되는 allow-list로 구성돼요. Cilium Helm 차트의 clustermesh-apiserver 기본 집합은 특별한 이름 "all"로, 모든 컨트롤러 그룹에 대해 메트릭을 활성화합니다. 특별한 이름 "none"도 지원됩니다.

kvstoremesh

구성 (Configuration)

메트릭을 노출하려면 kvstoremesh를 --prometheus-serve-addr 옵션으로 실행하세요. 이 옵션은 IP:Port 쌍을 받지만 빈 IP(예: :9964)를 전달하면 서버가 모든 인터페이스에 바인딩됩니다(컨테이너에는 보통 하나만 있어요).

내보내기 메트릭 (Exported Metrics)

모든 메트릭은 cilium_kvstoremesh_ Prometheus 네임스페이스 아래로 내보내집니다.

Bootstrap

| 이름 | 설명 | | bootstrap_seconds | bootstrap을 완료하는 데 걸린 시간(초) |

KVStoremesh

| 이름 | 라벨 | 설명 | | leader_election_master_status | name | 리더 선출 상태 |

Clustermesh

이 메트릭들은 clustermesh_ 접두사가 붙지 않는다는 점을 참고하세요.

| 이름 | 라벨 | 설명 | | remote_clusters | | 로컬 클러스터와 mesh를 이룬 원격 클러스터 총수 | | remote_cluster_failures | target_cluster | 원격 클러스터 관련 실패 총수 | | remote_cluster_last_failure_ts | target_cluster | 원격 클러스터의 마지막 실패 타임스탬프 | | remote_cluster_readiness_status | target_cluster | 원격 클러스터의 준비 상태 | | remote_cluster_cache_revocations | target_cluster | 원격 클러스터 관련 캐시 철회 총수 |

KVstore

| 이름 | 라벨 | 설명 | | kvstore_operations_duration_seconds | action, kind, outcome, scope | kvstore 연산 시간 | | kvstore_events_queue_seconds | action, scope | 수신 이벤트가 큐에 들어가기 전까지 기다린 시간(초) | | kvstore_quorum_errors_total | error | 쿼럼 오류 수 | | kvstore_sync_errors_total | scope, source_cluster | kvstore 동기화 실패 횟수 | | kvstore_sync_queue_size | scope, source_cluster | kvstore에서 동기화를 위해 큐에 넣은 요소 수 | | kvstore_initial_sync_completed | scope, source_cluster, action | kvstore와의 초기 동기화 완료 여부 |

API Rate Limiting

| 이름 | 라벨 | 설명 | | api_limiter_processed_requests_total | api_call, outcome, return_code | 처리된 총 API 요청 수 | | api_limiter_processing_duration_seconds | api_call, value | 평균 및 추정 처리 시간(초) | | api_limiter_rate_limit | api_call, value | 현재 rate limiting 구성(limit와 burst) | | api_limiter_requests_in_flight | api_call, value | 현재 및 최대 허용 in-flight 요청 수 | | api_limiter_wait_duration_seconds | api_call, value | 평균, 최소, 최대 대기 시간 |

Controllers

| 이름 | 라벨 | 기본값 | 설명 | | controllers_group_runs_total | status, group_name | Enabled | 컨트롤러 그룹 이름으로 구분된 컨트롤러 프로세스 실행 횟수 |

controllers_group_runs_total 메트릭은 시스템 내 각 컨트롤러의 성공·실패 횟수를 컨트롤러 그룹 이름과 완료 상태로 구분해 보고해요. 이 메트릭은 컨트롤러별로 활성화됩니다. 이는 controller-group-metrics 구성 플래그로 전달되는 allow-list로 구성돼요. Cilium Helm 차트의 kvstoremesh 기본 집합은 특별한 이름 "all"로, 모든 컨트롤러 그룹에 대해 메트릭을 활성화합니다. 특별한 이름 "none"도 지원됩니다.

NAT

| 이름 | 라벨 | 기본값 | 설명 | | nat_endpoint_max_connection | family | Enabled | egress-IP와 원격 엔드포인트 주소 기준으로 가장 포화된 고유 NAT 매핑 연결의 포화도. |

이 메트릭들은 Cilium의 NAT 매핑 기능을 모니터링하기 위한 것입니다. NAT는 Egress Gateway와 BPF masquerading 같은 기능에 사용돼요.

NAT 맵은 masquerade된 연결의 매핑을 보관합니다. 같은 egress-IP로 masquerade되고 같은 원격 엔드포인트 IP·포트로 향하는 NAT 테이블의 연결은 모두 매핑에 고유한 소스 포트가 필요해요. 즉, 별개의 외부 엔드포인트로 masquerade하는 노드는 가능한 임시(ephemeral) 소스 포트에 의해 제한됩니다.

노드가 하나 이상의 egress-IP·원격 엔드포인트 튜플을 포워딩할 때, nat_endpoint_max_connection 메트릭은 사용 가능한 소스 포트의 백분율 측면에서 가장 포화된 그러한 연결입니다. 이 메트릭은 많은 연결이 같은 엔드포인트로 갈 때 노드가 과부하될 수 있는 egress gateway 기능을 사용할 때 특히 유용해요. 일반적으로 이 메트릭은 보통 상당히 낮아야 합니다. 여기서 높은 값은 노드가 하나 이상의 외부 엔드포인트에 대한 연결 한계에 도달하고 있음을 나타낼 수 있어요.

Local Redirect Policy (control plane)

| 이름 | 라벨 | 기본값 | 설명 | | controller_duration_seconds | | Enabled | 로컬 리다이렉트 정책 처리 시간 히스토그램 |

더 알아보기 (Learn more)