Querying Metrics from Prometheus
이번 테스크에서는 Prometheus를 활용헤ㅐ서 istio 쿼리를 어떻게 하는지 보여준다. 이 테스크의 일 부분으로써 metric 값 쿼리를 위한 web-based 인터페이스를 사용할 계획이다. 이 task 전체에서 Bookinfo 샘플 애플리케이션이 사용된다.
Before you begin
쿠버네티스 클러스에 istion를 설치하고, Bookinfo 샘플 애플리케이션을 배포하세요.
Querying Istio Metrics
- 클러스터에서 Prometheus 서비스가 동작하고 있는지 확인한다.
쿠버네티스 환경에서, 아래와 같은 명령어을 실행한다.
kubectl -n istio-system get svc prometheus NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE prometheus 10.59.241.54 <none> 9090/TCP 2m
- 서비스 매쉬로 트래픽을 전송한다.
Bookinfo 샘플 애플리케이션을 위해, http://$GATEWAY_URL/productpage 웹브라우저 또는 아래 명령어를 통해 접속한다.
curl http://$GATEWAY_URL/productpage
$GATEWAY_URL 은 Bookinfo 예쩨를 위한 환경변수 설정 값이다
- Prometheus UI를 오픈한다.
쿠버네티스 환경에서, 아래와 같은 명령어를 실행한다.
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=prometheus -o jsonpath='{.items[0].metadata.name}') 9090:9090 &
브러우저를 통해 http://localhost:9090/graph 접속한다.
- Promethues 쿼리를 실행한다. 웹페이지 상단 “Expression” 입력창에 아래 텍스트 istio_requests_total 를 입력한다. 그리고 Execute 버튼을 클릭한다. 결과는 아래와 유사하게 나올 것이다. ![Prometheus Query Result][/assets/images/istio/prometheus_query_result.png]
다른 쿼리를 시도해보면:
- productpage 서비스에게 전송한 모든 요청 횟수
istio_requests_total{destination_service="productpage.default.svc.cluster.local"}
- reviews v3 서비스로 전송된 모든 요청 횟수
istio_requests_total{destination_service="reviews.default.svc.cluster.local", destination_version="v3"}
이 쿼리는 현재까지 v3 reviews 서비스에게 전송된 모든 요청 횟수를 결과로 리턴한다.
rate(istio_requests_total{destination_service=~"productpage.*", response_code="200"}[5m])
About the Promethues add-on
Mixer는 생성된 mertic 값을 전달하기 위한 end-point 주소를 외부에 오픈하기 위한 Prometheus 어댑터를 내장하고 있다. Prometheus add-on은 Prometheus 서버가 노출된 metric 정보를 수집하기 위해 Mixer endpoint 를 통해 스크래핑하기 위해 사전 설정된다. Prometheus는 Istion metrics 정보들을 쿼리하고 영구적으로 저장하기 위한 메카니즘을 제공한다.
설정된 Prometheus add-on은 다음과 같은 endpoint를 수집한다.
- istio-telemetry.istio-system:42422: istio-mesh job은 Mixer 에서 생성된 모든 mertics 정보를 리턴한다.
- istio-telemetry.istio-system:10514: istio-telemetry job은 Mixer-specific metrics 값을 리턴한다. 이 endpoint 주소를 활용하여 Mixer 자체를 모니터링하는 사용한다.
- istio-proxy:15090: envoy-stats 는 Envoy에서 생성된 raw 통계값을 리턴합니다. Prometheus는 pods애 있는 envoy-porm 노출된 endpoint 를 바라보도록 설정되어 있습니다. add-on 구성은 add-on 프로세스에 의한 데이터의 크기를 제한하기 위해 수집하는 동안 다수의 Envoy Metrics 정보를 걸러냅니다.
- istio-pilot.istio-system:10514: pilot job은 Pilot-generated 메트릭을 리턴합니다.
- istio-galley.istio-system:10514: gallery는 모든 Gallery-generaed metrics 값을 리턴합니다.
- istio-policy.istio-system:10514: istio-policy는 모든 policy와 관련된 metrics 값을 리턴합니다. Prometheus 쿼리를 위한 좀더 제사한 정보는, querying docs 문서를 참고하세요