마이크로서비스 관측 가능성 설정

이 문서에는 마이크로서비스 관측 가능성 플러그인을 설정하고 gRPC 애플리케이션을 계측하고 Cloud Monitoring, Cloud Logging, Cloud Trace에서 정보를 얻는 데 필요한 정보가 포함되어 있습니다.

시작하기 전에

마이크로서비스 관측 가능성은 마이크로서비스 API를 사용 설정하여 Cloud Monitoring, Cloud Logging, Cloud Trace에 액세스할 수 있는 권한이 부여된 모든 배포에서 작동합니다. 이 가이드에서는 Compute Engine 예시를 사용하여 마이크로서비스 관측 가능성 설정에 대한 예시를 제공합니다.

개략적으로 다음을 수행합니다.

  1. 서비스 개발자는 마이크로서비스 관측 가능성 플러그인을 선택하고 제어합니다.
  2. 서비스 운영자는 여러 방법으로 수집된 데이터를 소비합니다.

gRPC 저장소(C++, Go, Java)에는 마이크로서비스 관측 가능성을 보여주는 예시가 포함되어 있습니다.

관측 가능성을 구성하기 전에 다음 태스크를 완료합니다.

  1. 마이크로서비스 관측 가능성 개요를 참조하세요.
  2. 기존 프로젝트가 있는지 확인하거나 새 프로젝트를 만듭니다.
  3. 기존 서비스 계정이 있는지 확인하거나 새 항목을 만듭니다.
  4. 지원되는 두 가지 환경 변수에 대해 알아보고 사용할 항목을 결정하고 환경 변수에 필요한 값을 결정합니다.
  5. 마이크로서비스 API를 사용 설정합니다.

구성 환경 변수 선택

관측 가능성 플러그인에 대한 애플리케이션 계측에 설명된 대로 마이크로서비스 관측 가능성 플러그인을 선택하는 경우 환경 변수를 사용하여 구성 정보를 제공해야 합니다. 기본적으로 관측 가능성 기능은 사용 설정되지 않습니다. gRPC 애플리케이션 또는 워크로드가 실행되는 VM 또는 컨테이너에서 환경 변수를 설정합니다.

환경 변수는 다음과 같습니다.

  • GRPC_GCP_OBSERVABILITY_CONFIG_FILE: 값은 JSON 인코딩 구성 파일을 가리키는 경로입니다.
  • GRPC_GCP_OBSERVABILITY_CONFIG: 값은 JSON에 인코딩된 구성의 본문입니다.

두 환경 변수가 모두 설정되었으면 GRPC_GCP_OBSERVABILITY_CONFIG_FILEGRPC_GCP_OBSERVABILITY_CONFIG보다 우선합니다.

구성을 적용하려면 gRPC 애플리케이션을 다시 시작해야 합니다. Google Cloud 콘솔에서는 환경 변수의 값을 설정하거나 볼 수 없습니다.

구성에서 로깅, 추적, 측정항목 데이터가 업로드되는 대상 프로젝트를 설정할 수 있습니다. project_id 필드에 프로젝트 ID를 설정합니다.

구성 데이터의 정보를 사용하여 선택한 환경 변수의 값을 설정합니다.

마이크로서비스 API 사용 설정

Google Cloud CLI 또는 Google Cloud 콘솔을 사용하여 프로젝트에서 마이크로서비스 API를 사용 설정할 수 있습니다. Microservice API를 사용 설정하면 Cloud Logging API, Cloud Monitoring API, Cloud Trace API가 사용 설정됩니다.

API를 사용 설정하려면 다음 안내를 따르세요.

gcloud services enable microservices.googleapis.com

서비스 계정 권한 설정

기본값이 아닌 서비스 계정을 사용하는 경우 서비스 계정에 필요한 권한을 부여합니다. 다음 값을 설정합니다.

  • PROJECT_ID: 프로젝트 ID를 대체합니다.
  • SERVICE_ACCOUNT_NAME: 프로젝트의 서비스 계정 이름을 대체합니다.
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/logging.logWriter
gcloud projects add-iam-policy-binding PROJECT_ID> \
  --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/monitoring.metricWriter
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/cloudtrace.agent

