관측 가능성

서비스 메시를 사용하면 서비스를 오가는 트래픽을 관찰할 수 있으므로 서비스 자체의 코드 변경 없이 더욱 풍부한 모니터링과 디버깅이 가능합니다. Traffic Director가 사용하는 사이드카 프록시 아키텍처에서 프록시는 요청을 처리하고 필요한 원격 분석 정보를 제공하는 구성요소입니다. 원격 분석 정보는 데이터 분석, 알림, 문제 해결과 같은 추가 사용을 위해 중앙의 한 위치에 수집되고 저장되어야 합니다.

이 가이드에서는 Envoy 프록시의 추적로깅을 생성하는 방법을 보여줍니다. 이 가이드에서는 Cloud TraceCloud Logging으로 정보를 내보내는 방법도 설명합니다.

데모 설정

이 가이드에서는 다음 구성을 사용하여 추적 및 로깅을 보여줍니다.

  • HTTP 포트에서 수신 대기하고 요청을 제공한 VM의 호스트 이름을 반환하는 단일 애플리케이션. 다이어그램에서 이 애플리케이션은 오른쪽 상단에 있으며 HTTP 서비스(10.10.10.10:80) 라벨이 붙어 있습니다. 하나 이상의 VM에서 이 서비스를 제공할 수 있습니다.
  • 이 서비스의 소비자를 실행하는 단일 Compute Engine VM. 다이어그램에서 라벨이 데모 Compute Engine VM으로 표시되어 있습니다.
  • Traffic Director가 설치하고 구성하는 Envoy 사이드카 프록시. 다이어그램에서 라벨이 Envoy로 표시되어 있습니다.
  • 회색 박스에 표시된 서비스 소비자 애플리케이션. 10.10.10.10:80에서 실행되는 HTTP 서비스의 소비자입니다.
Envoy용 Stackdriver Logging 및 Monitoring 데모 애플리케이션(확대하려면 클릭)
Envoy용 Stackdriver Logging 및 Monitoring 데모 애플리케이션(확대하려면 클릭)
  1. Traffic Director는 10.10.10.10:80 서비스의 트래픽 부하를 분산하고, 이 서비스에 대해 실행된 각 요청의 액세스 로그 정보를 저장하고, 서비스의 추적 정보를 생성하도록 Envoy 프록시를 구성합니다.
  2. 소비자가 10.10.10.10에 요청을 보내면 사이드카 프록시는 요청을 올바른 대상으로 라우팅합니다.
  3. 사이드카 프록시는 필요한 원격 분석 정보도 생성합니다.
    1. 요청에 대한 추가 정보가 있는 로컬 디스크의 액세스 로그에 항목을 추가합니다.
    2. trace 항목을 생성하고 OpenCensus Envoy 추적을 사용하여 Trace로 전송합니다.
  4. 로깅 에이전트는 이 데이터를 Cloud Logging API로 내보내므로 Cloud Logging 인터페이스에서 데이터를 사용할 수 있습니다.

기본 요건

다음을 확인하세요.

  1. Traffic Director 설정 준비에 설명된 대로 Traffic Director API가 사용 설정되어 있고 다른 기본 요건을 충족합니다.
  2. Cloud Trace API가 사용 설정되어 있습니다.
  3. Compute Engine VM이 사용하는 서비스 계정에 Cloud Trace 에이전트 역할이 구성되어 있습니다. 자세한 내용은 Trace 액세스 제어 페이지를 참조하세요.
  4. Compute Engine VM이 사용하는 서비스 계정에 로그 작성자 역할이 구성되어 있습니다. 자세한 내용은 Logging 액세스 제어 페이지를 참조하세요.
  5. 방화벽 규칙에서 이 설정의 일부로 구성된 VM에 대한 트래픽을 허용합니다.

데모 서비스 및 Traffic Director 설정

이 가이드에서는 여러 셸 스크립트를 사용하여 데모 서비스를 구성하는 데 필요한 단계를 수행합니다. 스크립트를 검토하여 수행하는 특정 단계를 이해합니다.

  1. 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 템플릿과 이 템플릿을 사용하는 관리형 인스턴스 그룹을 만듭니다. 이 스크립트는 자동 확장을 사용 설정하지 않고 단일 인스턴스를 실행합니다.

  2. Traffic Director를 사용하여 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 스크립트는 VM으로 Compute Engine용 Traffic Director 설정에 설명된 대로 Traffic Director 관리형 서비스에 필요한 매개변수를 구성합니다.

  3. 사이드카 프록시가 VM에 설치되고 구성되면 HTTP 서비스의 소비자를 실행하는 Compute Engine VM을 시작합니다. 아래 명령어에서 gcp_project_id 변수를 Trace 정보를 전송할 프로젝트 ID로 바꿉니다. 이는 일반적으로 VM이 속한 프로젝트와 동일한 프로젝트입니다.

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_client.sh
    chmod 755 setup_demo_client.sh && ./setup_demo_client.sh my_gcp_project_id
    

    setup_demo_client.sh 스크립트는 Traffic Director를 사용하도록 사전 구성된 Envoy 프록시가 있는 Compute Engine VM을 만듭니다. 이는 VM으로 Compute Engine용 Traffic Director 설정에 설명된 구성과 유사합니다.

