設定資料
下表定義了環境變數中的設定資料。
欄位 | 規格 |
---|---|
project_id |
字串 要傳送可觀察性資料的專案 ID。如果為空白,gRPC 可觀察性外掛程式會嘗試從環境變數或預設憑證擷取專案 ID。 如果找不到,觀察功能初始化函式會傳回錯誤。 |
cloud_logging |
物件 記錄選項分類如下表所示。 如果未提供,系統會停用記錄功能。 |
cloud_logging.client_rpc_events[] |
Listclient_rpc_events 設定清單,代表二進位檔傳出 RPC 的設定。系統會依照文字順序評估 client_rpc_events 設定,並使用第一個相符的設定。如果 RPC 不符合項目,就會繼續處理清單中的下一個項目。 |
cloud_logging.client_rpc_events[].methods[] |
清單 [字串] 方法 ID 清單。 根據預設,清單為空白,不會比對任何方法。 方法的值為 [service]/[method] 格式。* 可做為下列萬用字元:
指定的服務名稱必須是完整的服務名稱,包括套件名稱。 例子:
|
cloud_logging.client_rpc_events[].exclude |
Bool 是否應將 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[] |
清單server_rpc_events 設定清單,代表對二進位檔傳入的 RPC 的設定。系統會依照文字順序評估 server_rpc_events 設定,並使用第一個相符的設定。如果 RPC 與項目不符,就會繼續處理清單中的下一個 項目。 |
cloud_logging.server_rpc_events[].methods[] |
清單 [字串] 可選取一組方法的字串清單。 根據預設,清單為空白,不會比對任何方法。 方法的值為 [service]/[method] 格式。* 可做為下列萬用字元:
指定的服務名稱必須是完整的服務名稱,包括套件名稱。 例子:
|
cloud_logging.server_rpc_events[].exclude |
Bool 是否應將 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` 的取樣率,系統也會傳播取樣特定追蹤記錄的決定。 |
cloud_trace.sampling_rate |
數字 全域設定,用於控制 RPC 被追蹤的機率。例如:
預設的 sampling_rate 為 0 。外掛程式會遵循上游的取樣決定。如果選擇使用 RPC 進行上游取樣,外掛程式會收集跨度並將資料上傳至後端,不受外掛程式的取樣率設定影響。 |
labels |
物件 包含一組鍵/值組合的 JSON 物件。鍵和值都是字串。 標籤會同時套用至 Cloud Logging、Cloud Monitoring 和 Cloud Trace。 |
追蹤定義
本節提供追蹤功能的相關資訊。
追蹤內容傳播
跨服務追蹤功能才能運作,服務擁有者必須支援從上游 (或自行啟動) 收到的追蹤內容傳播至下游。追蹤記錄會透過 gRPC 中繼資料在服務之間傳播。請務必啟用 Cloud Monitoring、Cloud Logging、Cloud Trace API 和 Microservices API,讓這個設定中的服務將遙測資料回報給適當的服務。
如果沒有傳播支援功能,下游服務就無法為追蹤產生跨度。現有的跨度不會受到影響。微服務可觀測性外掛程式支援 OpenCensus 二進位格式,可用於編碼和編碼追蹤記錄內容。
時距數量
區間的名稱格式如下:
類型 | 範例值 | 用量 |
---|---|---|
RPC 跨距 |
[Sent|Recv].helloworld.Greeter.SayHello
|
跨度名稱是完整的方法名稱,以點號連接,且沒有前置斜線。 區隔名稱的前置字串為 Sent. (用於用戶端 RPC 區隔) 和 Recv. (用於伺服器 RPC 區隔),並置於完整方法名稱之前。 |
嘗試範圍 |
Attempt.helloworld.Greeter.SayHello
|
在完整方法名稱前方附加前置字串 Attempt. 。 |
時距標籤
整合功能會提供不同的跨度標籤。
對於嘗試區間,系統會附加兩個重試相關的額外屬性 (區間標籤):
標籤 | 範例值 | 用量 |
---|---|---|
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 |
從應用程式角度來看,gRPC 程式庫完成 RPC 所需的總時間。 | 累積、分布、毫秒 | 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
}
下表說明記錄項目中的欄位:
欄位 | 規格 |
---|---|
權威 | String 單一程序可用於執行多個具有不同身分的虛擬伺服器。 主機名稱是此類伺服器身分的名稱。通常是 URI 的一部分,格式為主機或主機:通訊埠。 |
callId | 字串 用於唯一識別 [用戶端/伺服器] 呼叫,該呼叫為 UUID。每個呼叫可能會有多個記錄項目。這些事件都具有相同的 callId。 |
類型 | 字串 記錄事件的類型。 事件類型: EVENT_TYPE_UNKNOWN CLIENT_HEADER SERVER_HEADER CLIENT_MESSAGE SERVER_MESSAGE CLIENT_HALF_CLOSE SERVER_TRAILER CANCEL |
記錄器 | 字串 事件記錄器的類型。 事件記錄器的類型: LOGGER_UNKNOWN 、CLIENT 、SERVER |
serviceName | 字串 服務名稱。 |
methodName | 字串 RPC 方法的名稱。 |
節點 | 物件 對等端位址資訊。在用戶端,伺服器標頭事件和預告片事件會記錄對等端。在伺服器端,peer 一律會在用戶端標頭事件中記錄。 |
peer.type | 字串 位址類型,可能是 IPv4、IPv6 或 UNIX。 |
peer.address | 字串 地址的內容。 |
peer.ip_port | Int 地址的通訊埠號碼。僅適用於 IPv4 和 IPv6 位址。 |
酬載 | 物件 酬載可根據事件,包含中繼資料、逾時、訊息和狀態的組合。
|
payload.timeout | 字串 代表 google.protobuf.Duration 的字串,例如「1.2 秒」。RPC 逾時值。 |
payload.metadata | Mapping[String, String] 標頭事件或預告片事件使用。 |
payload.message | 字串 (位元組) 訊息酬載。 |
payload.messageLength | Int 訊息大小,無論是否記錄完整訊息 (例如,可能會截斷或省略)。 |
payload.statusCode | 字串 gRPC 狀態碼。 |
payload.statusMessage | 字串 gRPC 狀態訊息。 |
payload.statusDetails | 字串grpc-status-details-bin 中繼資料鍵的值 (如有)。這一律是已編碼的 google.rpc.Status 訊息。 |
payloadTruncated | Bool 如果訊息或中繼資料欄位因設定選項而截斷或省略,則為 True。 |
sequenceId | Int 此呼叫的訊息序號 ID。第一則訊息的值為 1,可與未設定的值區分開。這個欄位的目的是在無法保證耐用性或排序的環境中,偵測缺少的項目。 |
資源標籤
資源標籤可識別產生可觀察性資料的來源。每個資源標籤都是鍵/值組合,其中鍵是特定來源環境 (例如 GKE 或 Compute Engine) 的預先定義值。
針對 GKE 部署的指標和追蹤,系統會預設填入資源標籤,但容器名稱和命名空間名稱除外。您可以使用 Downward API 填入缺少的值。
以下是環境變數鍵:
- CONTAINER_NAME
- NAMESPACE
例如,以下 env
部分包含兩個資源標籤:
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
參考資料中的單位欄位。