관측 가능성 플러그인에 대한 애플리케이션 계측

마이크로서비스 관측 가능성 플러그인을 사용할 수 있도록 애플리케이션을 계측하려면 C++, Java, Go에 대한 다음 안내를 따르세요.

C++

gRPC C++ v1.54부터 마이크로서비스 관측 가능성과 함께 C++를 사용할 수 있습니다. 저장소 예시는 GitHub에 있습니다.

빌드 변경사항

관측 가능성 지원은 Bazel 빌드 시스템을 통해서만 제공됩니다. 대상 grpcpp_gcp_observability를 종속 항목으로 추가합니다.

필수 코드 변경사항

마이크로서비스 관측 가능성을 선택하려면 추가 종속 항목이 필요하고(관측 가능성 모듈) 기존 gRPC 클라이언트, 서버 또는 둘 다에 대해 다음 코드를 변경해야 합니다.

#include <grpcpp/ext/gcp_observability.h>

int main(int argc, char** argv) {
  auto observability = grpc::GcpObservability::Init();
  assert(observability.ok());
  …
  // Observability data flushed when object goes out of scope
}

채널, 서버, 사용자 인증 정보를 포함하여 gRPC 작업 전에 다음을 호출합니다.

grpc::GcpObservability::Init();

그러면 저장해야 하는 absl::StatusOr<GcpObservability>가 반환됩니다. 상태에 따라 관측 가능성이 성공적으로 초기화되었는지 여부를 확인할 수 있습니다. 함께 제공되는 GcpObservability 객체는 관측 가능성의 전체 기간을 제어하고, 범위를 벗어날 때 관측 가능성 데이터를 자동으로 닫고 플러시합니다.

Go

마이크로서비스 관측 가능성 플러그인은 gRPC Go 버전 v1.54.0 이상에 대해 지원됩니다. 저장소 예시는 GitHub에 있습니다.

Go 모듈의 경우 마이크로서비스 관측 가능성을 선택하려면 관측 가능성 모듈 및 다음 코드가 필요합니다.

import "google.golang.org/grpc/gcp/observability"

func main() {
       ctx, cancel := context.WithTimeout(context.Background(), time.Second)
       defer cancel()
       if err := observability.Start(ctx); err != nil {
              log.Warning("Unable to start gRPC observability:", err)
       }
       defer observability.End()
       …
}

observability.Start 호출은 환경 변수에서 구성을 파싱하고, 그에 따라 내보내기 도구를 만들고, 호출 후 생성되는 클라이언트 연결 및 서버에 대해 수집 논리를 삽입합니다. 지연된 observability.End 호출은 리소스를 삭제하고 애플리케이션이 종료되기 전 버퍼링된 데이터가 비워지도록 합니다.

애플리케이션 코드가 업데이트된 후 다음 명령어를 실행하여 go.mod 파일을 업데이트합니다.

go mod tidy

Java

Java 애플리케이션에 마이크로서비스 관측 가능성을 사용하려면 grpc-gcp-observability 아티팩트를 포함하도록 빌드를 수정합니다. gRPC 버전 1.54.1 이상을 사용합니다.

Gradle 및 Maven 빌드 도구 섹션의 빌드 스니펫에서 grpcVersion은 값 1.54.1로 설정됩니다.

저장소 예시는 GitHub에 있습니다.

필요한 Java 코드 변경사항

마이크로서비스 관측 가능성에 대해 자바 애플리케이션을 성공적으로 계측하기 위해서는 다음 코드를 main()에 추가합니다.

...
import io.grpc.gcp.observability.GcpObservability;
...

// Main application class
...

public static void main(String[] args) {
...
   // call GcpObservability.grpcInit() to initialize & get observability
   GcpObservability observability = GcpObservability.grpcInit();

...
   // call close() on the observability instance to shutdown observability
   observability.close();
...
}

모든 gRPC 채널 또는 서비스가 생성되기 전에 GcpObservability.grpcInit()를 호출해야 합니다. GcpObservability.grpcInit() 함수는 마이크로서비스 관측 가능성 구성을 읽고 이를 사용해서 생성된 각 채널 및 서버에서 로깅, 측정항목, trace 기능에 필요한 전역 인터셉터 및 추적기를 설정합니다. GcpObservability.grpcInit()는 스레드에 안전하며 정확히 한 번 호출되어야 합니다. 나중에 close()를 호출하기 위해 저장해야 하는 GcpObservability의 인스턴스를 반환합니다.