다음 추가 구성 설정에서는 추적 및 로깅을 사용합니다.

  • TRAFFICDIRECTOR_ACCESS_LOG_PATHTRAFFICDIRECTOR_ENABLE_TRACING 부트스트랩 노드 메타데이터 변수는 사이드카 프록시의 추가 속성 구성에 설명된 대로 로깅 및 추적을 사용 설정합니다.
  • OpenCensus를 사용하여 Trace에 trace 정보를 내보낼 수 있는 정적 부트스트랩 구성입니다.

참고: Envoy 런타임 구성을 통해 추적 매개변수를 추가하고 수정할 수 있습니다.

이러한 스크립트를 실행한 후 td-observability-demo-client VM에 로그인하고 10.10.10.10에서 사용 가능한 HTTP 서비스에 액세스할 수 있습니다.

curl http://10.10.10.10

이 시점에서 Envoy는 액세스 로그 및 추적 정보를 생성합니다. 다음 섹션에서는 로그 및 추적 정보를 내보내는 방법을 설명합니다.

Cloud Trace로 추적기 내보내기 설정

setup-demo-client.sh 스크립트를 실행할 때 만든 Envoy 부트스트랩 구성으로 추적 정보를 생성할 수 있습니다. 다른 모든 구성은 선택사항입니다. 추가 매개변수를 구성하려면 OpenCensus Envoy 구성 페이지를 참조하고 Envoy 부트스트랩 구성의 추적 옵션을 수정합니다.

데모 서버(curl 10.10.10.10)에 샘플 요청을 전송한 후 Google Cloud Console에서 Trace 인터페이스(Trace > Trace 목록)로 이동합니다. 발급한 요청에 해당하는 trace 레코드가 표시됩니다.

Trace 사용 방법에 대한 자세한 내용은 관련 문서를 참조하세요.

Logging으로 액세스 로그 내보내기 설정

이 단계에서 Envoy는 액세스 로그 정보를 실행 중인 VM의 로컬 디스크에 기록해야 합니다. 이러한 레코드를 Logging으로 내보내려면 Logging 에이전트를 로컬로 설치해야 합니다. 이를 위해서는 Logging 에이전트를 설치하고 구성해야 합니다.

Logging 에이전트 설치

로깅 정보를 내보낼 VM에 Logging 에이전트를 설치합니다. 이 구성 예시에서 VM은 td-observability-demo-vm입니다.

curl -sSO https://dl.google.com/cloudagents/install-logging-agent.sh
sudo bash install-logging-agent.sh

Logging 에이전트 설치에 대한 자세한 내용은 에이전트 설치 가이드를 참조하세요.

Logging 에이전트 구성

Envoy 로그를 구조화되지 않은 텍스트 또는 구조화된 텍스트로 내보낼 수 있습니다.

Envoy 로그를 구조화되지 않은 텍스트로 내보내기

이 옵션은 액세스 로그의 로그 레코드를 Cloud Logging에 원시 텍스트로 내보냅니다. 액세스 로그의 각 항목을 Logging에 단일 항목으로 내보냅니다. 이 구성은 Logging 에이전트의 현재 버전과 함께 배포된 파서를 사용하므로 설치가 더 쉽지만, 이 옵션을 사용하여 원시 텍스트 로그 항목을 필터링하고 처리하기가 더 어렵습니다.

  1. 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
    
  2. 에이전트를 다시 시작합니다. 에이전트가 시작될 때 변경사항이 적용됩니다.

    sudo service google-fluentd restart
    

Envoy 로그를 구조화된 형식으로 내보내기

  1. GitHub에서 Envoy 액세스 로그 파서를 설치합니다.

    sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
    
  2. 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
    
  3. 에이전트를 다시 시작합니다. 에이전트가 시작될 때 변경사항이 적용됩니다.

    sudo service google-fluentd restart
    

Logging 에이전트 구성에 대한 자세한 내용은 에이전트 구성을 참조하세요.

확인

  1. 사이드카 프록시 VM에서 데모 서비스에 대한 요청을 생성합니다. 이렇게 하면 새로운 로컬 로그 레코드가 생성됩니다. 예를 들어 curl 10.10.10.10을 실행할 수 있습니다.
  2. Cloud Console에서 Logging > 로그 뷰어로 이동합니다. 드롭다운 메뉴에서 envoy-access 로그 유형을 선택합니다. 이전에 선택한 구성 유형에 따라 가장 최근 요청에 대한 로그 항목이 구조화되지 않았거나 구조화된 형식으로 표시됩니다.

문제 해결

구성이 완료되었지만 trace 또는 로깅 항목을 사용할 수 없는 경우 다음을 확인합니다.

  1. Compute Engine VM의 서비스 계정에는 기본 요건에 따라 필요한 Trace 및 Logging IAM 권한이 있습니다. Trace IAM 권한에 대한 자세한 내용은 액세스 제어를 참조하세요. Logging 권한에 대한 자세한 내용은 액세스 제어를 참조하세요.
  2. 로깅의 경우: /var/log/google-fluentd/google-fluentd.log에 오류가 없는지 확인합니다.
  3. 로깅의 경우: 요청 실행 시 새 항목이 로컬 액세스 로그 파일에 표시되는지 확인합니다.