Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 1 | # OpenCensus - A stats collection and distributed tracing framework |
Bogdan Drutu | e9be1f2 | 2017-09-30 16:35:39 -0400 | [diff] [blame] | 2 | [![Gitter chat][gitter-image]][gitter-url] |
| 3 | [![Maven Central][maven-image]][maven-url] |
Bogdan Drutu | 6e1ab48 | 2017-11-30 17:17:58 -0800 | [diff] [blame] | 4 | [![Javadocs][javadoc-image]][javadoc-url] |
Bogdan Drutu | e9be1f2 | 2017-09-30 16:35:39 -0400 | [diff] [blame] | 5 | [![Build Status][travis-image]][travis-url] |
| 6 | [![Windows Build Status][appveyor-image]][appveyor-url] |
Kristen Kozak | f418085 | 2018-02-05 12:31:14 -0800 | [diff] [blame] | 7 | [![Coverage Status][codecov-image]][codecov-url] |
Bogdan Drutu | e9be1f2 | 2017-09-30 16:35:39 -0400 | [diff] [blame] | 8 | |
Dino Oliva | 6712e0f | 2016-05-20 16:39:02 -0700 | [diff] [blame] | 9 | |
Fabian Lange | 17a1a1a | 2018-02-09 14:33:30 -0500 | [diff] [blame] | 10 | OpenCensus is a toolkit for collecting application performance and behavior data. It currently |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 11 | includes 3 apis: stats, tracing and tags. |
| 12 | |
Yang Song | 8ff0667 | 2018-06-29 12:07:53 -0700 | [diff] [blame] | 13 | The library is in [Beta](#versioning) stage and APIs are expected to be mostly stable. The |
| 14 | library is expected to move to [GA](#versioning) stage after v1.0.0 major release. |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 15 | |
| 16 | Please join [gitter](https://gitter.im/census-instrumentation/Lobby) for help or feedback on this |
| 17 | project. |
| 18 | |
Yang Song | 0d8f5f5 | 2018-07-19 15:40:54 -0700 | [diff] [blame] | 19 | ## OpenCensus Quickstart for Libraries |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 20 | |
| 21 | Integrating OpenCensus with a new library means recording stats or traces and propagating context. |
Yang Song | 0d8f5f5 | 2018-07-19 15:40:54 -0700 | [diff] [blame] | 22 | For application integration please see [Quickstart for Applications](https://github.com/census-instrumentation/opencensus-java#quickstart-for-applications). |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 23 | |
Reiley Yang | 9437d45 | 2018-06-21 14:57:50 -0700 | [diff] [blame] | 24 | The full quick start example can also be found on the [OpenCensus website](https://opencensus.io/java/index.html). |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 25 | |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 26 | ### Add the dependencies to your project |
| 27 | |
| 28 | For Maven add to your `pom.xml`: |
| 29 | ```xml |
| 30 | <dependencies> |
| 31 | <dependency> |
| 32 | <groupId>io.opencensus</groupId> |
| 33 | <artifactId>opencensus-api</artifactId> |
sebright | a5d2739 | 2018-09-18 12:04:27 -0700 | [diff] [blame] | 34 | <version>0.16.1</version> |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 35 | </dependency> |
| 36 | </dependencies> |
| 37 | ``` |
| 38 | |
| 39 | For Gradle add to your dependencies: |
| 40 | ```gradle |
sebright | a5d2739 | 2018-09-18 12:04:27 -0700 | [diff] [blame] | 41 | compile 'io.opencensus:opencensus-api:0.16.1' |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 42 | ``` |
| 43 | |
Yang Song | 299b08f | 2018-07-10 15:14:57 -0700 | [diff] [blame] | 44 | For Bazel add the following lines to the WORKSPACE file: |
| 45 | ``` |
| 46 | maven_jar( |
| 47 | name = "io_opencensus_opencensus_api", |
| 48 | artifact = "io.opencensus:opencensus-api:0.15.0", |
| 49 | sha1 = "9a098392b287d7924660837f4eba0ce252013683", |
| 50 | ) |
| 51 | ``` |
| 52 | Then targets can specify `@io_opencensus_opencensus_api//jar` as a dependency to depend on this jar: |
| 53 | ```bazel |
| 54 | deps = [ |
| 55 | "@io_opencensus_opencensus_api//jar", |
| 56 | ] |
| 57 | ``` |
| 58 | You may also need to import the transitive dependencies. See [generate external dependencies from |
| 59 | Maven projects](https://docs.bazel.build/versions/master/generate-workspace.html). |
| 60 | |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 61 | ### Hello "OpenCensus" trace events |
| 62 | |
| 63 | Here's an example of creating a Span and record some trace annotations. Notice that recording the |
| 64 | annotations is possible because we propagate scope. 3rd parties libraries like SLF4J can integrate |
| 65 | the same way. |
| 66 | |
| 67 | ```java |
Kristen Kozak | da27215 | 2018-07-11 12:30:58 -0700 | [diff] [blame] | 68 | import io.opencensus.common.Scope; |
| 69 | import io.opencensus.trace.Tracer; |
| 70 | import io.opencensus.trace.Tracing; |
| 71 | import io.opencensus.trace.samplers.Samplers; |
| 72 | |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 73 | public final class MyClassWithTracing { |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 74 | private static final Tracer tracer = Tracing.getTracer(); |
| 75 | |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 76 | public static void doWork() { |
Kristen Kozak | da27215 | 2018-07-11 12:30:58 -0700 | [diff] [blame] | 77 | // Create a child Span of the current Span. Always record events for this span and force it to |
| 78 | // be sampled. This makes it easier to try out the example, but unless you have a clear use |
Yang Song | efa417a | 2018-04-02 16:49:22 -0700 | [diff] [blame] | 79 | // case, you don't need to explicitly set record events or sampler. |
Kristen Kozak | da27215 | 2018-07-11 12:30:58 -0700 | [diff] [blame] | 80 | try (Scope ss = |
| 81 | tracer |
| 82 | .spanBuilder("MyChildWorkSpan") |
| 83 | .setRecordEvents(true) |
| 84 | .setSampler(Samplers.alwaysSample()) |
| 85 | .startScopedSpan()) { |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 86 | doInitialWork(); |
| 87 | tracer.getCurrentSpan().addAnnotation("Finished initial work"); |
| 88 | doFinalWork(); |
| 89 | } |
| 90 | } |
Fabian Lange | 17a1a1a | 2018-02-09 14:33:30 -0500 | [diff] [blame] | 91 | |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 92 | private static void doInitialWork() { |
| 93 | // ... |
| 94 | tracer.getCurrentSpan().addAnnotation("Important."); |
| 95 | // ... |
| 96 | } |
Fabian Lange | 17a1a1a | 2018-02-09 14:33:30 -0500 | [diff] [blame] | 97 | |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 98 | private static void doFinalWork() { |
| 99 | // ... |
| 100 | tracer.getCurrentSpan().addAnnotation("More important."); |
| 101 | // ... |
| 102 | } |
| 103 | } |
| 104 | ``` |
| 105 | |
| 106 | ### Hello "OpenCensus" stats events |
| 107 | |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 108 | Here's an example on |
| 109 | * defining TagKey, Measure and View, |
| 110 | * registering a view, |
| 111 | * putting TagKey and TagValue into a scoped TagContext, |
| 112 | * recording stats against current TagContext, |
| 113 | * getting ViewData. |
| 114 | |
| 115 | |
| 116 | For the complete example, see |
| 117 | [here](https://github.com/census-instrumentation/opencensus-java/blob/master/examples/src/main/java/io/opencensus/examples/helloworld/QuickStart.java). |
| 118 | |
| 119 | ```java |
Kristen Kozak | b3e35a2 | 2018-07-11 12:31:30 -0700 | [diff] [blame] | 120 | import io.opencensus.common.Scope; |
| 121 | import io.opencensus.stats.Aggregation; |
| 122 | import io.opencensus.stats.BucketBoundaries; |
| 123 | import io.opencensus.stats.Measure.MeasureLong; |
| 124 | import io.opencensus.stats.Stats; |
| 125 | import io.opencensus.stats.StatsRecorder; |
| 126 | import io.opencensus.stats.View; |
| 127 | import io.opencensus.stats.ViewData; |
| 128 | import io.opencensus.stats.ViewManager; |
| 129 | import io.opencensus.tags.TagKey; |
| 130 | import io.opencensus.tags.TagValue; |
| 131 | import io.opencensus.tags.Tagger; |
| 132 | import io.opencensus.tags.Tags; |
| 133 | import java.util.Arrays; |
| 134 | import java.util.Collections; |
| 135 | |
| 136 | public final class MyClassWithStats { |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 137 | private static final Tagger tagger = Tags.getTagger(); |
| 138 | private static final ViewManager viewManager = Stats.getViewManager(); |
easy | e45afa1 | 2018-03-15 17:26:26 +1100 | [diff] [blame] | 139 | private static final StatsRecorder statsRecorder = Stats.getStatsRecorder(); |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 140 | |
| 141 | // frontendKey allows us to break down the recorded data |
Jean de Klerk | 93c9c5b | 2018-03-26 19:58:19 +0200 | [diff] [blame] | 142 | private static final TagKey FRONTEND_KEY = TagKey.create("myorg_keys_frontend"); |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 143 | |
| 144 | // videoSize will measure the size of processed videos. |
Kristen Kozak | b3e35a2 | 2018-07-11 12:31:30 -0700 | [diff] [blame] | 145 | private static final MeasureLong VIDEO_SIZE = |
| 146 | MeasureLong.create("my.org/measure/video_size", "size of processed videos", "By"); |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 147 | |
| 148 | // Create view to see the processed video size distribution broken down by frontend. |
| 149 | // The view has bucket boundaries (0, 256, 65536) that will group measure values into |
| 150 | // histogram buckets. |
| 151 | private static final View.Name VIDEO_SIZE_VIEW_NAME = View.Name.create("my.org/views/video_size"); |
Kristen Kozak | b3e35a2 | 2018-07-11 12:31:30 -0700 | [diff] [blame] | 152 | private static final View VIDEO_SIZE_VIEW = |
| 153 | View.create( |
| 154 | VIDEO_SIZE_VIEW_NAME, |
| 155 | "processed video size over time", |
| 156 | VIDEO_SIZE, |
| 157 | Aggregation.Distribution.create( |
| 158 | BucketBoundaries.create(Arrays.asList(0.0, 256.0, 65536.0))), |
| 159 | Collections.singletonList(FRONTEND_KEY)); |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 160 | |
Kristen Kozak | b3e35a2 | 2018-07-11 12:31:30 -0700 | [diff] [blame] | 161 | public static void initialize() { |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 162 | // ... |
| 163 | viewManager.registerView(VIDEO_SIZE_VIEW); |
| 164 | } |
| 165 | |
Kristen Kozak | b3e35a2 | 2018-07-11 12:31:30 -0700 | [diff] [blame] | 166 | public static void processVideo() { |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 167 | try (Scope scopedTags = |
Kristen Kozak | b3e35a2 | 2018-07-11 12:31:30 -0700 | [diff] [blame] | 168 | tagger |
| 169 | .currentBuilder() |
| 170 | .put(FRONTEND_KEY, TagValue.create("mobile-ios9.3.5")) |
| 171 | .buildScoped()) { |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 172 | // Processing video. |
| 173 | // ... |
| 174 | |
| 175 | // Record the processed video size. |
| 176 | statsRecorder.newMeasureMap().put(VIDEO_SIZE, 25648).record(); |
| 177 | } |
| 178 | } |
| 179 | |
Kristen Kozak | b3e35a2 | 2018-07-11 12:31:30 -0700 | [diff] [blame] | 180 | public static void printStats() { |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 181 | ViewData viewData = viewManager.getView(VIDEO_SIZE_VIEW_NAME); |
| 182 | System.out.println( |
Kristen Kozak | b3e35a2 | 2018-07-11 12:31:30 -0700 | [diff] [blame] | 183 | String.format("Recorded stats for %s:\n %s", VIDEO_SIZE_VIEW_NAME.asString(), viewData)); |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 184 | } |
| 185 | } |
| 186 | ``` |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 187 | |
Yang Song | 0d8f5f5 | 2018-07-19 15:40:54 -0700 | [diff] [blame] | 188 | ## OpenCensus Quickstart for Applications |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 189 | |
Fabian Lange | 17a1a1a | 2018-02-09 14:33:30 -0500 | [diff] [blame] | 190 | Besides recording tracing/stats events the application also need to link the implementation, |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 191 | setup exporters, and debugging [Z-Pages](https://github.com/census-instrumentation/opencensus-java/tree/master/contrib/zpages). |
| 192 | |
| 193 | ### Add the dependencies to your project |
| 194 | |
| 195 | For Maven add to your `pom.xml`: |
| 196 | ```xml |
| 197 | <dependencies> |
| 198 | <dependency> |
| 199 | <groupId>io.opencensus</groupId> |
| 200 | <artifactId>opencensus-api</artifactId> |
sebright | a5d2739 | 2018-09-18 12:04:27 -0700 | [diff] [blame] | 201 | <version>0.16.1</version> |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 202 | </dependency> |
| 203 | <dependency> |
| 204 | <groupId>io.opencensus</groupId> |
| 205 | <artifactId>opencensus-impl</artifactId> |
sebright | a5d2739 | 2018-09-18 12:04:27 -0700 | [diff] [blame] | 206 | <version>0.16.1</version> |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 207 | <scope>runtime</scope> |
| 208 | </dependency> |
| 209 | </dependencies> |
| 210 | ``` |
| 211 | |
| 212 | For Gradle add to your dependencies: |
| 213 | ```gradle |
sebright | a5d2739 | 2018-09-18 12:04:27 -0700 | [diff] [blame] | 214 | compile 'io.opencensus:opencensus-api:0.16.1' |
| 215 | runtime 'io.opencensus:opencensus-impl:0.16.1' |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 216 | ``` |
| 217 | |
Yang Song | 299b08f | 2018-07-10 15:14:57 -0700 | [diff] [blame] | 218 | For Bazel add the following lines to the WORKSPACE file: |
| 219 | ``` |
| 220 | maven_jar( |
| 221 | name = "io_opencensus_opencensus_api", |
| 222 | artifact = "io.opencensus:opencensus-api:0.15.0", |
| 223 | sha1 = "9a098392b287d7924660837f4eba0ce252013683", |
| 224 | ) |
| 225 | |
| 226 | maven_jar( |
| 227 | name = "io_opencensus_opencensus_impl_core", |
| 228 | artifact = "io.opencensus:opencensus-impl-core:0.15.0", |
| 229 | sha1 = "36c775926ba1e54af7c37d0503cfb99d986f6229", |
| 230 | ) |
| 231 | |
| 232 | maven_jar( |
| 233 | name = "io_opencensus_opencensus_impl", |
| 234 | artifact = "io.opencensus:opencensus-impl:0.15.0", |
| 235 | sha1 = "d7bf0d7ee5a0594f840271c11c9f8d6f754f35d6", |
| 236 | ) |
| 237 | ``` |
| 238 | Then add the following lines to BUILD.bazel file: |
| 239 | ```bazel |
| 240 | deps = [ |
| 241 | "@io_opencensus_opencensus_api//jar", |
| 242 | ] |
| 243 | runtime_deps = [ |
| 244 | "@io_opencensus_opencensus_impl_core//jar", |
| 245 | "@io_opencensus_opencensus_impl//jar", |
| 246 | ] |
| 247 | ``` |
| 248 | Again you may need to import the transitive dependencies. See [generate external dependencies from |
| 249 | Maven projects](https://docs.bazel.build/versions/master/generate-workspace.html). |
| 250 | |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 251 | ### How to setup exporters? |
| 252 | |
| 253 | #### Trace exporters |
Fabian Lange | 17a1a1a | 2018-02-09 14:33:30 -0500 | [diff] [blame] | 254 | * [Instana][TraceExporterInstana] |
Yang Song | 9b6eb8c | 2018-03-16 11:00:43 -0700 | [diff] [blame] | 255 | * [Jaeger][TraceExporterJaeger] |
Bogdan Drutu | 19bad53 | 2017-11-02 09:53:08 +1100 | [diff] [blame] | 256 | * [Logging][TraceExporterLogging] |
| 257 | * [Stackdriver][TraceExporterStackdriver] |
| 258 | * [Zipkin][TraceExporterZipkin] |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 259 | |
| 260 | #### Stats exporters |
Yang Song | 195946a | 2017-11-09 16:00:10 -0800 | [diff] [blame] | 261 | * [Stackdriver][StatsExporterStackdriver] |
Maxime Petazzoni | 64d0583 | 2018-01-17 09:09:13 -0800 | [diff] [blame] | 262 | * [SignalFx][StatsExporterSignalFx] |
Yang Song | 8df5b60 | 2018-02-16 18:38:04 -0800 | [diff] [blame] | 263 | * [Prometheus][StatsExporterPrometheus] |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 264 | |
| 265 | ### How to setup debugging Z-Pages? |
| 266 | |
Fabian Lange | 17a1a1a | 2018-02-09 14:33:30 -0500 | [diff] [blame] | 267 | If the application owner wants to export in-process tracing and stats data via HTML debugging pages |
Bogdan Drutu | a79694b | 2017-08-29 23:56:25 -0700 | [diff] [blame] | 268 | see this [link](https://github.com/census-instrumentation/opencensus-java/tree/master/contrib/zpages#quickstart). |
Bogdan Drutu | fe82160 | 2017-08-11 18:50:37 +0300 | [diff] [blame] | 269 | |
Yang Song | 8ff0667 | 2018-06-29 12:07:53 -0700 | [diff] [blame] | 270 | ## Versioning |
| 271 | |
| 272 | This library follows [Semantic Versioning][semver]. |
| 273 | |
| 274 | **GA**: Libraries defined at a GA quality level are stable, and will not introduce |
| 275 | backwards-incompatible changes in any minor or patch releases. We will address issues and requests |
| 276 | with the highest priority. If we were to make a backwards-incompatible changes on an API, we will |
| 277 | first mark the existing API as deprecated and keep it for 18 months before removing it. |
| 278 | |
| 279 | **Beta**: Libraries defined at a Beta quality level are expected to be mostly stable and we're |
| 280 | working towards their release candidate. We will address issues and requests with a higher priority. |
| 281 | There may be backwards incompatible changes in a minor version release, though not in a patch |
| 282 | release. If an element is part of an API that is only meant to be used by exporters or other |
| 283 | opencensus libraries, then there is no deprecation period. Otherwise, we will deprecate it for 18 |
| 284 | months before removing it, if possible. |
| 285 | |
Bogdan Drutu | fe82160 | 2017-08-11 18:50:37 +0300 | [diff] [blame] | 286 | [travis-image]: https://travis-ci.org/census-instrumentation/opencensus-java.svg?branch=master |
| 287 | [travis-url]: https://travis-ci.org/census-instrumentation/opencensus-java |
| 288 | [appveyor-image]: https://ci.appveyor.com/api/projects/status/hxthmpkxar4jq4be/branch/master?svg=true |
Kristen Kozak | f891963 | 2017-10-03 12:42:20 -0700 | [diff] [blame] | 289 | [appveyor-url]: https://ci.appveyor.com/project/opencensusjavateam/opencensus-java/branch/master |
Bogdan Drutu | 6e1ab48 | 2017-11-30 17:17:58 -0800 | [diff] [blame] | 290 | [javadoc-image]: https://www.javadoc.io/badge/io.opencensus/opencensus-api.svg |
| 291 | [javadoc-url]: https://www.javadoc.io/doc/io.opencensus/opencensus-api |
Bogdan Drutu | fe82160 | 2017-08-11 18:50:37 +0300 | [diff] [blame] | 292 | [maven-image]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-api/badge.svg |
Bogdan Drutu | e9be1f2 | 2017-09-30 16:35:39 -0400 | [diff] [blame] | 293 | [maven-url]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-api |
Bogdan Drutu | e9be1f2 | 2017-09-30 16:35:39 -0400 | [diff] [blame] | 294 | [gitter-image]: https://badges.gitter.im/census-instrumentation/lobby.svg |
Bogdan Drutu | 19bad53 | 2017-11-02 09:53:08 +1100 | [diff] [blame] | 295 | [gitter-url]: https://gitter.im/census-instrumentation/lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge |
Kristen Kozak | f418085 | 2018-02-05 12:31:14 -0800 | [diff] [blame] | 296 | [codecov-image]: https://codecov.io/gh/census-instrumentation/opencensus-java/branch/master/graph/badge.svg |
| 297 | [codecov-url]: https://codecov.io/gh/census-instrumentation/opencensus-java/branch/master/ |
Yang Song | 8ff0667 | 2018-06-29 12:07:53 -0700 | [diff] [blame] | 298 | [semver]: http://semver.org/ |
Fabian Lange | 17a1a1a | 2018-02-09 14:33:30 -0500 | [diff] [blame] | 299 | [TraceExporterInstana]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/instana#quickstart |
Yang Song | 9b6eb8c | 2018-03-16 11:00:43 -0700 | [diff] [blame] | 300 | [TraceExporterJaeger]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/jaeger#quickstart |
Bogdan Drutu | 19bad53 | 2017-11-02 09:53:08 +1100 | [diff] [blame] | 301 | [TraceExporterLogging]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/logging#quickstart |
| 302 | [TraceExporterStackdriver]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/stackdriver#quickstart |
| 303 | [TraceExporterZipkin]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/zipkin#quickstart |
Yang Song | 195946a | 2017-11-09 16:00:10 -0800 | [diff] [blame] | 304 | [StatsExporterStackdriver]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/stats/stackdriver#quickstart |
Maxime Petazzoni | 64d0583 | 2018-01-17 09:09:13 -0800 | [diff] [blame] | 305 | [StatsExporterSignalFx]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/stats/signalfx#quickstart |
Yang Song | 35bf957 | 2018-03-06 19:44:03 -0800 | [diff] [blame] | 306 | [StatsExporterPrometheus]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/stats/prometheus#quickstart |