GcpObservability.close()는 리소스를 할당 해제합니다. 이후에 생성되는 채널 또는 서버는 로깅을 수행하지 않습니다.

GcpObservabilitytry-with-resource를 다음과 같이 사용할 경우 자동으로 종료되는 java.lang.AutoCloseable을 구현합니다.

...
import io.grpc.gcp.observability.GcpObservability;
...

// Main application class
...

public static void main(String[] args) {
...
   // call GcpObservability.grpcInit() to initialize & get observability
   try (GcpObservability observability = GcpObservability.grpcInit()) {

...
   } // observability.close() called implicitly
...
}

Gradle 빌드 도구 사용

Gradle 빌드 도구를 사용하는 경우 다음을 포함합니다.

def grpcVersion = '1.54.1'

...

dependencies {
...
   implementation "io.grpc:grpc-gcp-observability:${grpcVersion}"
...
}

Maven 빌드 도구 사용(pom.xml)

Maven 빌드 도구를 사용하는 경우 다음을 포함합니다.

<properties>
...
  <grpc.version>1.54.1</grpc.version>
...
</properties>

...

<dependencies>
...
 <dependency>
   <groupId>io.grpc</groupId>
   <artifactId>grpc-gcp-observability</artifactId>
   <version>${grpc.version}</version>
 </dependency>
...
</dependencies>

측정항목, Tracing, 로깅 데이터 수집 사용 설정

다음 섹션에는 구성에서 데이터 수집을 사용 설정하기 위한 안내와 환경 변수의 구성 정보를 보여주는 예시가 포함되어 있습니다.

측정항목 사용 설정

측정항목을 사용 설정하려면 구성에 cloud_monitoring 객체를 추가하고 값을 {}로 설정합니다.

측정항목에 대한 자세한 내용은 측정항목 정의를 참조하세요.

추적 사용 설정

서비스 간 추적을 사용 설정하려면 업스트림에서 수신된(또는 그 자체로 시작된) trace 컨텍스트를 다운스트림으로 전파하는 것이 서비스에서 지원되어야 합니다.

추적을 사용 설정하려면 다음을 수행합니다.

  1. 구성에 cloud_trace 객체를 추가합니다.
  2. cloud_trace.sampling_rate를 새로운 추적을 시작하기 위해 애플리케이션이 관측해야 하는 확률로 설정합니다.
    • 예를 들어 1.0이면 모든 RPC를 추적합니다.
    • 0.0이면 새 trace를 시작하지 않습니다.
    • 0.5면 RPC 중 50%가 무작위로 추적됩니다.

양수 샘플링이 업스트림으로 결정되면 샘플링 레이트 설정에 관계없이 서비스 업로드 스팬이 확장됩니다.

Tracing에 대한 자세한 내용은 Trace 정의를 참조하세요.

로깅 사용 설정

로깅을 사용 설정하려면 다음을 수행합니다.

  1. 구성에 cloud_logging 객체를 추가합니다.
  2. client_rpc_eventsserver_rpc_events 중 하나 또는 모두에 패턴을 추가하여 전송 수준 이벤트 로깅을 생성할 서비스 또는 메서드 집합과 헤더 및 메시지에 대해 로깅할 바이트 수를 지정합니다.

로깅에 대한 자세한 내용은 로그 레코드 정의를 참조하세요.

환경 변수 예시

다음 예시에서는 환경 변수 GRPC_GCP_OBSERVABILITY_CONFIG에 관측 가능성 변수를 설정합니다.

