Kubernetes에서 서비스 메시 텔레메트리
Kubernetes에서 서비스 메시 텔레메트리 (Telemetry on K8s)
Consul on Kubernetes가 Prometheus와 Grafana와 통합해 Consul 서비스 메시에 대한 메트릭을 제공하는 방법을 설명하는 문서예요. 메시 서비스, 사이드카 프록시, 에이전트, 게이트웨이 메트릭을 각각 활성화하는 방법을 다뤄요.
출처: 문서
본문
Consul on Kubernetes는 Prometheus와 Grafana와 통합해 Consul 서비스 메시에 대한 메트릭을 제공해요. 사용 가능한 메트릭은 다음과 같아요:
- 메시 서비스 메트릭
- 메시 사이드카 프록시 메트릭
- Consul 에이전트 메트릭
- 인그레스, 종료, 메시 게이트웨이 메트릭
특정 사이드카 프록시 메트릭은 Consul UI의 토폴로지 시각화(Topology Visualization) 보기에서도 볼 수 있어요. 이 섹션은 각각을 활성화하는 방법을 문서화해요.
metrics merging을 통한 메시 서비스 및 사이드카 메트릭 (Mesh Service and Sidecar Metrics with Metrics Merging)
Prometheus 어노테이션은 Prometheus가 파드에서 메트릭을 스크랩하도록 지시하는 데 사용돼요. Prometheus 어노테이션은 파드의 한 엔드포인트에서만 스크랩을 지원하므로, Consul on Kubernetes는 metrics merging을 지원해 서비스 메트릭과 사이드카 프록시 메트릭을 하나의 엔드포인트로 병합해요. 서비스 메트릭이 없으면 사이드카 프록시 메트릭만 스크랩하는 것도 지원해요.
메시의 서비스 메트릭은 connectInject.metrics 아래에 중첩된 Helm 값으로 구성할 수 있어요.
메트릭과 metrics merging은 다음 Helm 값으로 모든 connect-injected 파드에 대해 기본 활성화할 수 있어요:
connectInject:
metrics:
defaultEnabled: true # by default, this inherits from the value global.metrics.enabled
defaultEnableMerging: true
또한 consul.hashicorp.com/enable-metrics 및 consul.hashicorp.com/enable-metrics-merging 어노테이션을 사용해 파드별로 재정의할 수 있어요.
참고 대부분의 경우 기본 설정으로 충분해요. 포트 충돌이나 서비스 메트릭이 병합되지 않는 문제가 발생하면 기본값을 변경해야 할 수 있어요.
Prometheus 어노테이션은 어느 엔드포인트에서 메트릭을 스크랩할지 지정해요. 어노테이션은 Envoy 사이드카의 0.0.0.0:20200 리스너를 가리켜요. 리스너와 해당 Prometheus 어노테이션은 다음 Helm 값으로 구성할 수 있어요. 또는 consul.hashicorp.com/prometheus-scrape-port 및 consul.hashicorp.com/prometheus-scrape-path Consul 어노테이션을 지정해 파드별로 재정의할 수 있어요:
connectInject:
metrics:
defaultPrometheusScrapePort: 20200
defaultPrometheusScrapePath: "/metrics"
이전 예시에 지정된 Helm 값은 다음 Prometheus 어노테이션이 스크랩을 위해 파드에 자동 추가되는 결과를 만들어요:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/path: "/metrics"
prometheus.io/port: "20200"
메트릭과 metrics merging이 모두 활성화되면 메트릭이 서비스와 사이드카 프록시에서 결합되고, 스크랩을 위해 Consul 데이터플레인 사이드카의 로컬 서버를 통해 노출돼요. 이 엔드포인트를 병합된 메트릭 엔드포인트(merged metrics endpoint)라고 하며 기본값은 127.0.0.1:20100/stats/prometheus예요. 리스너는 위 경우 병합된 메트릭 엔드포인트를 대상으로 해요. 이는 다음 Helm 값으로 구성할 수 있어요(또는 consul.hashicorp.com/merged-metrics-port로 파드별 재정의):
connectInject:
metrics:
defaultMergedMetricsPort: 20100
서비스 메트릭을 스크랩할 엔드포인트는 consul.hashicorp.com/service-metrics-port 및 consul.hashicorp.com/service-metrics-path 파드 어노테이션으로 파드별로만 구성할 수 있어요. 구성되지 않으면 서비스 메트릭 포트는 서비스를 Consul에 등록하는 데 사용되는 포트(consul.hashicorp.com/connect-service-port)를 기본으로 사용하며, 이는 다시 파드의 첫 번째 컨테이너의 첫 번째 포트를 기본으로 해요. 서비스 메트릭 경로는 기본적으로 /metrics예요.
Consul 에이전트 메트릭 (Consul Agent Metrics)
global.metrics.enableAgentMetrics 필드를 true로 설정하면 Prometheus로 Consul 서버 파드의 메트릭을 스크랩할 수 있어요. 또한 global.metrics.agentMetricsRetentionTime 필드를 구성해 에이전트의 메트릭 보존 시간을 설정할 수 있는데, 이는 duration을 기대하며 기본값은 "1m"이에요. Consul 서버가 메트릭을 전혀 방출하려면 이 값이 "0m"보다 커야 해요. Prometheus 배포가 현재 TLS 엔드포인트 스크랩을 지원하지 않으므로, TLS가 활성화되면 에이전트 메트릭은 현재 지원되지 않아요.
global:
metrics:
enabled: true
enableAgentMetrics: true
agentMetricsRetentionTime: "1m"
게이트웨이 메트릭 (Gateway Metrics)
global.metrics.enableGatewayMetrics 필드를 true로 설정하면 Prometheus로 Consul 인그레스, 종료, 메시 게이트웨이의 메트릭을 스크랩할 수 있어요. 게이트웨이는 표준 Envoy 프록시 메트릭을 방출해요. 메트릭이 공개 인터넷에 노출되지 않도록, 메시 및 인그레스 게이트웨이는 공용 IP를 가질 수 있으므로 메트릭 엔드포인트는 0.0.0.0의 모든 인터페이스가 아니라 해당 게이트웨이 인스턴스의 파드 IP에 노출돼요.
global:
metrics:
enabled: true
enableGatewayMetrics: true
UI 토폴로지 시각화의 메트릭 (Metrics in the UI Topology Visualization)
Consul의 내장 UI에는 Consul 서비스 메시에 속한 서비스에 대한 토폴로지 시각화가 있어요. 토폴로지 시각화는 각 서비스에 대해 메트릭 프로바이더에서 기본 메트릭을 가져와 토폴로지 시각화의 일부로 표시할 수 있어요.
아래 다이어그램은 UI가 샘플 애플리케이션에 대한 서비스 메트릭을 표시하는 방식을 보여줘요:
토폴로지 보기는 ui.metrics 아래에 구성돼요. 이 구성은 Consul UI가 ui.metrics.provider가 지정한 프로바이더를 Prometheus 서버의 URL ui.metrics.baseURL에서 쿼리한 다음 서비스에 대한 사이드카 프록시 메트릭을 표시하도록 해요. UI는 ui.metrics.enabled가 true이고 ui.enabled가 true일 때 특정 사이드카 프록시 Prometheus 메트릭을 표시해요. ui.metrics.enabled의 값은 기본값 "-"로, global.metrics.enabled의 값에서 상속됨을 의미해요.
ui:
enabled: true
metrics:
enabled: true # by default, this inherits from the value global.metrics.enabled
provider: "prometheus"
baseURL: http://prometheus-server
Prometheus 배포 (데모 및 비프로덕션 사용 사례 전용) (Deploying Prometheus)
Helm 차트에는 Prometheus 배포를 위한 데모 매니페스트가 들어 있어요. prometheus.enabled로 Helm과 함께 설치할 수 있어요. 이 매니페스트는 Prometheus의 커뮤니티 매니페스트를 기반으로 해요. Prometheus 배포는 평가판 및 데모 사용 사례를 위한 빠른 부트스트래핑을 허용하도록 설계되었으며, 프로덕션 사용 사례에는 권장되지 않아요.
Prometheus는 Consul과 동일한 네임스페이스에 설치되며, Consul 설치와 함께 설치되고 제거돼요.
Grafana는 선택적으로 Prometheus와 함께 사용해 메트릭을 표시할 수 있어요. Grafana의 설치와 구성은 Consul Helm 차트와 별도로 관리해야 해요. Prometheus, Grafana, Kubernetes를 사용한 Layer 7 관찰 튜토리얼이 Helm을 사용한 설치 방법을 제공해요.
prometheus:
enabled: true