Istio는 기본적으로 Envoy 프록시를 사이드카로 주입하여 서비스 간 통신을 제어한다. 이 Envoy는 트래픽을 처리하는 동안 수많은 통계 정보를 자동으로 수집해 Prometheus와 같은 모니터링 시스템으로 보낸다. 하지만 기본 설정에서는 너무 많은 메트릭이 생성되며, 그중 상당수는 실제 운영에서 활용되지 않거나, 리소스만 낭비하는 경우가 많다.
이번 실습에서는 공식 문서 Envoy Statistics 내용을 따라가며, 불필요한 Envoy 통계를 비활성화하는 방법을 실습하고 그 결과를 직접 확인해본다.
먼저, telemetry-test 네임스페이스에 배포되어 있던 sleep 앱의 Deployment를 수정하여, Envoy 프록시에 메트릭 필터링 설정을 주입한다. 핵심은 annotations.proxy.istio.io/config 아래에 proxyMetadata를 명시하는 것이다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: sleep
namespace: telemetry-test
spec:
replicas: 1
selector:
matchLabels:
app: sleep
template:
metadata:
labels:
app: sleep
annotations:
proxy.istio.io/config: |
proxyMetadata:
ISTIO_META_DISABLE_STATS_NAME_PREFIXES: "tcp_,cluster_manager"
spec:
containers:
- name: sleep
image: curlimages/curl
command: ["/bin/sleep", "3650d"]
위 설정은 Envoy가 수집하는 메트릭 중 "tcp_", "cluster_manager"로 시작하는 항목은 수집하지 않도록 하는 설정이다.
기존에 배포된 sleep Deployment를 다음 명령으로 교체한다:
kubectl replace -f sleep-patched.yaml --force
Istio가 내장한 Prometheus에 접속하여, 관련 메트릭이 더 이상 수집되지 않는 것을 확인할 수 있다.
kubectl port-forward -n istio-system svc/prometheus 9090:9090
이후 브라우저에서 http://localhost:9090에 접속한 후, 다음과 같은 쿼리를 입력해본다:
tcp_sent_bytes_total
cluster_manager_clusters
이러한 메트릭이 더 이상 검색되지 않으면, 설정이 제대로 적용된 것이다.
이번 실습을 통해 다음과 같은 사실을 확인할 수 있었다:
annotations 필드와 ISTIO_META_DISABLE_STATS_NAME_PREFIXES 환경변수를 통해 쉽게 수행할 수 있다.이러한 커스터마이징은 대규모 클러스터 운영 시 Prometheus의 저장소 사용량 절감, 모니터링 시스템의 성능 향상, 의미 있는 데이터 중심의 운영에 큰 도움이 된다.