export GRPC_GCP_OBSERVABILITY_CONFIG='{
     "project_id": "your-project-here",
     "cloud_logging": {
         "client_rpc_events": [
         {
             "methods": ["google.pubsub.v1.Subscriber/Acknowledge", "google.pubsub.v1.Publisher/CreateTopic"],
             "exclude": true
         },
         {
             "methods": ["google.pubsub.v1.Subscriber/*", "google.pubsub.v1.Publisher/*"],
             "max_metadata_bytes": 4096,
             "max_message_bytes": 4096
         }],
         "server_rpc_events": [{
             "methods": ["*"],
             "max_metadata_bytes": 4096,
             "max_message_bytes": 4096
         }],
     },
     "cloud_monitoring": {},
     "cloud_trace": {
         "sampling_rate": 1.00
     },
     "labels": {
         "SOURCE_VERSION": "J2e1Cf",
         "SERVICE_NAME": "payment-service-1Cf",
         "DATA_CENTER": "us-west1-a"
     }
}'

관측 가능성 예시 만들기

해당 안내에 따라 Compute Engine VM 인스턴스를 만들고 연결한 후 관측 가능성 예시를 설정합니다.

  1. VM 인스턴스를 만듭니다.

    gcloud compute instances create grpc-observability-vm \
      --image-family=debian-11 \
      --image-project=debian-cloud \
      --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    
  2. VM 인스턴스에 연결합니다.

    gcloud compute ssh --project=PROJECT_ID grpc-observability-vm
    

gRPC 애플리케이션 언어에 따라 Java, C++, Go 안내를 따릅니다.

Java

  1. VM 인스턴스에 연결한 후 Java 8 이상이 설치되었는지 확인합니다.

    sudo apt update
    sudo apt upgrade
    sudo apt install git
    sudo apt-get install -y openjdk-11-jdk-headless
    
  2. grpc-java 저장소를 클론합니다.

    export EXAMPLES_VERSION=v1.54.1
    git clone -b $EXAMPLES_VERSION --single-branch --depth=1 \
    https://github.com/grpc/grpc-java.git
    
  3. 예시 디렉터리로 이동합니다.

    cd grpc-java/examples/example-gcp-observability
    
  4. 예시 디렉터리에서 리드미 파일을 열고 파일 안내를 따릅니다.

  5. 다른 터미널 창을 열라는 안내가 있으면 다음 명령어를 실행합니다.

    gcloud compute ssh --project=PROJECT_ID grpc-observability-vm
    

C++

  1. VM 인스턴스에 연결한 후 터미널 창에서 hello-world 서버 바이너리를 실행합니다.

    sudo apt-get update -y
    sudo apt-get install -y git build-essential clang
    git clone -b v1.54.0 https://github.com/grpc/grpc.git --depth=1
    cd grpc
    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/server_config.json"
    tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_server
    
  2. 다른 터미널 창에서 SSH를 사용하여 VM에 다시 연결한 후 hello-world 클라이언트 바이너리를 실행하는 다음 명령어를 실행합니다.

    cd grpc
    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/client_config.json"
    tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_client
    

Go

  1. Go가 설치되었는지 확인합니다.

    sudo apt-get install -y git
    sudo apt install wget
    wget https://go.dev/dl/go1.20.2.linux-amd64.tar.gz
    sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf \
    go1.20.2.linux-amd64.tar.gz
    export PATH=$PATH:/usr/local/go/bin
    
  2. gRPC-Go 예시를 클론합니다.

    git clone https://github.com/grpc/grpc-go.git
    cd grpc-go/
    git checkout -b run-observability-example
    875c97a94dca8093bf01ff2fef490fbdd576373d
    
  3. gRPC-Go 디렉터리 클론으로 이동합니다.

    cd examples/features/observability
    
  4. 서버를 실행합니다.

    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./server/serverConfig.json
    go run ./server/main.go
    
  5. 개별 터미널 창에서 다음 명령어를 실행합니다.

    export PATH=$PATH:/usr/local/go/bin
    cd grpc-go/examples/features/observability
    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./client/clientConfig.json
    go run ./client/main.go
    

trace, 측정항목, 로그 항목 보기

이 섹션의 안내에 따라 Trace, 측정항목, 로그 항목을 확인합니다.

Cloud Trace에서 Trace 보기

예시를 설정하거나 워크로드를 계측한 후에는 Google Cloud 콘솔에 최근 Trace로 나열된 gRPC 클라이언트 및 gRPC 서버에서 생성된 Trace가 표시됩니다.

