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 텔레메트리 문서를 참고하세요.