TCP 서비스 메트릭 수집하기
TCP 서비스 메트릭 수집하기 (Collecting Metrics for TCP Services)
이 작업은 Istio가 메시 안의 TCP 서비스에 대한 텔레메트리를 자동으로 수집하도록 구성하는 방법을 보여드려요. 작업을 마치면 메시의 기본 TCP 메트릭을 조회할 수 있어요. 이 작업 전체에서 예시로 Bookinfo 샘플 애플리케이션을 사용해요.
출처: Istio 문서
본문
이 작업은 Istio가 메시 안의 TCP 서비스에 대한 텔레메트리를 자동으로 수집하도록 구성하는 방법을 보여드려요. 작업이 끝나면 메시의 기본 TCP 메트릭을 조회할 수 있어요. 이 작업 전체에서 예시로 Bookinfo 샘플 애플리케이션을 사용해요.
시작하기 전에 (Before you begin)
- 클러스터에 Istio를 설치하고 애플리케이션을 배포하세요. Prometheus도 설치해야 해요.
- 이 작업은 Bookinfo 샘플이
default네임스페이스에 배포된다고 가정해요. 다른 네임스페이스를 사용한다면 예시 구성을 업데이트하세요.
새 텔레메트리 데이터 수집하기 (Collecting new telemetry data)
- Bookinfo가 MongoDB를 사용하도록 설정하세요.
ratings서비스의v2를 설치하세요.
$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml@ serviceaccount/bookinfo-ratings-v2 created deployment.apps/ratings-v2 createdmongodb서비스를 설치하세요.
$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-db.yaml@ service/mongodb created deployment.apps/mongodb-v1 created- Bookinfo 샘플은 각 마이크로서비스의 여러 버전을 배포하므로, 각 버전에 해당하는 서비스 서브셋과 각 서브셋의 로드 밸런싱 정책을 정의하는 대상 규칙(destination rules)부터 만들기 시작하세요.
상호 TLS를 활성화했다면 대신 다음 명령을 실행하세요.$ kubectl apply -f @samples/bookinfo/networking/destination-rule-all.yaml@
대상 규칙을 표시하려면 다음 명령을 실행하세요.$ kubectl apply -f @samples/bookinfo/networking/destination-rule-all-mtls.yaml@
이러한 서브셋을 참조하는 가상 서비스를 추가하기 전에 대상 규칙이 전파될 때까지 몇 초 기다리세요. 가상 서비스의 서브셋 참조는 대상 규칙에 의존하기 때문이에요. 4.$ kubectl get destinationrules -o yamlratings와reviews가상 서비스를 생성하세요.$ kubectl apply -f @samples/bookinfo/networking/virtual-service-ratings-db.yaml@ virtualservice.networking.istio.io/reviews created virtualservice.networking.istio.io/ratings created - 샘플 애플리케이션으로 트래픽을 보내세요. Bookinfo 샘플의 경우 웹 브라우저에서
http://$GATEWAY_URL/productpage에 접속하거나 다음 명령을 사용하세요.
$ curl http://"$GATEWAY_URL/productpage"
[!note]
$GATEWAY_URL은 Bookinfo 예시에서 설정한 값이에요.
- TCP 메트릭 값이 생성되고 수집되고 있는지 확인하세요. Kubernetes 환경에서는 다음 명령으로 Prometheus에 포트 포워딩을 설정하세요.
$ istioctl dashboard prometheus
Prometheus 브라우저 창에서 TCP 메트릭 값을 확인하세요. Graph를 선택하세요. istio_tcp_connections_opened_total 메트릭 또는 istio_tcp_connections_closed_total을 입력하고 Execute를 선택하세요. Console 탭에 표시되는 표는 다음과 같은 항목을 포함해요.
istio_tcp_connections_opened_total{
destination_version="v1",
instance="172.17.0.18:42422",
job="istio-mesh",
canonical_service_name="ratings-v2",
canonical_service_revision="v2"}
istio_tcp_connections_closed_total{
destination_version="v1",
instance="172.17.0.18:42422",
job="istio-mesh",
canonical_service_name="ratings-v2",
canonical_service_revision="v2"}
TCP 텔레메트리 수집 이해하기 (Understanding TCP telemetry collection)
이 작업에서는 Istio 구성을 사용해서 메시 안의 TCP 서비스에 대한 모든 트래픽의 메트릭을 자동으로 생성하고 보고했어요. 모든 활성 연결에 대한 TCP 메트릭은 기본적으로 15s마다 기록되며, 이 타이머는 tcpReportingDuration으로 구성할 수 있어요. 연결이 끝날 때도 연결에 대한 메트릭이 기록돼요.
TCP 속성 (TCP attributes)
여러 TCP 전용 속성이 Istio 내에서 TCP 정책과 제어를 가능하게 해요. 이 속성은 Envoy 프록시가 생성하며, Envoy의 Node Metadata를 사용해서 Istio에서 얻어와요. Envoy는 ALPN 기반 터널링과 접두사 기반 프로토콜을 사용해서 Node Metadata를 피어 Envoy로 전달해요. 우리는 istio-peer-exchange라는 새 프로토콜을 정의하는데, 이는 메시 안의 클라이언트와 서버 사이드카가 광고하고 우선시해요. ALPN 협상은 Istio 지원 프록시 간의 연결에 대해 프로토콜을 istio-peer-exchange로 결정하지만, Istio 지원 프록시와 다른 프록시 사이에서는 그렇지 않아요. 이 프로토콜은 TCP를 다음과 같이 확장해요.
- TCP 클라이언트는 첫 번째 바이트 시퀀스로 매직 바이트 문자열과 길이 접두사 페이로드를 보내요.
- TCP 서버는 첫 번째 바이트 시퀀스로 매직 바이트 시퀀스와 길이 접두사 페이로드를 보내요. 이 페이로드는 protobuf로 인코딩된 직렬화 메타데이터예요.
- 클라이언트와 서버는 동시에, 그리고 순서에 상관없이 쓸 수 있어요. 그러면 Envoy의 확장 필터가 다운스트림과 업스트림에서 매직 바이트 시퀀스가 일치하지 않거나 전체 페이로드를 읽을 때까지 추가 처리를 해요.
정리 (Cleanup)
port-forward프로세스를 제거하세요.
$ killall istioctl
- 후속 작업을 탐구할 계획이 없다면 Bookinfo 정리 지침을 참고해서 애플리케이션을 종료하세요.
더 알아보기 (Learn more)
- Istio 표준 TCP 메트릭의 전체 목록과 의미는 메트릭 문서를 참고하세요.
tcpReportingDuration같은 구성 옵션에 대해서는 MeshConfig 문서를 참고하세요.