마이크로서비스 계측 가능성 trace 목록
마이크로서비스 계측 가능성 trace 목록(확대하려면 클릭)

Trace 로그 보기

로깅과 Tracing을 모두 사용 설정하면 Cloud Trace 폭포식 그래프와 함께 또는 로그 탐색기에서 Trace 로그 항목을 볼 수 있습니다.

대시보드에서 측정항목 보기

마이크로서비스 관측 가능성은 측정 항목 정의에 정의된 측정항목에 대해 마이크로서비스(gRPC) 모니터링이라고 부르는 모니터링 대시보드를 제공합니다. 마이크로서비스 API가 사용 설정된 경우에만 Google Cloud 콘솔에 대시보드가 표시됩니다. Google Cloud 콘솔은 Service Usage API를 호출하여 마이크로서비스 API가 프로젝트에 사용 설정되었는지 여부를 확인합니다. 사용자에게 대시보드를 볼 수 있는 serviceusage.services.list 권한이 있어야 합니다.

마이크로서비스(gRPC) 모니터링 대시보드는 Google Cloud 대시보드이며 사용자가 이를 직접 수정할 수 없습니다. 대시보드를 맞춤설정하려면 대시보드를 커스텀 대시보드에 복사해야 합니다. 그런 후 차트 추가, 삭제, 재배열 등과 같이 커스텀 대시보드를 업데이트할 수 있습니다.

측정항목 탐색기에서 측정항목 보기

gRPC 예시를 설정하거나 워크로드를 계측한 후에는 Google Cloud 콘솔에서 gRPC 클라이언트 및 gRPC 서버로 생성된 측정항목이 표시됩니다.

측정항목을 보고 차트로 작성하려면 측정항목 탐색기를 사용할 때 측정항목 선택의 안내를 따르세요.

로그 탐색기에서 로그 항목 검사

추천 쿼리는 Google Cloud가 수집된 로그를 기준으로 쿼리 집합을 추천하는 Cloud Logging 기능입니다. 준비된 필터를 클릭하고 사용할 수 있습니다.

로그 탐색기의 추천 쿼리
로그 탐색기의 추천 쿼리 (확대하려면 클릭)

추천 쿼리와 일치하는 로그 항목이 Cloud Logging에 표시된 후 약 6분 후 새 추천 쿼리가 표시될 수 있습니다. 대부분의 경우 새 추천 쿼리가 더 빠르게 표시됩니다. 이전 15분 동안 추천과 일치하는 로그 항목이 있으면 모든 추천 쿼리가 계속 표시됩니다. 이전 15분 동안 일치하는 로그 항목이 없을 때까지 계속 추천 항목으로 표시됩니다.

맞춤설정된 쿼리를 만들 수 있습니다. 자세한 내용은 Logging 쿼리 언어 가이드를 참조하세요. 예를 들어 로그 탐색기의 쿼리 창에서 다음 코드를 사용하여 모든 gRPC 디버그 로그를 표시하도록 시도할 수 있습니다.

log_id("microservices.googleapis.com/observability/grpc")

필터링에 대해 gRPC 로그 레코드에서 모든 필드를 사용할 수 있습니다. 예시 로그 항목은 다음과 같습니다.

{
  "insertId": "17kh8vafzuruci",
  "jsonPayload": {
    "authority": "10.84.1.15:50051",
    "sequenceId": "6",
    "serviceName": "helloworld.Greeter",
    "peer": {
      "ipPort": 50051,
      "address": "10.84.1.10",
      "type": "IPV4"
    },
    "callId": "d9577780-c608-4bff-9e12-4d9cdea6b298",
    "type": "SERVER_TRAILER",
    "methodName": "SayHello",
    "payload": {},
    "logger": "CLIENT"
  },
  "resource": {
    "type": "k8s_container",
    "labels": {
      "pod_name": "grpc-client-deployment-155-6967959544-x8ndr",
      "container_name": "grpc-client-container-155",
      "cluster_name": "o11y-cluster",
      "namespace_name": "grpc-client-namespace-155",
      "location": "us-west1-b",
      "project_id": "grpc-greeter"
    }
  },
  "timestamp": "2023-04-05T23:33:41.718523Z",
  "severity": "DEBUG",
  "labels": {
    "environment": "example-client"
  },
  "logName": "projects/grpc-greeter/logs/microservices.googleapis.com%2Fobservability%2Fgrpc",
  "receiveTimestamp": "2023-04-05T23:33:42.712682457Z"
}

