| /* |
| * Copyright 2022 gRPC authors. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package opencensus |
| |
| import ( |
| "go.opencensus.io/stats" |
| "go.opencensus.io/stats/view" |
| "go.opencensus.io/tag" |
| ) |
| |
| var ( |
| keyClientMethod = tag.MustNewKey("grpc_client_method") |
| keyClientStatus = tag.MustNewKey("grpc_client_status") |
| ) |
| |
| // Measures, which are recorded by client stats handler: Note that due to the |
| // nature of how stats handlers are called on gRPC's client side, the per rpc |
| // unit is actually per attempt throughout this definition file. |
| var ( |
| clientSentMessagesPerRPC = stats.Int64("grpc.io/client/sent_messages_per_rpc", "Number of messages sent in the RPC (always 1 for non-streaming RPCs).", stats.UnitDimensionless) |
| clientSentBytesPerRPC = stats.Int64("grpc.io/client/sent_bytes_per_rpc", "Total bytes sent across all request messages per RPC.", stats.UnitBytes) |
| clientSentCompressedBytesPerRPC = stats.Int64("grpc.io/client/sent_compressed_message_bytes_per_rpc", "Total compressed bytes sent across all request messages per RPC.", stats.UnitBytes) |
| clientReceivedMessagesPerRPC = stats.Int64("grpc.io/client/received_messages_per_rpc", "Number of response messages received per RPC (always 1 for non-streaming RPCs).", stats.UnitDimensionless) |
| clientReceivedBytesPerRPC = stats.Int64("grpc.io/client/received_bytes_per_rpc", "Total bytes received across all response messages per RPC.", stats.UnitBytes) |
| clientReceivedCompressedBytesPerRPC = stats.Int64("grpc.io/client/received_compressed_message_bytes_per_rpc", "Total compressed bytes received across all response messages per RPC.", stats.UnitBytes) |
| clientRoundtripLatency = stats.Float64("grpc.io/client/roundtrip_latency", "Time between first byte of request sent to last byte of response received, or terminal error.", stats.UnitMilliseconds) |
| clientStartedRPCs = stats.Int64("grpc.io/client/started_rpcs", "The total number of client RPCs ever opened, including those that have not completed.", stats.UnitDimensionless) |
| clientServerLatency = stats.Float64("grpc.io/client/server_latency", `Propagated from the server and should have the same value as "grpc.io/server/latency".`, stats.UnitMilliseconds) |
| // Per call measure: |
| clientAPILatency = stats.Float64("grpc.io/client/api_latency", "The end-to-end time the gRPC library takes to complete an RPC from the application’s perspective", stats.UnitMilliseconds) |
| ) |
| |
| var ( |
| // ClientSentMessagesPerRPCView is the distribution of sent messages per |
| // RPC, keyed on method. |
| ClientSentMessagesPerRPCView = &view.View{ |
| Measure: clientSentMessagesPerRPC, |
| Name: "grpc.io/client/sent_messages_per_rpc", |
| Description: "Distribution of sent messages per RPC, by method.", |
| TagKeys: []tag.Key{keyClientMethod}, |
| Aggregation: countDistribution, |
| } |
| // ClientReceivedMessagesPerRPCView is the distribution of received messages |
| // per RPC, keyed on method. |
| ClientReceivedMessagesPerRPCView = &view.View{ |
| Measure: clientReceivedMessagesPerRPC, |
| Name: "grpc.io/client/received_messages_per_rpc", |
| Description: "Distribution of received messages per RPC, by method.", |
| TagKeys: []tag.Key{keyClientMethod}, |
| Aggregation: countDistribution, |
| } |
| // ClientSentBytesPerRPCView is the distribution of sent bytes per RPC, |
| // keyed on method. |
| ClientSentBytesPerRPCView = &view.View{ |
| Measure: clientSentBytesPerRPC, |
| Name: "grpc.io/client/sent_bytes_per_rpc", |
| Description: "Distribution of sent bytes per RPC, by method.", |
| TagKeys: []tag.Key{keyClientMethod}, |
| Aggregation: bytesDistribution, |
| } |
| // ClientSentCompressedMessageBytesPerRPCView is the distribution of |
| // compressed sent message bytes per RPC, keyed on method. |
| ClientSentCompressedMessageBytesPerRPCView = &view.View{ |
| Measure: clientSentCompressedBytesPerRPC, |
| Name: "grpc.io/client/sent_compressed_message_bytes_per_rpc", |
| Description: "Distribution of sent compressed message bytes per RPC, by method.", |
| TagKeys: []tag.Key{keyClientMethod}, |
| Aggregation: bytesDistribution, |
| } |
| // ClientReceivedBytesPerRPCView is the distribution of received bytes per |
| // RPC, keyed on method. |
| ClientReceivedBytesPerRPCView = &view.View{ |
| Measure: clientReceivedBytesPerRPC, |
| Name: "grpc.io/client/received_bytes_per_rpc", |
| Description: "Distribution of received bytes per RPC, by method.", |
| TagKeys: []tag.Key{keyClientMethod}, |
| Aggregation: bytesDistribution, |
| } |
| // ClientReceivedCompressedMessageBytesPerRPCView is the distribution of |
| // compressed received message bytes per RPC, keyed on method. |
| ClientReceivedCompressedMessageBytesPerRPCView = &view.View{ |
| Measure: clientReceivedCompressedBytesPerRPC, |
| Name: "grpc.io/client/received_compressed_message_bytes_per_rpc", |
| Description: "Distribution of received compressed message bytes per RPC, by method.", |
| TagKeys: []tag.Key{keyClientMethod}, |
| Aggregation: bytesDistribution, |
| } |
| // ClientStartedRPCsView is the count of opened RPCs, keyed on method. |
| ClientStartedRPCsView = &view.View{ |
| Measure: clientStartedRPCs, |
| Name: "grpc.io/client/started_rpcs", |
| Description: "Number of opened client RPCs, by method.", |
| TagKeys: []tag.Key{keyClientMethod}, |
| Aggregation: view.Count(), |
| } |
| // ClientCompletedRPCsView is the count of completed RPCs, keyed on method |
| // and status. |
| ClientCompletedRPCsView = &view.View{ |
| Measure: clientRoundtripLatency, |
| Name: "grpc.io/client/completed_rpcs", |
| Description: "Number of completed RPCs by method and status.", |
| TagKeys: []tag.Key{keyClientMethod, keyClientStatus}, |
| Aggregation: view.Count(), |
| } |
| // ClientRoundtripLatencyView is the distribution of round-trip latency in |
| // milliseconds per RPC, keyed on method. |
| ClientRoundtripLatencyView = &view.View{ |
| Measure: clientRoundtripLatency, |
| Name: "grpc.io/client/roundtrip_latency", |
| Description: "Distribution of round-trip latency, by method.", |
| TagKeys: []tag.Key{keyClientMethod}, |
| Aggregation: millisecondsDistribution, |
| } |
| |
| // The following metric is per call: |
| |
| // ClientAPILatencyView is the distribution of client api latency for the |
| // full RPC call, keyed on method and status. |
| ClientAPILatencyView = &view.View{ |
| Measure: clientAPILatency, |
| Name: "grpc.io/client/api_latency", |
| Description: "Distribution of client api latency, by method and status", |
| TagKeys: []tag.Key{keyClientMethod, keyClientStatus}, |
| Aggregation: millisecondsDistribution, |
| } |
| ) |
| |
| // DefaultClientViews is the set of client views which are considered the |
| // minimum required to monitor client side performance. |
| var DefaultClientViews = []*view.View{ |
| ClientSentBytesPerRPCView, |
| ClientReceivedBytesPerRPCView, |
| ClientRoundtripLatencyView, |
| ClientCompletedRPCsView, |
| ClientStartedRPCsView, |
| } |