| /* |
| * 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 ( |
| keyServerMethod = tag.MustNewKey("grpc_server_method") |
| keyServerStatus = tag.MustNewKey("grpc_server_status") |
| ) |
| |
| // Measures, which are recorded by server stats handler: Note that on gRPC's |
| // server side, the per rpc unit is truly per rpc, as there is no concept of a |
| // rpc attempt server side. |
| var ( |
| serverReceivedMessagesPerRPC = stats.Int64("grpc.io/server/received_messages_per_rpc", "Number of messages received in each RPC. Has value 1 for non-streaming RPCs.", stats.UnitDimensionless) // the collection/measurement point of this measure handles the /rpc aspect of it |
| serverReceivedBytesPerRPC = stats.Int64("grpc.io/server/received_bytes_per_rpc", "Total bytes received across all messages per RPC.", stats.UnitBytes) |
| serverReceivedCompressedBytesPerRPC = stats.Int64("grpc.io/server/received_compressed_bytes_per_rpc", "Total compressed bytes received across all messages per RPC.", stats.UnitBytes) |
| serverSentMessagesPerRPC = stats.Int64("grpc.io/server/sent_messages_per_rpc", "Number of messages sent in each RPC. Has value 1 for non-streaming RPCs.", stats.UnitDimensionless) |
| serverSentBytesPerRPC = stats.Int64("grpc.io/server/sent_bytes_per_rpc", "Total bytes sent in across all response messages per RPC.", stats.UnitBytes) |
| serverSentCompressedBytesPerRPC = stats.Int64("grpc.io/server/sent_compressed_bytes_per_rpc", "Total compressed bytes sent in across all response messages per RPC.", stats.UnitBytes) |
| serverStartedRPCs = stats.Int64("grpc.io/server/started_rpcs", "The total number of server RPCs ever opened, including those that have not completed.", stats.UnitDimensionless) |
| serverLatency = stats.Float64("grpc.io/server/server_latency", "Time between first byte of request received to last byte of response sent, or terminal error.", stats.UnitMilliseconds) |
| ) |
| |
| var ( |
| // ServerSentMessagesPerRPCView is the distribution of sent messages per |
| // RPC, keyed on method. |
| ServerSentMessagesPerRPCView = &view.View{ |
| Name: "grpc.io/server/sent_messages_per_rpc", |
| Description: "Distribution of sent messages per RPC, by method.", |
| TagKeys: []tag.Key{keyServerMethod}, |
| Measure: serverSentMessagesPerRPC, |
| Aggregation: countDistribution, |
| } |
| // ServerReceivedMessagesPerRPCView is the distribution of received messages |
| // per RPC, keyed on method. |
| ServerReceivedMessagesPerRPCView = &view.View{ |
| Name: "grpc.io/server/received_messages_per_rpc", |
| Description: "Distribution of received messages per RPC, by method.", |
| TagKeys: []tag.Key{keyServerMethod}, |
| Measure: serverReceivedMessagesPerRPC, |
| Aggregation: countDistribution, |
| } |
| // ServerSentBytesPerRPCView is the distribution of received bytes per RPC, |
| // keyed on method. |
| ServerSentBytesPerRPCView = &view.View{ |
| Name: "grpc.io/server/sent_bytes_per_rpc", |
| Description: "Distribution of sent bytes per RPC, by method.", |
| Measure: serverSentBytesPerRPC, |
| TagKeys: []tag.Key{keyServerMethod}, |
| Aggregation: bytesDistribution, |
| } |
| // ServerSentCompressedMessageBytesPerRPCView is the distribution of |
| // received compressed message bytes per RPC, keyed on method. |
| ServerSentCompressedMessageBytesPerRPCView = &view.View{ |
| Name: "grpc.io/server/sent_compressed_message_bytes_per_rpc", |
| Description: "Distribution of sent compressed message bytes per RPC, by method.", |
| Measure: serverSentCompressedBytesPerRPC, |
| TagKeys: []tag.Key{keyServerMethod}, |
| Aggregation: bytesDistribution, |
| } |
| // ServerReceivedBytesPerRPCView is the distribution of sent bytes per RPC, |
| // keyed on method. |
| ServerReceivedBytesPerRPCView = &view.View{ |
| Name: "grpc.io/server/received_bytes_per_rpc", |
| Description: "Distribution of received bytes per RPC, by method.", |
| Measure: serverReceivedBytesPerRPC, |
| TagKeys: []tag.Key{keyServerMethod}, |
| Aggregation: bytesDistribution, |
| } |
| // ServerReceivedCompressedMessageBytesPerRPCView is the distribution of |
| // sent compressed message bytes per RPC, keyed on method. |
| ServerReceivedCompressedMessageBytesPerRPCView = &view.View{ |
| Name: "grpc.io/server/received_compressed_message_bytes_per_rpc", |
| Description: "Distribution of received compressed message bytes per RPC, by method.", |
| Measure: serverReceivedCompressedBytesPerRPC, |
| TagKeys: []tag.Key{keyServerMethod}, |
| Aggregation: bytesDistribution, |
| } |
| // ServerStartedRPCsView is the count of opened RPCs, keyed on method. |
| ServerStartedRPCsView = &view.View{ |
| Measure: serverStartedRPCs, |
| Name: "grpc.io/server/started_rpcs", |
| Description: "Number of opened server RPCs, by method.", |
| TagKeys: []tag.Key{keyServerMethod}, |
| Aggregation: view.Count(), |
| } |
| // ServerCompletedRPCsView is the count of completed RPCs, keyed on |
| // method and status. |
| ServerCompletedRPCsView = &view.View{ |
| Name: "grpc.io/server/completed_rpcs", |
| Description: "Number of completed RPCs by method and status.", |
| TagKeys: []tag.Key{keyServerMethod, keyServerStatus}, |
| Measure: serverLatency, |
| Aggregation: view.Count(), |
| } |
| // ServerLatencyView is the distribution of server latency in milliseconds |
| // per RPC, keyed on method. |
| ServerLatencyView = &view.View{ |
| Name: "grpc.io/server/server_latency", |
| Description: "Distribution of server latency in milliseconds, by method.", |
| TagKeys: []tag.Key{keyServerMethod}, |
| Measure: serverLatency, |
| Aggregation: millisecondsDistribution, |
| } |
| ) |
| |
| // DefaultServerViews is the set of server views which are considered the |
| // minimum required to monitor server side performance. |
| var DefaultServerViews = []*view.View{ |
| ServerReceivedBytesPerRPCView, |
| ServerSentBytesPerRPCView, |
| ServerLatencyView, |
| ServerCompletedRPCsView, |
| ServerStartedRPCsView, |
| } |