opencensus.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. //
  2. //
  3. // Copyright 2019 gRPC authors.
  4. //
  5. // Licensed under the Apache License, Version 2.0 (the "License");
  6. // you may not use this file except in compliance with the License.
  7. // You may obtain a copy of the License at
  8. //
  9. // http://www.apache.org/licenses/LICENSE-2.0
  10. //
  11. // Unless required by applicable law or agreed to in writing, software
  12. // distributed under the License is distributed on an "AS IS" BASIS,
  13. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. // See the License for the specific language governing permissions and
  15. // limitations under the License.
  16. //
  17. //
  18. #ifndef GRPCPP_OPENCENSUS_H
  19. #define GRPCPP_OPENCENSUS_H
  20. #include "opencensus/stats/view_descriptor.h"
  21. #include "opencensus/tags/tag_map.h"
  22. #include "opencensus/trace/span.h"
  23. #include "opencensus/trace/span_context.h"
  24. namespace grpc {
  25. class ServerContext;
  26. // These symbols in this file will not be included in the binary unless
  27. // grpc_opencensus_plugin build target was added as a dependency. At the moment
  28. // it is only setup to be built with Bazel.
  29. // Registers the OpenCensus plugin with gRPC, so that it will be used for future
  30. // RPCs. This must be called before any views are created.
  31. void RegisterOpenCensusPlugin();
  32. // RPC stats definitions, defined by
  33. // https://github.com/census-instrumentation/opencensus-specs/blob/master/stats/gRPC.md
  34. // Registers the cumulative gRPC views so that they will be exported by any
  35. // registered stats exporter. For on-task stats, construct a View using the
  36. // ViewDescriptors below.
  37. void RegisterOpenCensusViewsForExport();
  38. // Returns the tracing Span for the current RPC.
  39. ::opencensus::trace::Span GetSpanFromServerContext(ServerContext* context);
  40. namespace experimental {
  41. // The tag keys set when recording RPC stats.
  42. ::opencensus::tags::TagKey ClientMethodTagKey();
  43. ::opencensus::tags::TagKey ClientStatusTagKey();
  44. ::opencensus::tags::TagKey ServerMethodTagKey();
  45. ::opencensus::tags::TagKey ServerStatusTagKey();
  46. // Names of measures used by the plugin--users can create views on these
  47. // measures but should not record data for them.
  48. extern const y_absl::string_view kRpcClientSentMessagesPerRpcMeasureName;
  49. extern const y_absl::string_view kRpcClientSentBytesPerRpcMeasureName;
  50. extern const y_absl::string_view kRpcClientReceivedMessagesPerRpcMeasureName;
  51. extern const y_absl::string_view kRpcClientReceivedBytesPerRpcMeasureName;
  52. extern const y_absl::string_view kRpcClientRoundtripLatencyMeasureName;
  53. extern const y_absl::string_view kRpcClientServerLatencyMeasureName;
  54. extern const y_absl::string_view kRpcClientStartedRpcsMeasureName;
  55. extern const y_absl::string_view kRpcClientRetriesPerCallMeasureName;
  56. extern const y_absl::string_view kRpcClientTransparentRetriesPerCallMeasureName;
  57. extern const y_absl::string_view kRpcClientRetryDelayPerCallMeasureName;
  58. extern const y_absl::string_view kRpcClientTransportLatencyMeasureName;
  59. extern const y_absl::string_view kRpcServerSentMessagesPerRpcMeasureName;
  60. extern const y_absl::string_view kRpcServerSentBytesPerRpcMeasureName;
  61. extern const y_absl::string_view kRpcServerReceivedMessagesPerRpcMeasureName;
  62. extern const y_absl::string_view kRpcServerReceivedBytesPerRpcMeasureName;
  63. extern const y_absl::string_view kRpcServerServerLatencyMeasureName;
  64. extern const y_absl::string_view kRpcServerStartedRpcsMeasureName;
  65. // Canonical gRPC view definitions.
  66. const ::opencensus::stats::ViewDescriptor& ClientStartedRpcs();
  67. const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcs();
  68. const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatency();
  69. const ::opencensus::stats::ViewDescriptor&
  70. ClientSentCompressedMessageBytesPerRpc();
  71. const ::opencensus::stats::ViewDescriptor&
  72. ClientReceivedCompressedMessageBytesPerRpc();
  73. const ::opencensus::stats::ViewDescriptor& ClientTransportLatency();
  74. const ::opencensus::stats::ViewDescriptor& ServerStartedRpcs();
  75. const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcs();
  76. const ::opencensus::stats::ViewDescriptor&
  77. ServerSentCompressedMessageBytesPerRpc();
  78. const ::opencensus::stats::ViewDescriptor&
  79. ServerReceivedCompressedMessageBytesPerRpc();
  80. const ::opencensus::stats::ViewDescriptor& ServerServerLatency();
  81. const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcCumulative();
  82. const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcCumulative();
  83. const ::opencensus::stats::ViewDescriptor&
  84. ClientReceivedMessagesPerRpcCumulative();
  85. const ::opencensus::stats::ViewDescriptor&
  86. ClientReceivedBytesPerRpcCumulative();
  87. const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyCumulative();
  88. const ::opencensus::stats::ViewDescriptor& ClientServerLatencyCumulative();
  89. const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsCumulative();
  90. const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsCumulative();
  91. const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallCumulative();
  92. const ::opencensus::stats::ViewDescriptor& ClientRetriesCumulative();
  93. const ::opencensus::stats::ViewDescriptor&
  94. ClientTransparentRetriesPerCallCumulative();
  95. const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesCumulative();
  96. const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallCumulative();
  97. const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcCumulative();
  98. const ::opencensus::stats::ViewDescriptor&
  99. ServerReceivedBytesPerRpcCumulative();
  100. const ::opencensus::stats::ViewDescriptor& ServerServerLatencyCumulative();
  101. const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsCumulative();
  102. const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsCumulative();
  103. const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcCumulative();
  104. const ::opencensus::stats::ViewDescriptor&
  105. ServerReceivedMessagesPerRpcCumulative();
  106. const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcMinute();
  107. const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcMinute();
  108. const ::opencensus::stats::ViewDescriptor& ClientReceivedMessagesPerRpcMinute();
  109. const ::opencensus::stats::ViewDescriptor& ClientReceivedBytesPerRpcMinute();
  110. const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyMinute();
  111. const ::opencensus::stats::ViewDescriptor& ClientServerLatencyMinute();
  112. const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsMinute();
  113. const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsMinute();
  114. const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallMinute();
  115. const ::opencensus::stats::ViewDescriptor& ClientRetriesMinute();
  116. const ::opencensus::stats::ViewDescriptor&
  117. ClientTransparentRetriesPerCallMinute();
  118. const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesMinute();
  119. const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallMinute();
  120. const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcMinute();
  121. const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcMinute();
  122. const ::opencensus::stats::ViewDescriptor& ServerReceivedMessagesPerRpcMinute();
  123. const ::opencensus::stats::ViewDescriptor& ServerReceivedBytesPerRpcMinute();
  124. const ::opencensus::stats::ViewDescriptor& ServerServerLatencyMinute();
  125. const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsMinute();
  126. const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsMinute();
  127. const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcHour();
  128. const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcHour();
  129. const ::opencensus::stats::ViewDescriptor& ClientReceivedMessagesPerRpcHour();
  130. const ::opencensus::stats::ViewDescriptor& ClientReceivedBytesPerRpcHour();
  131. const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyHour();
  132. const ::opencensus::stats::ViewDescriptor& ClientServerLatencyHour();
  133. const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsHour();
  134. const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsHour();
  135. const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallHour();
  136. const ::opencensus::stats::ViewDescriptor& ClientRetriesHour();
  137. const ::opencensus::stats::ViewDescriptor&
  138. ClientTransparentRetriesPerCallHour();
  139. const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesHour();
  140. const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallHour();
  141. const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcHour();
  142. const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcHour();
  143. const ::opencensus::stats::ViewDescriptor& ServerReceivedMessagesPerRpcHour();
  144. const ::opencensus::stats::ViewDescriptor& ServerReceivedBytesPerRpcHour();
  145. const ::opencensus::stats::ViewDescriptor& ServerServerLatencyHour();
  146. const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsHour();
  147. const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsHour();
  148. // Thread compatible.
  149. class CensusContext {
  150. public:
  151. CensusContext() : span_(::opencensus::trace::Span::BlankSpan()), tags_({}) {}
  152. explicit CensusContext(y_absl::string_view name,
  153. const ::opencensus::tags::TagMap& tags)
  154. : span_(::opencensus::trace::Span::StartSpan(name)), tags_(tags) {}
  155. explicit CensusContext(const ::opencensus::tags::TagMap& tags)
  156. : span_(::opencensus::trace::Span::BlankSpan()), tags_(tags) {}
  157. CensusContext(y_absl::string_view name, const ::opencensus::trace::Span* parent,
  158. const ::opencensus::tags::TagMap& tags)
  159. : span_(::opencensus::trace::Span::StartSpan(name, parent)),
  160. tags_(tags) {}
  161. CensusContext(y_absl::string_view name,
  162. const ::opencensus::trace::SpanContext& parent_ctxt)
  163. : span_(::opencensus::trace::Span::StartSpanWithRemoteParent(
  164. name, parent_ctxt)),
  165. tags_({}) {}
  166. CensusContext(y_absl::string_view name,
  167. const ::opencensus::trace::SpanContext& parent_ctxt,
  168. const ::opencensus::tags::TagMap& tags)
  169. : span_(::opencensus::trace::Span::StartSpanWithRemoteParent(
  170. name, parent_ctxt)),
  171. tags_(tags) {}
  172. void AddSpanAttribute(y_absl::string_view key,
  173. opencensus::trace::AttributeValueRef attribute) {
  174. span_.AddAttribute(key, attribute);
  175. }
  176. void AddSpanAnnotation(y_absl::string_view description,
  177. opencensus::trace::AttributesRef attributes) {
  178. span_.AddAnnotation(description, attributes);
  179. }
  180. const ::opencensus::trace::Span& Span() const { return span_; }
  181. const ::opencensus::tags::TagMap& tags() const { return tags_; }
  182. ::opencensus::trace::SpanContext Context() const { return Span().context(); }
  183. void EndSpan() { Span().End(); }
  184. private:
  185. ::opencensus::trace::Span span_;
  186. ::opencensus::tags::TagMap tags_;
  187. };
  188. } // namespace experimental
  189. } // namespace grpc
  190. #endif // GRPCPP_OPENCENSUS_H