메인 콘텐츠로 건너뛰기
연산자는 Prometheus와 호환되는 메트릭과 Kubernetes 헬스 프로브를 노출하므로, 리컨실리에이션 활동을 관찰하고, 작동이 멈춘 컨트롤러를 감지하고, 장애에 대한 알림을 설정할 수 있습니다. 이 가이드에서는 연산자가 무엇을 노출하는지, 이를 어떻게 스크레이프하는지, 그리고 일상적으로 어떤 쿼리가 유용한지 설명합니다.
이 가이드는 연산자 프로세스 자체(controller manager)에 관한 내용입니다. ClickHouse 서버 메트릭(쿼리, 파트, 복제 지연)은 ClickHouse의 Prometheus 엔드포인트를 사용해 별도로 스크레이프하십시오.

엔드포인트

연산자 프로세스는 manager 파드 내에 2개의 HTTP 엔드포인트를 노출합니다. 헬스 프로브 엔드포인트는 항상 활성화되어 있으며, 배포 템플릿은 /healthz/readyz를 포트 8081의 파드 활성 상태 프로브와 준비 상태 프로브에 연결합니다.

연산자 바이너리 플래그

관련 manager 플래그(cmd/main.go에 정의됨)는 다음과 같습니다.
플래그 도움말 텍스트의 8443(HTTPS) / 8080(HTTP) 관례는 단지 참고용일 뿐입니다. Helm 차트는 metrics.port: 8080metrics.secure: true를 모두 설정하므로 8080에서 HTTPS를 제공합니다. 포트 기반 모드 감지는 없으며, HTTPS 또는 HTTP를 결정하는 것은 --metrics-secure입니다.

Helm으로 메트릭 활성화

