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부터 PrometheusEnvoyFilter는 기본적으로 설치되지 않으며, 대신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를 사용하거나 차원을 재정의해서 표준 메트릭 정의를 수정할 수 있어요.
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
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)
- 다음 구성을 사용해서 모든 메트릭을 비활성화하세요.
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
- 다음 구성을 사용해서
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
- 다음 구성을 사용해서 클라이언트의
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
- 다음 구성을 사용해서 서버의
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 참조를 확인하세요.
- 메트릭 차원과 태그 표현식에 대해서는 "값에 표현식 사용하기" 문서를 참고하세요.