추천 쿼리

마이크로서비스 관측 가능성은 다음 추천 쿼리를 Cloud Logging에 제공합니다.

gRPC에 대한 헤더 또는 트레일러 로그 레코드

이 쿼리는 RPC에 대한 기본 보기를 제공하며 피어 정보 및 RPC 결과를 생성합니다.

log_id("microservices.googleapis.com/observability/grpc") AND
jsonPayload.type=("CLIENT_HEADER" OR "SERVER_TRAILER")

실패한 gRPC 호출

이 쿼리는 정상이 아닌 상태로 종료되는 RPC를 찾습니다.

log_id("microservices.googleapis.com/observability/grpc") AND
jsonPayload.type="SERVER_TRAILER" AND
jsonPayload.payload.statusCode!="OK"

취소되거나 기한을 초과한 gRPC의 로그 레코드

과도한 gRPC 취소 또는 기한 초과는 성능 손실 또는 예상치 않은 애플리케이션 동작에 대해 유용한 정보를 제공할 수 있습니다.

log_id("microservices.googleapis.com/observability/grpc") AND
((jsonPayload.type="SERVER_TRAILER" AND jsonPayload.payload.statusCode=("CANCELLED" OR "DEADLINE_EXCEEDED")) OR (jsonPayload.type="CANCEL"))

문제 해결에 로그 및 추적 사용

잘못된 동작을 나타내는 RPC 이벤트가 표시되면 이벤트에서 callid를 찾을 수 있습니다. 다음 쿼리를 사용하여 단항 또는 스트리밍 RPC 여부에 관계없이 하나의 RPC에서 발생하는 모든 이벤트를 표시합니다. 앞의 로그 항목은 예시로 사용됩니다.

log_id("microservices.googleapis.com/observability/grpc")
jsonPayload.callid="a358c7b80-3548-4bc8-a33f-b93ba1514904"

문제 범위를 확인하려면 동일한 메서드 또는 위치에 대한 모든 RPC 이벤트를 찾을 수 있습니다. 다음 쿼리는 Greeter 서비스를 예시로 사용해서 특정 RPC 메서드와 관련된 모든 디버그 로그를 보여줍니다.

log_id("microservices.googleapis.com/observability/grpc")
jsonPayload.serviceName="helloworld.Greeter"
jsonPayload.methodName="SayHello"

특정 상태 코드의 실패한 RPC를 확인하려면 상태 코드를 필터링 조건 중 하나로 추가할 수 있습니다. 다음 쿼리는 정상이 아닌 상태로 종료되는 트레일러 이벤트를 보여줍니다.

log_id("microservices.googleapis.com/observability/grpc")
jsonPayload.payload.statusCode!="OK"
쿼리 결과: 기한을 초과한 상태 코드.
쿼리 결과: 기한을 초과한 상태 코드(확대하려면 클릭)

관측 가능성 옵션

마이크로서비스 관측 가능성에는 다음과 같은 선택적인 기능이 포함됩니다.

커스텀 라벨 정의

관측 가능성 데이터에 사용자 제공 정보를 추가하는 커스텀 라벨을 정의할 수 있습니다. 커스텀 라벨은 키-값 쌍으로 구성됩니다. 각 키-값 쌍은 Tracing 데이터에 스팬 라벨로 연결되고, 측정항목 데이터에 측정항목 태그로 연결되고, 로깅 데이터에 로그 항목 라벨로 연결됩니다.

커스텀 라벨은 labels 필드의 키-값 쌍 목록으로 구성에 정의됩니다. 모든 커스텀 라벨 키와 값은 문자열 유형입니다. 이 구현은 구성을 읽고 각 키-값 쌍에 대해 개별 라벨을 만든 후 라벨을 관측 가능성 데이터에 연결합니다.

예를 들어 다음은 라벨 정의입니다.

"labels": {
    "DATACENTER": "SAN_JOSE_DC",
    "APP_ID": "24512"
  }

