1*a24ffb47SSadaf Ebrahimi> **Warning** 2*a24ffb47SSadaf Ebrahimi> 3*a24ffb47SSadaf Ebrahimi> OpenCensus and OpenTracing have merged to form [OpenTelemetry](https://opentelemetry.io), which serves as the next major version of OpenCensus and OpenTracing. 4*a24ffb47SSadaf Ebrahimi> 5*a24ffb47SSadaf Ebrahimi> OpenTelemetry has now reached feature parity with OpenCensus, with tracing and metrics SDKs available in .NET, Golang, Java, NodeJS, and Python. **All OpenCensus Github repositories, except [census-instrumentation/opencensus-python](https://github.com/census-instrumentation/opencensus-python), will be archived on July 31st, 2023**. We encourage users to migrate to OpenTelemetry by this date. 6*a24ffb47SSadaf Ebrahimi> 7*a24ffb47SSadaf Ebrahimi> To help you gradually migrate your instrumentation to OpenTelemetry, bridges are available in Java, Go, Python, and JS. [**Read the full blog post to learn more**](https://opentelemetry.io/blog/2023/sunsetting-opencensus/). 8*a24ffb47SSadaf Ebrahimi 9*a24ffb47SSadaf Ebrahimi# OpenCensus - A stats collection and distributed tracing framework 10*a24ffb47SSadaf Ebrahimi[![Gitter chat][gitter-image]][gitter-url] 11*a24ffb47SSadaf Ebrahimi[![Maven Central][maven-image]][maven-url] 12*a24ffb47SSadaf Ebrahimi[![Javadocs][javadoc-image]][javadoc-url] 13*a24ffb47SSadaf Ebrahimi[![Build Status][travis-image]][travis-url] 14*a24ffb47SSadaf Ebrahimi[![Windows Build Status][appveyor-image]][appveyor-url] 15*a24ffb47SSadaf Ebrahimi[![Coverage Status][codecov-image]][codecov-url] 16*a24ffb47SSadaf Ebrahimi 17*a24ffb47SSadaf Ebrahimi> :exclamation: The [opencensus-contrib-log-correlation-log4j2](https://github.com/census-instrumentation/opencensus-java/tree/master/contrib/log_correlation/stackdriver) 18*a24ffb47SSadaf Ebrahimi> Java client library is part of the OpenCensus project. 19*a24ffb47SSadaf Ebrahimi> [CVE-2021-44228](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228) 20*a24ffb47SSadaf Ebrahimi> and [CVE-2021-45046](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45046) disclosed 21*a24ffb47SSadaf Ebrahimi> security vulnerabilities in the Apache Log4j 2 version 2.15 or below. The recent version 22*a24ffb47SSadaf Ebrahimi> v0.28.3 depends on Log4j 2.11.1. A number of previous versions also depend on vulnerable 23*a24ffb47SSadaf Ebrahimi> Log4j versions. 24*a24ffb47SSadaf Ebrahimi> 25*a24ffb47SSadaf Ebrahimi> :exclamation: We merged several fixes and published a release that depends on a safe version of 26*a24ffb47SSadaf Ebrahimi> Log4j (2.16). **We strongly encourage customers who depend on the 27*a24ffb47SSadaf Ebrahimi> opencensus-contrib-log-correlation-log4j2 library to upgrade to the latest 28*a24ffb47SSadaf Ebrahimi> release [(v0.30.0)](https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-log-correlation-log4j2/0.30.0/).** 29*a24ffb47SSadaf Ebrahimi 30*a24ffb47SSadaf EbrahimiOpenCensus is a toolkit for collecting application performance and behavior data. It currently 31*a24ffb47SSadaf Ebrahimiincludes 3 apis: stats, tracing and tags. 32*a24ffb47SSadaf Ebrahimi 33*a24ffb47SSadaf EbrahimiThe library is in [Beta](#versioning) stage and APIs are expected to be mostly stable. 34*a24ffb47SSadaf Ebrahimi 35*a24ffb47SSadaf EbrahimiPlease join [gitter](https://gitter.im/census-instrumentation/Lobby) for help or feedback on this 36*a24ffb47SSadaf Ebrahimiproject. 37*a24ffb47SSadaf Ebrahimi 38*a24ffb47SSadaf Ebrahimi**OpenCensus and OpenTracing have merged to form OpenTelemetry, which serves as the next major version of OpenCensus and OpenTracing. OpenTelemetry will offer backwards compatibility with existing OpenCensus integrations, and we will continue to make security patches to existing OpenCensus libraries for two years. Read more about the merger [here](https://medium.com/opentracing/a-roadmap-to-convergence-b074e5815289).** 39*a24ffb47SSadaf Ebrahimi 40*a24ffb47SSadaf Ebrahimi## OpenCensus Quickstart for Libraries 41*a24ffb47SSadaf Ebrahimi 42*a24ffb47SSadaf EbrahimiIntegrating OpenCensus with a new library means recording stats or traces and propagating context. 43*a24ffb47SSadaf EbrahimiFor application integration please see [Quickstart for Applications](https://github.com/census-instrumentation/opencensus-java#quickstart-for-applications). 44*a24ffb47SSadaf Ebrahimi 45*a24ffb47SSadaf EbrahimiThe full quick start example can also be found on the [OpenCensus website](https://opencensus.io/quickstart/java/). 46*a24ffb47SSadaf Ebrahimi 47*a24ffb47SSadaf Ebrahimi### Add the dependencies to your project 48*a24ffb47SSadaf Ebrahimi 49*a24ffb47SSadaf EbrahimiFor Maven add to your `pom.xml`: 50*a24ffb47SSadaf Ebrahimi```xml 51*a24ffb47SSadaf Ebrahimi<dependencies> 52*a24ffb47SSadaf Ebrahimi <dependency> 53*a24ffb47SSadaf Ebrahimi <groupId>io.opencensus</groupId> 54*a24ffb47SSadaf Ebrahimi <artifactId>opencensus-api</artifactId> 55*a24ffb47SSadaf Ebrahimi <version>0.30.0</version> 56*a24ffb47SSadaf Ebrahimi </dependency> 57*a24ffb47SSadaf Ebrahimi</dependencies> 58*a24ffb47SSadaf Ebrahimi``` 59*a24ffb47SSadaf Ebrahimi 60*a24ffb47SSadaf EbrahimiFor Gradle add to your dependencies: 61*a24ffb47SSadaf Ebrahimi```groovy 62*a24ffb47SSadaf Ebrahimicompile 'io.opencensus:opencensus-api:0.30.0' 63*a24ffb47SSadaf Ebrahimi``` 64*a24ffb47SSadaf Ebrahimi 65*a24ffb47SSadaf Ebrahimi### Hello "OpenCensus" trace events 66*a24ffb47SSadaf Ebrahimi 67*a24ffb47SSadaf EbrahimiHere's an example of creating a Span and record some trace annotations. Notice that recording the 68*a24ffb47SSadaf Ebrahimiannotations is possible because we propagate scope. 3rd parties libraries like SLF4J can integrate 69*a24ffb47SSadaf Ebrahimithe same way. 70*a24ffb47SSadaf Ebrahimi 71*a24ffb47SSadaf Ebrahimi```java 72*a24ffb47SSadaf Ebrahimiimport io.opencensus.common.Scope; 73*a24ffb47SSadaf Ebrahimiimport io.opencensus.trace.Tracer; 74*a24ffb47SSadaf Ebrahimiimport io.opencensus.trace.Tracing; 75*a24ffb47SSadaf Ebrahimiimport io.opencensus.trace.samplers.Samplers; 76*a24ffb47SSadaf Ebrahimi 77*a24ffb47SSadaf Ebrahimipublic final class MyClassWithTracing { 78*a24ffb47SSadaf Ebrahimi private static final Tracer tracer = Tracing.getTracer(); 79*a24ffb47SSadaf Ebrahimi 80*a24ffb47SSadaf Ebrahimi public static void doWork() { 81*a24ffb47SSadaf Ebrahimi // Create a child Span of the current Span. Always record events for this span and force it to 82*a24ffb47SSadaf Ebrahimi // be sampled. This makes it easier to try out the example, but unless you have a clear use 83*a24ffb47SSadaf Ebrahimi // case, you don't need to explicitly set record events or sampler. 84*a24ffb47SSadaf Ebrahimi try (Scope ss = 85*a24ffb47SSadaf Ebrahimi tracer 86*a24ffb47SSadaf Ebrahimi .spanBuilder("MyChildWorkSpan") 87*a24ffb47SSadaf Ebrahimi .setRecordEvents(true) 88*a24ffb47SSadaf Ebrahimi .setSampler(Samplers.alwaysSample()) 89*a24ffb47SSadaf Ebrahimi .startScopedSpan()) { 90*a24ffb47SSadaf Ebrahimi doInitialWork(); 91*a24ffb47SSadaf Ebrahimi tracer.getCurrentSpan().addAnnotation("Finished initial work"); 92*a24ffb47SSadaf Ebrahimi doFinalWork(); 93*a24ffb47SSadaf Ebrahimi } 94*a24ffb47SSadaf Ebrahimi } 95*a24ffb47SSadaf Ebrahimi 96*a24ffb47SSadaf Ebrahimi private static void doInitialWork() { 97*a24ffb47SSadaf Ebrahimi // ... 98*a24ffb47SSadaf Ebrahimi tracer.getCurrentSpan().addAnnotation("Important."); 99*a24ffb47SSadaf Ebrahimi // ... 100*a24ffb47SSadaf Ebrahimi } 101*a24ffb47SSadaf Ebrahimi 102*a24ffb47SSadaf Ebrahimi private static void doFinalWork() { 103*a24ffb47SSadaf Ebrahimi // ... 104*a24ffb47SSadaf Ebrahimi tracer.getCurrentSpan().addAnnotation("More important."); 105*a24ffb47SSadaf Ebrahimi // ... 106*a24ffb47SSadaf Ebrahimi } 107*a24ffb47SSadaf Ebrahimi} 108*a24ffb47SSadaf Ebrahimi``` 109*a24ffb47SSadaf Ebrahimi 110*a24ffb47SSadaf Ebrahimi### Hello "OpenCensus" stats events 111*a24ffb47SSadaf Ebrahimi 112*a24ffb47SSadaf EbrahimiHere's an example on 113*a24ffb47SSadaf Ebrahimi * defining TagKey, Measure and View, 114*a24ffb47SSadaf Ebrahimi * registering a view, 115*a24ffb47SSadaf Ebrahimi * putting TagKey and TagValue into a scoped TagContext, 116*a24ffb47SSadaf Ebrahimi * recording stats against current TagContext, 117*a24ffb47SSadaf Ebrahimi * getting ViewData. 118*a24ffb47SSadaf Ebrahimi 119*a24ffb47SSadaf Ebrahimi 120*a24ffb47SSadaf EbrahimiFor the complete example, see 121*a24ffb47SSadaf Ebrahimi[here](https://github.com/census-instrumentation/opencensus-java/blob/master/examples/src/main/java/io/opencensus/examples/helloworld/QuickStart.java). 122*a24ffb47SSadaf Ebrahimi 123*a24ffb47SSadaf Ebrahimi```java 124*a24ffb47SSadaf Ebrahimiimport io.opencensus.common.Scope; 125*a24ffb47SSadaf Ebrahimiimport io.opencensus.stats.Aggregation; 126*a24ffb47SSadaf Ebrahimiimport io.opencensus.stats.BucketBoundaries; 127*a24ffb47SSadaf Ebrahimiimport io.opencensus.stats.Measure.MeasureLong; 128*a24ffb47SSadaf Ebrahimiimport io.opencensus.stats.Stats; 129*a24ffb47SSadaf Ebrahimiimport io.opencensus.stats.StatsRecorder; 130*a24ffb47SSadaf Ebrahimiimport io.opencensus.stats.View; 131*a24ffb47SSadaf Ebrahimiimport io.opencensus.stats.ViewData; 132*a24ffb47SSadaf Ebrahimiimport io.opencensus.stats.ViewManager; 133*a24ffb47SSadaf Ebrahimiimport io.opencensus.tags.TagKey; 134*a24ffb47SSadaf Ebrahimiimport io.opencensus.tags.TagValue; 135*a24ffb47SSadaf Ebrahimiimport io.opencensus.tags.Tagger; 136*a24ffb47SSadaf Ebrahimiimport io.opencensus.tags.Tags; 137*a24ffb47SSadaf Ebrahimiimport java.util.Arrays; 138*a24ffb47SSadaf Ebrahimiimport java.util.Collections; 139*a24ffb47SSadaf Ebrahimi 140*a24ffb47SSadaf Ebrahimipublic final class MyClassWithStats { 141*a24ffb47SSadaf Ebrahimi private static final Tagger tagger = Tags.getTagger(); 142*a24ffb47SSadaf Ebrahimi private static final ViewManager viewManager = Stats.getViewManager(); 143*a24ffb47SSadaf Ebrahimi private static final StatsRecorder statsRecorder = Stats.getStatsRecorder(); 144*a24ffb47SSadaf Ebrahimi 145*a24ffb47SSadaf Ebrahimi // frontendKey allows us to break down the recorded data 146*a24ffb47SSadaf Ebrahimi private static final TagKey FRONTEND_KEY = TagKey.create("myorg_keys_frontend"); 147*a24ffb47SSadaf Ebrahimi 148*a24ffb47SSadaf Ebrahimi // videoSize will measure the size of processed videos. 149*a24ffb47SSadaf Ebrahimi private static final MeasureLong VIDEO_SIZE = 150*a24ffb47SSadaf Ebrahimi MeasureLong.create("my.org/measure/video_size", "size of processed videos", "By"); 151*a24ffb47SSadaf Ebrahimi 152*a24ffb47SSadaf Ebrahimi // Create view to see the processed video size distribution broken down by frontend. 153*a24ffb47SSadaf Ebrahimi // The view has bucket boundaries (0, 256, 65536) that will group measure values into 154*a24ffb47SSadaf Ebrahimi // histogram buckets. 155*a24ffb47SSadaf Ebrahimi private static final View.Name VIDEO_SIZE_VIEW_NAME = View.Name.create("my.org/views/video_size"); 156*a24ffb47SSadaf Ebrahimi private static final View VIDEO_SIZE_VIEW = 157*a24ffb47SSadaf Ebrahimi View.create( 158*a24ffb47SSadaf Ebrahimi VIDEO_SIZE_VIEW_NAME, 159*a24ffb47SSadaf Ebrahimi "processed video size over time", 160*a24ffb47SSadaf Ebrahimi VIDEO_SIZE, 161*a24ffb47SSadaf Ebrahimi Aggregation.Distribution.create( 162*a24ffb47SSadaf Ebrahimi BucketBoundaries.create(Arrays.asList(0.0, 256.0, 65536.0))), 163*a24ffb47SSadaf Ebrahimi Collections.singletonList(FRONTEND_KEY)); 164*a24ffb47SSadaf Ebrahimi 165*a24ffb47SSadaf Ebrahimi public static void initialize() { 166*a24ffb47SSadaf Ebrahimi // ... 167*a24ffb47SSadaf Ebrahimi viewManager.registerView(VIDEO_SIZE_VIEW); 168*a24ffb47SSadaf Ebrahimi } 169*a24ffb47SSadaf Ebrahimi 170*a24ffb47SSadaf Ebrahimi public static void processVideo() { 171*a24ffb47SSadaf Ebrahimi try (Scope scopedTags = 172*a24ffb47SSadaf Ebrahimi tagger 173*a24ffb47SSadaf Ebrahimi .currentBuilder() 174*a24ffb47SSadaf Ebrahimi .put(FRONTEND_KEY, TagValue.create("mobile-ios9.3.5")) 175*a24ffb47SSadaf Ebrahimi .buildScoped()) { 176*a24ffb47SSadaf Ebrahimi // Processing video. 177*a24ffb47SSadaf Ebrahimi // ... 178*a24ffb47SSadaf Ebrahimi 179*a24ffb47SSadaf Ebrahimi // Record the processed video size. 180*a24ffb47SSadaf Ebrahimi statsRecorder.newMeasureMap().put(VIDEO_SIZE, 25648).record(); 181*a24ffb47SSadaf Ebrahimi } 182*a24ffb47SSadaf Ebrahimi } 183*a24ffb47SSadaf Ebrahimi 184*a24ffb47SSadaf Ebrahimi public static void printStats() { 185*a24ffb47SSadaf Ebrahimi ViewData viewData = viewManager.getView(VIDEO_SIZE_VIEW_NAME); 186*a24ffb47SSadaf Ebrahimi System.out.println( 187*a24ffb47SSadaf Ebrahimi String.format("Recorded stats for %s:\n %s", VIDEO_SIZE_VIEW_NAME.asString(), viewData)); 188*a24ffb47SSadaf Ebrahimi } 189*a24ffb47SSadaf Ebrahimi} 190*a24ffb47SSadaf Ebrahimi``` 191*a24ffb47SSadaf Ebrahimi 192*a24ffb47SSadaf Ebrahimi## OpenCensus Quickstart for Applications 193*a24ffb47SSadaf Ebrahimi 194*a24ffb47SSadaf EbrahimiBesides recording tracing/stats events the application also need to link the implementation, 195*a24ffb47SSadaf Ebrahimisetup exporters, and debugging [Z-Pages](https://github.com/census-instrumentation/opencensus-java/tree/master/contrib/zpages). 196*a24ffb47SSadaf Ebrahimi 197*a24ffb47SSadaf Ebrahimi### Add the dependencies to your project 198*a24ffb47SSadaf Ebrahimi 199*a24ffb47SSadaf EbrahimiFor Maven add to your `pom.xml`: 200*a24ffb47SSadaf Ebrahimi```xml 201*a24ffb47SSadaf Ebrahimi<dependencies> 202*a24ffb47SSadaf Ebrahimi <dependency> 203*a24ffb47SSadaf Ebrahimi <groupId>io.opencensus</groupId> 204*a24ffb47SSadaf Ebrahimi <artifactId>opencensus-api</artifactId> 205*a24ffb47SSadaf Ebrahimi <version>0.30.0</version> 206*a24ffb47SSadaf Ebrahimi </dependency> 207*a24ffb47SSadaf Ebrahimi <dependency> 208*a24ffb47SSadaf Ebrahimi <groupId>io.opencensus</groupId> 209*a24ffb47SSadaf Ebrahimi <artifactId>opencensus-impl</artifactId> 210*a24ffb47SSadaf Ebrahimi <version>0.30.0</version> 211*a24ffb47SSadaf Ebrahimi <scope>runtime</scope> 212*a24ffb47SSadaf Ebrahimi </dependency> 213*a24ffb47SSadaf Ebrahimi</dependencies> 214*a24ffb47SSadaf Ebrahimi``` 215*a24ffb47SSadaf Ebrahimi 216*a24ffb47SSadaf EbrahimiFor Gradle add to your dependencies: 217*a24ffb47SSadaf Ebrahimi```groovy 218*a24ffb47SSadaf Ebrahimicompile 'io.opencensus:opencensus-api:0.30.0' 219*a24ffb47SSadaf Ebrahimiruntime 'io.opencensus:opencensus-impl:0.30.0' 220*a24ffb47SSadaf Ebrahimi``` 221*a24ffb47SSadaf Ebrahimi 222*a24ffb47SSadaf Ebrahimi### How to setup exporters? 223*a24ffb47SSadaf Ebrahimi 224*a24ffb47SSadaf Ebrahimi#### Trace exporters 225*a24ffb47SSadaf Ebrahimi* [Instana][TraceExporterInstana] 226*a24ffb47SSadaf Ebrahimi* [Jaeger][TraceExporterJaeger] 227*a24ffb47SSadaf Ebrahimi* [Logging][TraceExporterLogging] 228*a24ffb47SSadaf Ebrahimi* [Stackdriver][TraceExporterStackdriver] 229*a24ffb47SSadaf Ebrahimi* [Zipkin][TraceExporterZipkin] 230*a24ffb47SSadaf Ebrahimi 231*a24ffb47SSadaf Ebrahimi#### Stats exporters 232*a24ffb47SSadaf Ebrahimi* [Stackdriver][StatsExporterStackdriver] 233*a24ffb47SSadaf Ebrahimi* [SignalFx][StatsExporterSignalFx] 234*a24ffb47SSadaf Ebrahimi* [Prometheus][StatsExporterPrometheus] 235*a24ffb47SSadaf Ebrahimi 236*a24ffb47SSadaf Ebrahimi### How to setup debugging Z-Pages? 237*a24ffb47SSadaf Ebrahimi 238*a24ffb47SSadaf EbrahimiIf the application owner wants to export in-process tracing and stats data via HTML debugging pages 239*a24ffb47SSadaf Ebrahimisee this [link](https://github.com/census-instrumentation/opencensus-java/tree/master/contrib/zpages#quickstart). 240*a24ffb47SSadaf Ebrahimi 241*a24ffb47SSadaf Ebrahimi## Versioning 242*a24ffb47SSadaf Ebrahimi 243*a24ffb47SSadaf EbrahimiThis library follows [Semantic Versioning][semver]. 244*a24ffb47SSadaf Ebrahimi 245*a24ffb47SSadaf Ebrahimi**GA**: Libraries defined at a GA quality level are stable, and will not introduce 246*a24ffb47SSadaf Ebrahimibackwards-incompatible changes in any minor or patch releases. We will address issues and requests 247*a24ffb47SSadaf Ebrahimiwith the highest priority. If we were to make a backwards-incompatible changes on an API, we will 248*a24ffb47SSadaf Ebrahimifirst mark the existing API as deprecated and keep it for 18 months before removing it. 249*a24ffb47SSadaf Ebrahimi 250*a24ffb47SSadaf Ebrahimi**Beta**: Libraries defined at a Beta quality level are expected to be mostly stable and we're 251*a24ffb47SSadaf Ebrahimiworking towards their release candidate. We will address issues and requests with a higher priority. 252*a24ffb47SSadaf EbrahimiThere may be backwards incompatible changes in a minor version release, though not in a patch 253*a24ffb47SSadaf Ebrahimirelease. If an element is part of an API that is only meant to be used by exporters or other 254*a24ffb47SSadaf Ebrahimiopencensus libraries, then there is no deprecation period. Otherwise, we will deprecate it for 18 255*a24ffb47SSadaf Ebrahimimonths before removing it, if possible. 256*a24ffb47SSadaf Ebrahimi 257*a24ffb47SSadaf Ebrahimi[travis-image]: https://travis-ci.org/census-instrumentation/opencensus-java.svg?branch=master 258*a24ffb47SSadaf Ebrahimi[travis-url]: https://travis-ci.org/census-instrumentation/opencensus-java 259*a24ffb47SSadaf Ebrahimi[appveyor-image]: https://ci.appveyor.com/api/projects/status/hxthmpkxar4jq4be/branch/master?svg=true 260*a24ffb47SSadaf Ebrahimi[appveyor-url]: https://ci.appveyor.com/project/opencensusjavateam/opencensus-java/branch/master 261*a24ffb47SSadaf Ebrahimi[javadoc-image]: https://www.javadoc.io/badge/io.opencensus/opencensus-api.svg 262*a24ffb47SSadaf Ebrahimi[javadoc-url]: https://www.javadoc.io/doc/io.opencensus/opencensus-api 263*a24ffb47SSadaf Ebrahimi[maven-image]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-api/badge.svg 264*a24ffb47SSadaf Ebrahimi[maven-url]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-api 265*a24ffb47SSadaf Ebrahimi[gitter-image]: https://badges.gitter.im/census-instrumentation/lobby.svg 266*a24ffb47SSadaf Ebrahimi[gitter-url]: https://gitter.im/census-instrumentation/lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge 267*a24ffb47SSadaf Ebrahimi[codecov-image]: https://codecov.io/gh/census-instrumentation/opencensus-java/branch/master/graph/badge.svg 268*a24ffb47SSadaf Ebrahimi[codecov-url]: https://codecov.io/gh/census-instrumentation/opencensus-java/branch/master/ 269*a24ffb47SSadaf Ebrahimi[semver]: http://semver.org/ 270*a24ffb47SSadaf Ebrahimi[TraceExporterInstana]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/instana#quickstart 271*a24ffb47SSadaf Ebrahimi[TraceExporterJaeger]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/jaeger#quickstart 272*a24ffb47SSadaf Ebrahimi[TraceExporterLogging]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/logging#quickstart 273*a24ffb47SSadaf Ebrahimi[TraceExporterStackdriver]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/stackdriver#quickstart 274*a24ffb47SSadaf Ebrahimi[TraceExporterZipkin]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/trace/zipkin#quickstart 275*a24ffb47SSadaf Ebrahimi[StatsExporterStackdriver]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/stats/stackdriver#quickstart 276*a24ffb47SSadaf Ebrahimi[StatsExporterSignalFx]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/stats/signalfx#quickstart 277*a24ffb47SSadaf Ebrahimi[StatsExporterPrometheus]: https://github.com/census-instrumentation/opencensus-java/tree/master/exporters/stats/prometheus#quickstart 278