Telemetry API로 Istio 메트릭 커스터마이징하기

Telemetry API로 Istio 메트릭 커스터마이징하기 (Customizing Istio Metrics with Telemetry API)

이 작업은 Telemetry API로 Istio가 생성하는 메트릭을 커스터마이징하는 방법을 보여드려요. Istio에서 Telemetry API는 이미 일급 API로 자리 잡았어요.

출처: Istio 문서

본문

Telemetry API는 이미 꽤 오랫동안 Istio의 일급 API로 자리 잡고 있어요. 예전에는 사용자가 Istio 구성의 telemetry 섹션에서 메트릭을 구성해야 했어요. 이 작업은 Telemetry API로 Istio가 생성하는 메트릭을 커스터마이징하는 방법을 보여드려요.

시작하기 전에 (Before you begin)

클러스터에 Istio를 설치하고 애플리케이션을 배포하세요. Telemetry API는 EnvoyFilter와 함께 동작할 수 없어요. 자세한 내용은 이 이슈를 확인하세요.

  • Istio 버전 1.18부터 Prometheus EnvoyFilter는 기본적으로 설치되지 않으며, 대신 meshConfig.defaultProviders로 활성화해요. Telemetry API를 사용해서 텔레메트리 파이프라인을 더 커스터마이징해야 해요.
  • 1.18 이전 버전의 Istio에서는 다음 IstioOperator 구성을 사용해서 설치해야 해요.
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  values:
    telemetry:
      enabled: true
      v2:
        enabled: false

메트릭 오버라이드하기 (Override metrics)

metrics 섹션은 메트릭 차원 값을 표현식으로 제공하고, 기존 메트릭 차원을 제거하거나 오버라이드할 수 있게 해줘요. tags_to_remove를 사용하거나 차원을 재정의해서 표준 메트릭 정의를 수정할 수 있어요.

  1. REQUEST_COUNT 메트릭에서 grpc_response_status 태그 제거하기
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: remove-tags
  namespace: istio-system
spec:
  metrics:
    - providers:
        - name: prometheus
      overrides:
        - match:
            mode: CLIENT_AND_SERVER
            metric: REQUEST_COUNT
          tagOverrides:
            grpc_response_status:
              operation: REMOVE
  1. REQUEST_COUNT 메트릭에 커스텀 태그 추가하기
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: custom-tags
  namespace: istio-system
spec:
  metrics:
    - overrides:
        - match:
            metric: REQUEST_COUNT
            mode: CLIENT
          tagOverrides:
            destination_x:
              value: filter_state.upstream_peer.app
        - match:
            metric: REQUEST_COUNT
            mode: SERVER
          tagOverrides:
            source_x:
              value: filter_state.downstream_peer.app
      providers:
        - name: prometheus

메트릭 비활성화하기 (Disable metrics)

  1. 다음 구성을 사용해서 모든 메트릭을 비활성화하세요.
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: remove-all-metrics
  namespace: istio-system
spec:
  metrics:
    - providers:
        - name: prometheus
      overrides:
        - disabled: true
          match:
            mode: CLIENT_AND_SERVER
            metric: ALL_METRICS
  1. 다음 구성을 사용해서 REQUEST_COUNT 메트릭을 비활성화하세요.
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: remove-request-count
  namespace: istio-system
spec:
  metrics:
    - providers:
        - name: prometheus
      overrides:
        - disabled: true
          match:
            mode: CLIENT_AND_SERVER
            metric: REQUEST_COUNT
  1. 다음 구성을 사용해서 클라이언트의 REQUEST_COUNT 메트릭을 비활성화하세요.
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: remove-client
  namespace: istio-system
spec:
  metrics:
    - providers:
        - name: prometheus
      overrides:
        - disabled: true
          match:
            mode: CLIENT
            metric: REQUEST_COUNT
  1. 다음 구성을 사용해서 서버의 REQUEST_COUNT 메트릭을 비활성화하세요.
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: remove-server
  namespace: istio-system
spec:
  metrics:
    - providers:
        - name: prometheus
      overrides:
        - disabled: true
          match:
            mode: SERVER
            metric: REQUEST_COUNT

결과 검증하기 (Verify the results)

메시로 트래픽을 보내세요. Bookinfo 샘플의 경우 웹 브라우저에서 http://$GATEWAY_URL/productpage에 접속하거나 다음 명령을 실행하세요.

$ curl "http://$GATEWAY_URL/productpage"

[!note] $GATEWAY_URL은 Bookinfo 예시에서 설정한 값이에요. 다음 명령을 사용해서 Istio가 새 차원 또는 수정된 차원에 대한 데이터를 생성하는지 확인하세요.

$ istioctl x es "$(kubectl get pod -l app=productpage -o jsonpath='{.items[0].metadata.name}')" -oprom | grep istio_requests_total | grep -v TYPE |grep -v 'reporter="destination"'
$ istioctl x es "$(kubectl get pod -l app=details -o jsonpath='{.items[0].metadata.name}')" -oprom | grep istio_requests_total

예를 들어 출력에서 istio_requests_total 메트릭을 찾아 새 차원이 포함되어 있는지 확인하세요.

[!note] 프록시가 설정을 적용하기 시작하는 데 약간의 시간이 걸릴 수 있어요. 메트릭이 수신되지 않으면 잠시 기다린 후 요청을 다시 보내고 메트릭을 다시 찾아보세요.

더 알아보기 (Learn more)

  • Telemetry API 메트릭 구성의 자세한 내용은 Telemetry API 참조를 확인하세요.
  • 메트릭 차원과 태그 표현식에 대해서는 "값에 표현식 사용하기" 문서를 참고하세요.