각 로그 항목에는 다음 추가 라벨이 포함됩니다.

{
   "DATACENTER" : "SAN_JOSE_DC"
   "APP_ID" : "24512"
}
로그 항목의 라벨 쿼리
로그 항목의 쿼리 라벨(확대하려면 클릭)
커스텀 및 리소스 라벨을 보여주는 선 차트입니다.
커스텀 및 리소스 라벨을 보여주는 선 차트(확대하려면 클릭)

페이로드 로깅 사용 설정

워크로드에 제공하는 환경 변수를 사용하여 페이로드 로깅을 사용 설정합니다. HelloWorld 메시지 및 헤더의 페이로드 로깅을 사용하도록 설정하려면 다음과 같이 gRPC 예시에서 구성 파일 gcp_observability_server_config.json 또는 gcp_observability_client_config.json의 값 또는 둘 다를 업데이트합니다.

{
   "cloud_monitoring":{
   },
   "cloud_trace":{
      "sampling_rate":1.0
   },
   "cloud_logging":{
      "client_rpc_events":[
         {
            "methods":[
               "helloworld.Greeter/*"
            ],
            "max_metadata_bytes":4096,
            "max_message_bytes":4096
         }
      ],
      "server_rpc_events":[
         {
            "methods":[
               "helloworld.Greeter/*"
            ],
            "max_metadata_bytes":4096,
            "max_message_bytes":4096
         }
      ]
   }
}

프로젝트 간 관측 가능성 설정

환경 변수 GRPC_GCP_OBSERVABILITY_CONFIG에 설정된 구성을 사용하여 대상 프로젝트를 명시적으로 설정할 수 있습니다. 또한 프로젝트 간 관측 가능성을 위해서는 적합한 서비스 계정 권한을 설정해야 합니다. 대상 프로젝트 ID가 core-platform-stats라고 가정하면 다음 구성 예시를 사용하여 프로젝트 간 관측 가능성을 설정할 수 있습니다.

{
   "project_id":"core-platform-stats",
   "cloud_monitoring":{
   },
   "cloud_trace":{
      "sampling_rate":1.0
   },
   "cloud_logging":{
      "client_rpc_events":[
         {
            "methods":[
               "helloworld.Greeter/*"
            ]
         }
      ],
      "server_rpc_events":[
         {
            "methods":[
               "helloworld.Greeter/*"
            ]
         }
      ]
   }
}

로그 볼륨 예측

이 섹션에서는 선택적으로 로그 수집 볼륨을 예측하는 데 사용할 수 있는 정보를 제공합니다. 서비스의 RPC 이벤트를 구독하기 전 예측을 수행할 수 있습니다.

항목 세부정보
OK 단항 호출에 생성되는 이벤트 6개 이벤트

OK 단항 호출 RPC는 클라이언트 또는 서버에 대해 다음 6개 이벤트를 생성합니다.

  • CLIENT_HEADER
  • SERVER_HEADER
  • CLIENT_MESSAGE
  • SERVER_MESSAGE
  • CLIENT_HALF_CLOSE
  • SERVER_TRAILER
로그 항목의 평균 크기 기본값 500바이트

로그 항목이 하나의 RPC 이벤트에 매핑되고 RPC 이벤트에는 해당 이벤트, 리소스 라벨, 커스텀 라벨에 대한 자세한 디버깅 정보가 포함됩니다.
페이로드 로깅 크기 기본값 0, 구성 가능

최대 페이로드 크기를 관측 가능성 구성에서 구성할 수 있습니다. 기본적으로 페이로드가 로깅되지 않습니다.
커스텀 라벨 크기 기본값 0, 구성 가능

환경 변수를 사용하여 애플리케이션에 커스텀 라벨이 제공됩니다. 지정하지 않으면 커스텀 라벨이 없습니다.

월별 로그 수집의 총 크기 예측 수식:

Monthly Log Ingestion = QPS * 6 * (500B + Payload Logging Size + Custom Labels Size) * 2592000

예를 들어 단항 호출 메서드의 QPS가 1이고 추가 기능이 사용 설정되지 않았으면 예측 로그 수집 크기가 약 7.24GiB입니다.

다음 단계