차트는 이미 메트릭 포트용 Service를 생성하며, 필요에 따라 prometheus-operator용 ServiceMonitor도 생성합니다. 메트릭 엔드포인트 자체는 기본적으로 활성화되어 있습니다(metrics.enable: true, 포트 8080, metrics.secure: true를 통해 HTTPS로 제공). 일반적으로 변경해야 할 설정은 prometheus.enable뿐이며, 이를 설정하면 차트가 ServiceMonitor를 생성합니다:
cert-manager를 사용하지 않는다면 certManager.enable: false도 추가로 설정해야 합니다. 그러면 ServiceMonitor는 insecureSkipVerify: true로 스크레이프하며 bearer-token 인증에만 의존하게 됩니다. 메트릭 관련 전체 기본값은 다음과 같습니다:
적용:
설치 후 chart는 다음 리소스를 생성합니다:
  • Service/<resource-prefix>-metrics-service — 포트 8080을 노출합니다(metrics.secure: true이면 HTTPS).
  • ServiceMonitor/<resource-prefix>-controller-manager-metrics-monitorprometheus.enable: true일 때 생성됩니다.
  • ClusterRole/<resource-prefix>-metrics-reader — 비리소스 URL /metrics``에 대해 get` 권한을 부여합니다.

메트릭 엔드포인트 보안

metrics.secure: true인 경우 메트릭 서버는 모든 스크레이프 요청에 대해 TLS Kubernetes 인증/권한 부여를 적용합니다. 스크레이퍼는 다음 조건을 충족해야 합니다.
  1. 유효한 Kubernetes Bearer token을 제시해야 합니다.
  2. 비리소스 URL /metrics에 대한 get 권한이 부여된 클러스터 역할에 바인딩된 ServiceAccount에 속해야 합니다.
이 차트에는 이러한 클러스터 역할이 포함되어 있습니다.
이를 스크레이퍼(일반적으로 Prometheus)에서 사용하는 ServiceAccount에 바인딩하십시오:
메트릭 엔드포인트에서 401 Unauthorized 또는 403 Forbidden이 표시되면, 스크레이퍼가 HTTPS를 사용하고 있지만 Kubernetes Bearer token이 없거나 해당 token이 인증되지 않았거나, ServiceAccount에 위의 바인딩이 없습니다. metrics.secure: false로 설정해 보안을 비활성화하는 것은 공유 클러스터에서는 권장되지 않습니다. 네트워크를 통해 해당 파드에 접근할 수 있는 사용자라면 누구나 엔드포인트를 스크레이프할 수 있기 때문입니다.

ServiceMonitor 참고

prometheus.enable: true로 설정하면 차트는 다음과 같은 형태의 ServiceMonitor를 렌더링합니다:
Prometheus 인스턴스에서 cert-manager를 실행하지 않는다면 tlsConfig.insecureSkipVerify: true로 설정하고 bearer-token 인증만 사용하십시오 — certManager.enable: false일 때 차트는 이미 이렇게 설정됩니다.

독립형 Prometheus 예시

kube-prometheus-stack를 사용하지 않는다면, 리포지토리에는 examples/prometheus_secure_metrics_scraper.yaml에 포함된 자체 완결형 예시가 제공됩니다. 이 예시는 ServiceAccount, 필요한 RBAC, 그리고 연산자의 ServiceMonitor를 선택하는 Prometheus CR을 생성합니다.

헬스 프로브 엔드포인트

두 엔드포인트는 모두 동일한 단순 Ping 검사(sigs.k8s.io/controller-runtimehealthz.Ping)에 등록됩니다. 따라서 프로브 실패는 “manager 프로세스가 :8081에서 HTTP를 제공하지 않는다”는 뜻일 뿐, “컨트롤러가 비정상 상태이다”라는 뜻은 아닙니다. 컨트롤러 수준의 문제를 감지하려면 대신 리컨실리에이션 메트릭을 사용하십시오. 두 엔드포인트는 기본적으로 포트 8081에서 제공됩니다. 배포에는 다음과 같이 연결됩니다:
프로브가 반복적으로 실패한다면, 대개 프로브 server 자체가 아예 시작되지 않았다는 뜻입니다. 예를 들어 startup 초기에 manager가 종료되었을 수 있습니다. manager logs에서 unable to start manager, RBAC 실패, 또는 cache did not sync 오류를 확인하십시오.

메트릭 카탈로그

연산자는 사용자 정의 Prometheus collector를 등록하지 않습니다. 아래 항목은 모두 기반이 되는 controller-runtimeclient-go 라이브러리에서 노출하는 것입니다. 가장 유용한 시계열을 용도별로 정리하면 다음과 같습니다:

리컨실리에이션 활동

controller 레이블은 For(...)에 등록된 리소스 유형을 바탕으로 controller-runtime이 결정합니다. 현재 internal/controller/clickhouseinternal/controller/keeper의 코드에서는 각각 clickhouseclusterkeepercluster로 해석됩니다. 연산자를 사용자 지정한 경우 /metrics를 한 번 스크레이프하여 확인하십시오.

작업 큐

namecontroller 레이블에는 동일한 값(컨트롤러 이름)이 들어갑니다.

API 서버 트래픽

리더 선출

Helm 차트는 기본적으로 --leader-elect를 활성화하므로, 이 메트릭은 일반적인 Helm 설치에 포함됩니다. 플래그 없이 바이너리를 직접 실행하면 이 메트릭은 표시되지 않습니다.

런타임

표준 Go 프로세스 및 런타임 collector — go_goroutines, go_memstats_*, process_cpu_seconds_total, process_resident_memory_bytes 등입니다.

유용한 PromQL 쿼리

상태 개요

적체 감지

스로틀링과 API 부하

리더 상태(HA 배포)

권장 알림

PrometheusRule 작성을 위한 출발점입니다(환경에 맞게 임계값을 조정하십시오):
마지막 규칙은 leader election이 활성화된 경우에만 의미가 있습니다.

설정 확인

차트가 clickhouse-operator-system에 설치되어 있다고 가정하고, 전체 과정을 빠르게 점검합니다:
스크레이프 결과가 Prometheus 노출 형식의 메트릭을 반환하면 엔드포인트와 RBAC가 올바르게 구성된 것입니다.
  • 설치 — 모니터링과 관련된 Helm values입니다.
  • 구성 — 메트릭 서버와 공유하는 TLS 구성입니다.
마지막 수정일 2026년 6월 29일