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

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

이 작업은 Istio가 생성하는 메트릭을 커스터마이징하는 방법을 보여드려요. Istio는 다양한 대시보드가 사용하는 텔레메트리를 생성해서 메시를 시각화하는 데 도움을 줘요.

출처: Istio 문서

본문

이 작업은 Istio가 생성하는 메트릭을 커스터마이징하는 방법을 보여드려요. Istio는 다양한 대시보드가 사용하는 텔레메트리를 생성해서 메시를 시각화하는 데 도움을 줘요. 예를 들어 Istio를 지원하는 대시보드에는 다음이 있어요.

  • Grafana
  • Kiali
  • Prometheus

기본적으로 Istio는 표준 메트릭 세트(예: requests_total)를 정의하고 생성하지만, Telemetry API를 사용해서 이들을 커스터마이징하고 새 메트릭을 만들 수도 있어요.

시작하기 전에 (Before you begin)

클러스터에 Istio를 설치하고 애플리케이션을 배포하세요. 또는 Istio 설치 과정의 일부로 커스텀 통계를 설정할 수도 있어요. 이 작업 전체에서 예시 애플리케이션으로 Bookinfo 샘플 애플리케이션을 사용해요. 설치 지침은 Bookinfo 애플리케이션 배포 문서를 참고하세요.

커스텀 메트릭 활성화하기 (Enable custom metrics)

텔레메트리 메트릭을 커스터마이징하려면, 예를 들어 게이트웨이와 사이드카가 인바운드/아웃바운드 방향으로 내보내는 requests_total 메트릭에 request_host와 destination_port 차원을 추가하려면 다음을 사용하세요.

$ cat <<EOF > ./custom_metrics.yaml
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: namespace-metrics
spec:
  metrics:
  - providers:
    - name: prometheus
    overrides:
    - match:
        metric: REQUEST_COUNT
      tagOverrides:
        destination_port:
          value: "string(destination.port)"
        request_host:
          value: "request.host"
EOF
$ kubectl apply -f custom_metrics.yaml

결과 검증하기 (Verify the results)

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

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

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

$ kubectl exec "$(kubectl get pod -l app=productpage -o jsonpath='{.items[0].metadata.name}')" -c istio-proxy -- curl -sS 'localhost:15000/stats/prometheus' | grep istio_requests_total

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

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

값에 표현식 사용하기 (Use expressions for values)

메트릭 구성의 값은 공통 표현식이에요. 그래서 JSON에서는 문자열을 이중 인용부호로 감싸야 해요, 예: 'string value'. Mixer 표현식 언어와 달리 파이프(|) 연산자는 지원되지 않지만, has나 in 연산자로 이를 흉내낼 수 있어요. 예를 들어:

has(request.host) ? request.host : "unknown"

자세한 내용은 Common Expression Language 문서를 참고하세요. Istio는 모든 표준 Envoy 속성을 노출해요. 피어 메타데이터는 아웃바운드의 경우 upstream_peer, 인바운드의 경우 downstream_peer 속성으로 제공되며 다음 필드를 가져요. | Field | Type | Value | | app | string | Application name | | version | string | Application version | | service | string | Service instance | | revision | string | Service version | | name | string | Name of the pod | | namespace | string | Namespace that the pod runs in | | type | string | Workload type | | workload | string | Workload name | | cluster | string | Identifier for the cluster to which this workload belongs | 예를 들어 아웃바운드 구성에서 사용할 피어 app 레이블의 표현식은 filter_state.downstream_peer.app 또는 filter_state.upstream_peer.app이에요.

정리 (Cleanup)

Bookinfo 샘플 애플리케이션과 그 구성을 삭제하려면 Bookinfo 정리 문서를 참고하세요.

더 알아보기 (Learn more)

  • Common Expression Language에 대한 자세한 내용은 CEL 문서를 참고하세요.
  • Istio가 노출하는 표준 Envoy 속성과 텔레메트리 구성에 대해서는 Istio 텔레메트리 문서를 참고하세요.