구성 데이터
다음 표에는 환경 변수에서 확인할 수 있는 구성 데이터가 정의되어 있습니다.
필드 | 사양 |
---|---|
project_id |
문자열 관측 가능한 데이터가 전송되는 프로젝트의 식별자입니다. 비어 있으면 gRPC 관측 가능성 플러그인이 환경 변수 또는 기본 사용자 인증 정보에서 프로젝트 ID를 가져오려고 시도합니다. 찾을 수 없으면 관측 가능성 init 함수가 오류를 반환합니다. |
cloud_logging |
객체 로깅 옵션은 이 테이블에 분류됩니다. 없으면 로깅이 사용 중지됩니다. |
cloud_logging.client_rpc_events[] |
목록 라이브러리에서 나가는 RPC에 대한 구성을 보여주는 client_rpc_events 구성 목록입니다.client_rpc_events 구성은 텍스트 순서로 평가되고 첫 번째 일치 항목이 사용됩니다. RPC가 항목과 일치하지 않으면 목록에서 다음 항목을 계속 평가합니다. |
cloud_logging.client_rpc_events[].methods[] |
목록[String] 메서드 식별자 목록입니다. 기본적으로는 목록이 비어 있고 일치하는 메서드가 없습니다. 메서드의 값은 [service]/[method] 형식입니다.* 는 다음 항목의 와일드 카드로 허용됩니다.
서비스 이름(지정된 경우)은 패키지 이름을 포함하여 정규화된 서비스 이름이어야 합니다. 예시:
|
cloud_logging.client_rpc_events[].exclude |
불리언client_rpc_events[].methods[] 로 표시된 메서드를 로깅에서 제외할지 여부입니다.기본값은 false입니다. 즉, client_rpc_events[].methods[] 로 표시된 메서드가 로그 레코드에 포함됩니다.값이 true이면 와일드 카드(*)를 client_rpc_events[].methods[]. 의 전체 값으로 사용할 수 없습니다. |
cloud_logging.client_rpc_events[].max_metadata_bytes |
Int 로깅할 메타데이터의 최대 바이트 수입니다. 메타데이터 크기가 정의된 한도보다 크면 한도를 초과하는 키-값 쌍이 로깅되지 않습니다. 기본값은 0입니다. 즉, 메타데이터가 로깅되지 않습니다. |
cloud_logging.client_rpc_events[].max_message_bytes |
Int 로깅할 각 메시지의 최대 바이트 수입니다. 메시지 크기가 정의된 한도보다 크면 한도를 초과하는 콘텐츠가 잘립니다. 기본값은 0입니다. 즉, 메시지 페이로드가 로깅되지 않습니다. |
cloud_logging.server_rpc_events[] |
목록 바이너리로 들어오는 RPC 구성을 나타내는 server_rpc_events 구성 목록입니다.server_rpc_events 구성은 텍스트 순서로 평가되고 첫 번째 일치 항목이 사용됩니다. RPC가 항목과 일치하지 않으면 목록에서 다음 항목을 계속 평가합니다. |
cloud_logging.server_rpc_events[].methods[] |
목록 [String] 메서드 그룹을 선택할 수 있는 문자열 목록입니다. 기본적으로는 목록이 비어 있고 일치하는 메서드가 없습니다. 메서드의 값은 [service]/[method] 형식입니다.* 는 다음 항목의 와일드 카드로 허용됩니다.
서비스 이름(지정된 경우)은 패키지 이름을 포함하여 정규화된 서비스 이름이어야 합니다. 예시:
|
cloud_logging.server_rpc_events[].exclude |
불리언server_rpc_events[].methods[] 로 표시된 메서드를 로깅에서 제외할지 여부입니다.기본값은 false입니다. 즉, server_rpc_events[].methods[] 로 표시된 메서드가 로깅됩니다.값이 true이면 와일드 카드(*)를 server_rpc_events[].methods[] 의 전체 값으로 사용할 수 없습니다. |
cloud_logging.server_rpc_events[].max_metadata_bytes |
Int 로깅할 메타데이터의 최대 바이트 수입니다. 메타데이터 크기가 정의된 한도보다 크면 한도를 초과하는 키-값 쌍이 로깅되지 않습니다. 기본값은 0입니다. 즉, 메타데이터가 로깅되지 않습니다. |
cloud_logging.server_rpc_events[].max_message_bytes |
Int 로깅할 각 메시지의 최대 바이트 수입니다. 메시지 크기가 정의된 한도보다 크면 한도를 넘어서는 콘텐츠가 잘립니다. 기본값은 0입니다. 즉, 메시지 페이로드가 로깅되지 않습니다. |
cloud_monitoring |
객체 Cloud Monitoring을 사용 설정합니다. 구성 옵션이 없습니다. 비어 있는 구성 객체를 제공하면 모니터링이 사용 설정됩니다. 구성 객체를 제공하지 않으면 모니터링이 사용 중지됩니다. 예를 들어 다른 옵션을 지정하지 않으면 빈 구성 섹션이 모니터링을 사용 설정합니다. export GRPC_GCP_OBSERVABILITY_CONFIG='{ "project_id": "your-project-here", "cloud_monitoring": { } }' |
cloud_trace |
객체 빈 구성 섹션은 기본 구성 옵션으로 추적을 사용 설정합니다. 구성 객체를 제공하지 않으면 추적이 사용 중지됩니다. 예를 들어 빈 구성 섹션은 기본 구성 옵션으로 추적을 사용 설정합니다. export GRPC_GCP_OBSERVABILITY_CONFIG='{ "project_id": "your-project-here", "cloud_trace": { } }' 추적이 사용 설정되었으면 샘플링 레이트가 `0`이더라도 특정 trace를 샘플링하는 결정이 전파됩니다. |
cloud_trace.sampling_rate |
숫자 추적되는 RPC의 확률을 제어하는 전역 설정입니다. 예를 들면 다음과 같습니다.
기본적으로 sample_rate는 0 입니다.이 플러그인은 샘플링 결정을 업스트림에 존중합니다. RPC가 업스트림에서 샘플링되도록 선택된 경우 플러그인은 플러그인의 샘플링 레이트 설정에 관계없이 스팬을 수집하고 백엔드에 데이터를 업로드합니다. |
labels |
객체 키-값 쌍 집합을 포함하는 JSON 객체입니다. 키와 값은 모두 문자열입니다. 라벨은 Cloud Logging, Cloud Monitoring, Cloud Trace에 함께 적용됩니다. |
추적 정의
이 섹션에서는 추적에 대한 정보를 제공합니다.
추적 컨텍스트 전파
서비스 간 추적이 작동하기 위해서는 서비스 소유자가 업스트림에서 수신된(또는 그 자체로 시작된) 추적 컨텍스트를 다운스트림으로 전파하도록 지원해야 합니다. Trace 컨텍스트는 gRPC 메타데이터를 통해 서비스 간에 전파됩니다. 이 구성의 서비스가 원격 분석 데이터를 적절한 서비스에 보고할 수 있도록 Cloud Monitoring, Cloud Logging, Cloud Trace API, 마이크로서비스 API를 사용 설정해야 합니다.
전파 지원이 없으면 다운스트림 서비스가 Trace에 대해 스팬을 생성할 수 없습니다. 기존 스팬은 영향을 받지 않습니다. 마이크로서비스 관측 가능성 플러그인에서는 trace 컨텍스트 인코딩을 위해 OpenCensus 바이너리 형식을 지원합니다.
스팬
스팬 이름 형식은 다음과 같이 지정됩니다.
유형 | 예시 값 | 사용 |
---|---|---|
RPC 스팬 |
[Sent|Recv].helloworld.Greeter.SayHello
|
스팬 이름은 프리픽스 슬래시 없이 점으로 연결된 전체 메서드 이름입니다. 스팬 이름은 CLIENT RPC 스팬의 경우 Sent. 가 프리픽스로 지정되고 전체 메서드 이름 앞에 있는 SERVER RPC 스팬의 경우 Recv. 가 프리픽스로 지정됩니다. |
시도 스팬 |
Attempt.helloworld.Greeter.SayHello
|
전체 메서드 이름 앞에 Attempt. 프리픽스를 연결합니다. |
스팬 라벨
통합은 다른 스팬 라벨을 제공합니다.
시도 스팬의 경우 2개의 추가 재시도 관련 속성(스팬 라벨)이 연결됩니다.
라벨 | 예시 값 | 용도 |
---|---|---|
previous-rpc-attempts | 0 |
이 RPC 이전의 재시도 수입니다. |
transparent-retry | True/False
|
이 RPC가 투명한 재시도로 시작되었는지 여부입니다. |
측정항목 정의
다음 측정항목이 제공되고 일반적인 사용자 여정에 대해 마이크로서비스(gRPC) 모니터링이라는 대시보드에 표시됩니다.
다음은 gRPC 클라이언트 측 측정항목의 측정항목입니다.
측정항목 이름 | 설명 | 종류, 유형, 단위 | 라벨 |
---|---|---|---|
custom.googleapis.com/opencensus/grpc.io/client/started_rpcs |
완료되지 않은 항목을 포함하여 시작된 클라이언트 RPC 시도 수입니다. | 누적, Int64, 1 | grpc_client_method |
custom.googleapis.com/opencensus/grpc.io/client/completed_rpcs |
서버에서 응답이 수신되거나 전송될 때와 같이 완료된 클라이언트 RPC 수입니다. | 누적, Int64, 1 | grpc_client_method , grpc_client_status |
custom.googleapis.com/opencensus/grpc.io/client/roundtrip_latency |
하위 채널을 선택하는 데 걸리는 시간을 포함하여 RPC 시도를 완료하는 데 걸리는 엔드 투 엔드 시간입니다. | 누적, 분산, 밀리초 | grpc_client_method |
custom.googleapis.com/opencensus/grpc.io/client/api_latency |
애플리케이션의 관점에서 RPC를 완료하기 위해 gRPC 라이브러리에 걸리는 전체 시간입니다. | 누적, 분산, 밀리초 | grpc_client_method , grpc_client_status |
custom.googleapis.com/opencensus/grpc.io/client/sent_compressed_message_bytes_per_rpc |
RPC 시도당 모든 요청 메시지에 전송되는 총 바이트(압축되고, 암호화되지 않음)입니다. | 누적, 분포, 기준 | grpc_client_method , grpc_client_status |
custom.googleapis.com/opencensus/grpc.io/client/received_compressed_message_bytes_per_rpc |
RPC 시도당 모든 응답 메시지에 수신되는 총 바이트(압축되고 암호화되지 않음)입니다. | 누적, 분포, 기준 | grpc_client_method , grpc_client_status |
다음 gRPC 서버 측 측정항목을 사용할 수 있습니다.
측정항목 이름 | 설명 | 종류, 유형, 단위 | 라벨 |
---|---|---|---|
custom.googleapis.com/opencensus/grpc.io/server/started_rpcs |
완료되지 않은 RPC를 포함하여 서버에서 지금까지 수신된 RPC 수입니다. |
누적, Int64, 1 | grpc_server_method |
custom.googleapis.com/opencensus/grpc.io/server/completed_rpcs |
서버에서 응답이 전송된 경우와 같이 완료된 총 RPC 수입니다. |
누적, Int64, 1 | grpc_server_method , grpc_server_status |
custom.googleapis.com/opencensus/grpc.io/server/sent_compressed_message_bytes_per_rpc |
RPC당 모든 응답 메시지에 전송되는 총 바이트(압축되고 암호화되지 않음)입니다. |
누적, 분포, 기준 | grpc_server_method , grpc_server_status |
custom.googleapis.com/opencensus/grpc.io/server/received_compressed_message_bytes_per_rpc |
RPC당 모든 요청 메시지에 수신되는 총 바이트(압축되고 암호화되지 않음)입니다. |
누적, 분포, 기준 | grpc_server_method , grpc_server_status |
custom.googleapis.com/opencensus/grpc.io/server/server_latency
|
서버 전송(HTTP2/inproc/cronet) 관점에서 RPC에 걸리는 전체 시간입니다. |
누적, 분산, 밀리초 | grpc_server_method |
위 표에서 각 분포에는 다음과 같은 버킷 히스토그램이 포함됩니다.
바이트 크기: 0, 1024, 2048, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216, 67108864, 268435456, 1073741824, 4294967296
지연 시간(밀리초): 0, 0.01, 0.05, 0.1, 0.3, 0.6, 0.8, 1, 2, 3, 4, 5, 6, 8, 10, 13, 16, 20, 25, 30, 40, 50, 65, 80, 100, 130, 160, 200, 250, 300, 400, 500, 650, 800, 1000, 2000, 5000, 10000, 20000, 50000, 100000
태그 설명:
grpc_client_method
: 패키지, 서비스, 메서드를 포함하는 전체 gRPC 메서드 이름(예:google.bigtable.v2.Bigtable/CheckAndMutateRow
)grpc_client_status
: 수신된 gRPC 서버 상태 코드(예:OK
,CANCELLED
,DEADLINE_EXCEEDED
)grpc_server_method
: 패키지, 서비스, 메서드를 포함하는 전체 gRPC 메서드 이름(예:com.exampleapi.v4.BookshelfService/Checkout
)grpc_server_status
: 반환된 gRPC 서버 상태 코드(예:OK
,CANCELLED
,DEADLINE_EXCEEDED
)
로그 레코드 정의
마이크로서비스 관측 가능성 로그는 로그 이름을 사용하여 Cloud Logging에 업로드됩니다. PROJECT_ID
는 프로젝트를 나타내는 문자열의 자리 표시자입니다.
logName=projects/[PROJECT_ID]/logs/microservices.googleapis.com%2Fobservability%2Fgrpc
다음은 생성된 로그 레코드의 JSON 표현입니다.
{
"authority": string,
"callId": string,
"type": string,
"logger": string,
"serviceName": string,
"methodName": string,
"peer": {
"type": string,
"address": string,
"ipPort": int
},
"payload": {
"timeout": string,
"metadata":
{
string: string,
string: string
},
"statusCode": string,
"statusMessage": string,
"statusDetails": string,
"message": string,
"messageLength": int,
},
"sequenceId": int
}
다음 표에서는 로그 항목의 필드를 설명합니다.
필드 | 사양 |
---|---|
authority | 문자열 단일 프로세스를 사용하여 서로 다른 ID로 여러 가상 서버를 실행할 수 있습니다. authority는 이러한 서버 ID의 이름입니다. 일반적으로 호스트 또는 호스트:포트 형식에서 URI 부분입니다. |
callId | 문자열 UUID에 해당하는 [클라이언트/서버] 호출을 고유하게 식별합니다. 각 호출에는 여러 로그 항목이 포함될 수 있습니다. 모두 동일한 callId를 사용합니다. |
유형 | 문자열 로그 이벤트의 유형입니다. 이벤트 유형: EVENT_TYPE_UNKNOWN CLIENT_HEADER SERVER_HEADER CLIENT_MESSAGE SERVER_MESSAGE CLIENT_HALF_CLOSE SERVER_TRAILER CANCEL |
logger | 문자열 이벤트 로거의 유형입니다. 이벤트 로거 유형: LOGGER_UNKNOWN , CLIENT , SERVER |
serviceName | 문자열 서비스의 이름입니다. |
methodName | 문자열 RPC 메서드의 이름입니다. |
피어 | 객체 피어 주소 정보입니다. 클라이언트 측에서 피어는 서버 헤더 이벤트 및 트레일러 이벤트에 로깅됩니다. 서버 측에서 피어는 항상 클라이언트 헤더 이벤트에 로깅됩니다. |
peer.type | 문자열 IPv4, IPv6, UNIX 중 하나인 주소 유형입니다. |
peer.address | 문자열 주소의 콘텐츠입니다. |
peer.ip_port | Int 주소의 포트 번호입니다. IPv4 및 IPv6 주소에만 사용할 수 있습니다. |
payload | 객체 페이로드에는 이벤트에 따라 메타데이터, 제한 시간, 메시지, 상태 조합이 포함될 수 있습니다.
|
payload.timeout | 문자열google.protobuf.Duration 을 나타내는 문자열입니다(예: '1.2초').RPC 제한 시간 값입니다. |
payload.metadata | 매핑 [String, String] 헤더 이벤트 또는 트레일러 이벤트에 사용됩니다. |
payload.message | 문자열(바이트) 메시지 페이로드입니다. |
payload.messageLength | Int 전체 메시지가 로깅되는지 여부에 관계없이 메시지 크기입니다(예: 자르거나 생략 가능한지 여부). |
payload.statusCode | 문자열 gRPC 상태 코드입니다. |
payload.statusMessage | 문자열 gRPC 상태 메시지입니다. |
payload.statusDetails | 문자열grpc-status-details-bin 메타데이터 키의 값입니다(있는 경우). 항상 인코딩된 google.rpc.Status 메시지입니다. |
payloadTruncated | 불리언 메시지 또는 메타데이터 필드가 구성 옵션으로 인해 잘렸거나 생략된 경우에는 True입니다. |
sequenceId | Int 이 호출에 대한 메시지 시퀀스 ID입니다. 첫 번째 메시지는 설정되지 않은 값과 구분을 위해 값이 1입니다. 이 필드의 목적은 내구성 또는 순서가 보장되지 않은 환경에서 누락된 항목을 감지하는 것입니다. |
리소스 라벨
리소스 라벨은 관측 가능성 데이터를 생성하는 소스를 식별합니다. 각 리소스 라벨은 키 값 쌍입니다. 여기서 키는 소스 환경(예: GKE 또는 Compute Engine)과 관련된 사전 정의된 값입니다.
GKE 배포의 측정항목 및 추적의 경우 컨테이너 이름 및 네임스페이스 이름을 제외하고 기본적으로 리소스 라벨이 채워집니다. 누락된 값은 다운로드 API를 사용하여 채울 수 있습니다.
다음은 환경 변수 키입니다.
- CONTAINER_NAME
- NAMESPACE
예를 들어 다음 중 env
섹션에는 2개의 리소스 라벨이 포함됩니다.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: app1
name: app1
spec:
replicas: 2
selector:
matchLabels:
run: app1
template:
metadata:
labels:
run: app1
spec:
containers:
- image: 'o11y-examples:1.00'
name: container1
ports:
- protocol: TCP
containerPort: 50051
env:
- name: CONTAINER_NAME
value: container1
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
커스텀 라벨
커스텀 라벨은 관측 가능성 데이터에서 추가적인 사용자 제공 정보를 나타냅니다. 라벨은 키와 값으로 구성됩니다. 키-값 쌍은 추적 데이터에 스팬 라벨로 연결되고 측정항목 데이터에 측정항목 라벨로 연결되고 로깅 데이터에 로그 항목 라벨로 연결됩니다. 모든 커스텀 라벨은 STRING 유형입니다.
labels
에 대해 키-값 쌍 목록을 지정하여 구성에 커스텀 라벨을 제공할 수 있습니다. 이 구현은 구성을 읽고 각 키-값 쌍에 대해 개별 라벨을 만든 후 라벨을 관측 가능성 데이터에 연결합니다. 예를 들면 다음과 같습니다.
"labels": {
"DATACENTER": "SAN_JOSE_DC",
"APP_ID": "24512"
}
각 로그 항목에는 다음 추가 라벨이 포함됩니다.
{
"DATACENTER": "SAN_JOSE_DC"
"APP_ID": "24512"
}
다음 단계
- 측정항목 종류 및 유형에 대한 자세한 내용은 값 유형 및 측정항목 종류를 참조하세요.
- 분포에 대한 자세한 내용은 분포 참조 페이지를 참조하세요.
- 분포 측정항목의 차트 작성에 대한 자세한 내용은 분포 측정항목을 참조하세요.
- 단위에 대한 자세한 내용은(예:
1
,ms
,By
)MetricDescriptor
참조의 단위 필드를 참조하세요.