이스티오 소개
Istio는 오픈 소스 서비스 메시이다.
여기서 서비스 메시란 서비스 간 모든 통신을 처리하는 소프트웨어 계층을 의미한다.
구현체인 Istio는 마이크로서비스 간의 트래픽 관리, 보안 강화, 정책 적용, 모니터링 및 관찰 기능을 제공한다.
Istio의 핵심 프록시 엔진이자 이번 글에서 주로 다룰 Envoy Proxy라는 놈이 있다.
Envoy는 마이크로서비스가 Pod으로 배포시 함께 배포되는 사이드카 프록시 형태로 동작한다.
다양한 기능을 제공하는데, 그 중 데이터 수집과 관련된 기능은 [분산 추적, 매트릭 수집, 로그 수집]이 있다.
Envoy Proxy의 수집 데이터를 가져와보자
이 글은 Istio가 설치되어 있고 sidecar injection이 설정되었다는 전제하에 이루어진다.
배포된 Pod에 컨테이너 형태로 injection 되었다면, Pod의 Proxy Config를 살펴봐야 한다.
(Envoy Proxy와 관련된 설정 부분이다)
현재는 아무 것도 하지 않았기 때문에 비어있다.
이제 Istio 자체의 Config를 수정하여 Proxy 설정을 변경해야한다.
$ kubectl edit configmap istio -n istio-sytem
위와 같은 명령어를 통해 istio config 파일을 수정 할 수 있다.
apiVersion: v1
data:
mesh: |
defaultConfig:
discoveryAddress: istiod.istio-system.svc:15012
envoyAccessLogService: # AccessLog 전송 대상 주소
address: 전송_대상_주소:대상_포트
envoyMetricsService: # metric 전송 대상
address: 전송_대상_주소:대상_포트
defaultProviders:
accessLogs:
- 전송_대상
metrics:
- 전송_대상
enableEnvoyAccessLogService: true
envoyAccessLogService: gRPC를 통해 Envoy의 액세스 로그를 전송해야 하는 서비스의 주소를 명시
envoyMetricService: gRPC를 통해 Envoy의 매트릭을 전송해야 하는 서비스의 주소를 명시
enableEnvoyAccessLogService: Envoy의 gRPC 액세스 로그 서비스를 활성화하는 플래그
처음 사용할 때 개고생을 했던 이유가 바로 세 번째 'enableEnvoyAccessLogService' 플래그 때문이다.
저 플래그를 따로 true로 지정해주지 않으면,
전송 대상 서비스 주소를 지정하더라도 AccessLog를 gRPC로 전송하지 않는다.
Istio 공식 문서의 Proxy Config 부분을 확인해보자.
서비스 주소를 지정하는 필드에 대한 설명이 나타난 부분이다.
그러면 enableEnvoyAccessLogService를 찾아보자.
일단 필드 위치가 다르기 때문에 Proxy Config에 존재하지 않고, Mesh Config에 나타나 있다.
굉장히 뜬금없는 위치에 플래그 형태로 명시되어 있어 잘 보이지도 않는다.
심지어 metric은 해당 플래그가 있지도 않고, 주소 지정만 하면 gRPC로 잘 전송해줘서
AccessLog 만 수집이 안 되는 상황에 시간도 많이 뺏기고 멘탈도 나갔었다.
뒤늦게 문서를 뒤지다 해당 플래그를 발견해서 AccessLog 까지 성공적으로 수집할 수 있었다.
(최소한 AccessLog 관련 필드를 정리한 파트라도 있었으면 좋겠다)
다음에는 Envoy Proxy가 생성하고 전송해준 데이터를 어떻게 gRPC로 수집할 수 있는지 정리하겠다.
'클라우드 메모' 카테고리의 다른 글
[이스티오] Envoy Proxy와의 Stream이 끊겼을 때 (미완) (0) | 2024.11.14 |
---|---|
[이스티오] Istio Envoy Proxy의 로그 및 매트릭 가져오기 2 (1) | 2024.11.13 |
PaaS vs Serverless (0) | 2024.09.05 |
리눅스 서버 인스턴스 디스크 마운트 (0) | 2024.08.17 |
Naver Cloud Platform으로 서버 생성하기 (0) | 2023.06.23 |