Envoy의 관측 가능성
이 문서에서는 Envoy 프록시의 추적 및 로깅을 생성하는 방법을 보여줍니다. 또한 Cloud Trace 및 Cloud Logging으로 정보를 내보내는 방법도 설명합니다.
서비스 메시를 사용하면 서비스를 오가는 트래픽을 관찰할 수 있으므로 서비스 자체의 코드 변경 없이 더욱 풍부한 모니터링과 디버깅이 가능합니다. Cloud Service Mesh가 사용하는 사이드카 프록시 아키텍처에서 프록시는 요청을 처리하고 필요한 원격 분석 정보를 제공하는 구성요소입니다. 원격 분석 정보는 데이터 분석, 알림, 문제 해결과 같은 추가 사용을 위해 중앙의 한 위치에 수집되고 저장되어야 합니다.
데모 설정
이 문서에서는 다음 구성을 사용하여 추적 및 로깅을 보여줍니다.
- HTTP 포트에서 수신 대기하고 요청을 제공한 가상 머신(VM) 인스턴스의 호스트 이름을 반환하는 단일 애플리케이션. 다이어그램에서 이 애플리케이션은 오른쪽 상단에 있으며 HTTP 서비스(10.10.10.10:80) 라벨이 붙어 있습니다. 하나 이상의 VM에서 이 서비스를 제공할 수 있습니다.
- 이 서비스의 소비자를 실행하는 단일 Compute Engine VM. 다이어그램에서 라벨이 데모 Compute Engine VM으로 표시되어 있습니다.
- Cloud Service Mesh가 설치하고 구성하는 Envoy 사이드카 프록시. 다이어그램에서 라벨이 envoy로 표시되어 있습니다.
- 왼쪽 상자에 표시된 서비스 소비자 애플리케이션.
10.10.10.10:80
에서 실행되는 HTTP 서비스의 소비자입니다.
다음 단계는 다이어그램의 번호가 지정된 라벨에 해당합니다.
Cloud Service Mesh는 다음을 수행하도록 Envoy 프록시를 구성합니다.
10.10.10.10:80
서비스에 대한 트래픽을 부하 분산합니다.- 이 서비스에 대해 실행된 각 요청의 액세스 로그 정보를 저장합니다.
- 서비스의 추적 정보를 생성합니다.
소비자가
10.10.10.10
에 요청을 보내면 사이드카 프록시는 요청을 올바른 대상으로 라우팅합니다.사이드카 프록시는 필요한 원격 분석 정보도 생성합니다.
- 요청에 대한 추가 정보가 있는 로컬 디스크의 액세스 로그에 항목을 추가합니다.
- trace 항목을 생성하고 OpenCensus Envoy 추적을 사용하여 Trace로 전송합니다.
Logging 에이전트는 이 데이터를 Cloud Logging API로 내보내므로 Cloud Logging 인터페이스에서 데이터를 사용할 수 있습니다.
기본 요건
설정 단계를 완료하기 전에 다음을 완료했는지 확인합니다.
- VM 및 프록시리스 워크로드로 설정 준비에 설명된 대로 Traffic Director API가 사용 설정되어 있고 다른 기본 요건을 충족합니다.
- Cloud Trace API가 사용 설정되어 있습니다.
- Compute Engine VM이 사용하는 서비스 계정에는 다음과 같은 Identity and Access Management(IAM) 역할이 구성되어 있습니다.
- Cloud Trace 에이전트 역할(
roles/cloudtrace.agent
) - 로그 작성자 역할(
roles/logging.logWriter
)
- Cloud Trace 에이전트 역할(
- 방화벽 규칙에서 이 설정의 일부로 구성된 VM에 대한 트래픽을 허용합니다.
데모 서비스 및 Cloud Service Mesh 설정
이 문서에서는 여러 셸 스크립트를 사용하여 데모 서비스를 구성하는 데 필요한 단계를 수행합니다. 스크립트를 검토하여 수행하는 특정 단계를 이해합니다.
Compute Engine VM을 시작하고 VM에서 HTTP 서비스를 구성합니다.
curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_service.sh chmod 755 setup_demo_service.sh && ./setup_demo_service.sh
setup_demo_service.sh
스크립트는 VM이 시작될 때 apache2를 실행하는 VM 템플릿과 이 템플릿을 사용하는 관리형 인스턴스 그룹을 만듭니다. 이 스크립트는 자동 확장을 사용 설정하지 않고 단일 인스턴스를 실행합니다.Cloud Service Mesh를 사용하여
10.10.10.10
서비스의 라우팅을 구성합니다.curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_trafficdirector.sh chmod 755 setup_demo_trafficdirector.sh && ./setup_demo_trafficdirector.sh
setup_demo_trafficdirector.sh
스크립트는 Cloud Service Mesh 관리형 서비스에 필요한 매개변수를 구성합니다.사이드카 프록시가 VM에 설치되고 구성되면 HTTP 서비스의 소비자를 실행하는 Compute Engine VM을 시작합니다. 다음 명령어에서
PROJECT_ID
를 Trace 정보를 전송할 프로젝트 ID로 바꿉니다. 이는 일반적으로 VM이 속한 Google Cloud 프로젝트와 동일합니다.curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_client.sh chmod 755 setup_demo_client.sh && ./setup_demo_client.sh PROJECT_ID
setup_demo_client.sh
스크립트는 Cloud Service Mesh를 사용하도록 사전 구성된 Envoy 프록시가 있는 Compute Engine VM을 만듭니다.
다음 추가 구성 설정에서는 추적 및 로깅을 사용합니다.
TRAFFICDIRECTOR_ACCESS_LOG_PATH
및TRAFFICDIRECTOR_ENABLE_TRACING
부트스트랩 노드 메타데이터 변수는 Cloud Service Mesh의 Envoy 부트스트랩 속성 구성에 설명된 대로 로깅 및 추적을 사용 설정합니다.- 정적 부트스트랩 구성을 사용하면 OpenCensus를 사용하여 trace 정보를 Trace로 내보낼 수 있습니다.
이러한 스크립트를 실행한 후 td-observability-demo-client
VM에 로그인하고 10.10.10.10
에서 사용 가능한 HTTP 서비스에 액세스할 수 있습니다.
curl http://10.10.10.10
이 시점에서 Envoy는 액세스 로깅 및 추적 정보를 생성합니다. 다음 섹션에서는 로그 및 추적 정보를 내보내는 방법을 설명합니다.
Cloud Trace로 trace 내보내기 설정
setup-demo-client.sh
스크립트를 실행할 때 만든 Envoy 부트스트랩 구성으로 추적 정보를 생성할 수 있습니다.
다른 모든 구성은 선택사항입니다. 추가 매개변수를 구성하려면 OpenCensus Envoy 구성 페이지를 참조하고 Envoy 부트스트랩 구성의 추적 옵션을 수정합니다.
데모 서버(curl
10.10.10.10
)에 샘플 요청을 전송한 후 Google Cloud 콘솔에서 Trace 인터페이스(Trace > Trace 목록)로 이동합니다.
발급한 요청에 해당하는 trace 레코드를 확인할 수 있습니다.
Trace 사용 방법에 대한 자세한 내용은 Cloud Trace 문서를 참조하세요.
Logging으로 액세스 로그 내보내기 설정
이 단계에서 Envoy는 액세스 로그 정보를 실행 중인 VM의 로컬 디스크에 기록해야 합니다. 이러한 레코드를 Logging으로 내보내려면 Logging 에이전트를 로컬로 설치해야 합니다. 이를 위해서는 Logging 에이전트를 설치하고 구성해야 합니다.
Logging 에이전트를 설치합니다.
로깅 정보를 내보낼 VM에 Logging 에이전트를 설치합니다. 이 구성 예시에서 VM은 td-observability-demo-vm
입니다.
curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh sudo bash add-logging-agent-repo.sh --also-install
자세한 내용은 단일 VM에 Cloud Logging 에이전트 설치를 참조하세요.
Logging 에이전트 구성
Envoy 로그를 구조화되지 않은 텍스트 또는 구조화된 텍스트로 내보낼 수 있습니다.
Envoy 로그를 구조화되지 않은 텍스트로 내보내기
이 옵션은 액세스 로그의 로그 레코드를 Cloud Logging에 원시 텍스트로 내보냅니다. 액세스 로그의 각 항목을 Logging에 단일 항목으로 내보냅니다. 이 구성은 Logging 에이전트의 현재 버전과 함께 배포된 파서를 사용하므로 설치가 더 쉽습니다. 하지만 옵션을 사용하여 원시 텍스트 로그 항목을 필터링하고 처리하기가 더 어렵습니다.
Envoy 액세스 로그의 구조화되지 않은 내보내기 구성 파일을 다운로드하고 설치합니다.
curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_unstructured.conf sudo cp envoy_access_fluentd_unstructured.conf /etc/google-fluentd/config.d/envoy_access.conf
에이전트를 다시 시작합니다. 에이전트가 시작될 때 변경사항이 적용됩니다.
sudo service google-fluentd restart
Envoy 로그를 구조화된 텍스트로 내보내기
GitHub에서 Envoy 액세스 로그 파서를 설치합니다.
sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
Envoy 액세스 로그를 구조화된 형식으로 내보내기 위한 구성 파일을 다운로드하고 설치합니다.
curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_structured.conf sudo cp envoy_access_fluentd_structured.conf /etc/google-fluentd/config.d/envoy_access.conf
에이전트를 다시 시작합니다. 에이전트가 시작될 때 변경사항이 적용됩니다.
sudo service google-fluentd restart
자세한 내용은 Logging 에이전트 구성을 참조하세요.
구성 확인
- 사이드카 프록시 VM에서 데모 서비스에 대한 요청을 생성합니다.
이렇게 하면 새로운 로컬 로그 레코드가 생성됩니다. 예를 들어
curl 10.10.10.10
을 실행할 수 있습니다. - Google Cloud 콘솔에서 Logging > 로그 탐색기로 이동합니다. 드롭다운 메뉴에서 envoy-access 로그 유형을 선택합니다. 이전에 선택한 구성 유형에 따라 가장 최근 요청에 대한 로그 항목이 구조화되지 않았거나 구조화된 형식으로 표시됩니다.
문제 해결
Envoy의 관측 가능성과 관련된 다양한 문제를 해결하는 방법에 관한 자세한 내용은 다음 섹션을 참조하세요.
여러 프로젝트 간 trace 구성
여러 프로젝트에 배포된 Envoy의 요청을 trace하려면 다음 사항에 유의하세요.
- 각 Envoy가 실행 중인 프로젝트의 사용자 인증 정보로 구성되어 있어야 합니다.
- 각 Envoy는 실행 중인 사용자 인증 정보에 해당하는 프로젝트로 trace 데이터를 전송합니다.
- 요청 시
X-Cloud-Trace-Context
HTTP 헤더 값이 애플리케이션에서 보존되면 프로젝트 간 요청의 trace 스팬을 확인할 수 있습니다.
프록시리스 gRPC 애플리케이션의 Trace 호환성
Envoy의 OpenCensus 추적기 구성은 프록시리스 gRPC 애플리케이션에서 내보낸 trace 및 Envoy 프록시가 서비스 메시 내에서 완전히 호환되도록 만듭니다. 호환성을 위해 Envoy 부트스트랩은 다음과 같이 해당 OpenCensusConfig
에 GRPC_TRACE_BIN
trace 형식을 포함하도록 trace 컨텍스트를 구성해야 합니다.
tracing: http: name: envoy.tracers.opencensus typed_config: "@type": type.googleapis.com/envoy.config.trace.v2.OpenCensusConfig stackdriver_exporter_enabled: "true" stackdriver_project_id: "PROJECT_ID" incoming_trace_context: ["CLOUD_TRACE_CONTEXT", "GRPC_TRACE_BIN"] outgoing_trace_context: ["CLOUD_TRACE_CONTEXT", "GRPC_TRACE_BIN"]
구성이 완료되었지만 trace 또는 로깅 항목을 사용할 수 없는 경우 다음을 확인합니다.
- Compute Engine VM의 서비스 계정에는 기본 요건에 따라 필요한 Trace 및 Logging IAM 권한이 있습니다. Trace IAM 권한에 대한 자세한 내용은 액세스 제어를 참조하세요. Logging 권한에 대한 자세한 내용은 액세스 제어를 참조하세요.
- 로깅의 경우:
/var/log/google-fluentd/google-fluentd.log
에 오류가 없는지 확인합니다. - 로깅의 경우: 요청 실행 시 새 항목이 로컬 액세스 로그 파일에 표시되는지 확인합니다.
다음 단계
- 관련 정보는 프록시리스 gRPC 애플리케이션의 관측 가능성 참조하기
- 일반적인 Cloud Service Mesh 문제 해결 정보는 Envoy를 사용하는 배포 문제 해결 참조하기