1*a24ffb47SSadaf Ebrahimi# OpenCensus Stackdriver Trace Exporter 2*a24ffb47SSadaf Ebrahimi[![Build Status][travis-image]][travis-url] 3*a24ffb47SSadaf Ebrahimi[![Windows Build Status][appveyor-image]][appveyor-url] 4*a24ffb47SSadaf Ebrahimi[![Maven Central][maven-image]][maven-url] 5*a24ffb47SSadaf Ebrahimi 6*a24ffb47SSadaf EbrahimiThe *OpenCensus Stackdriver Trace Exporter* is a trace exporter that exports data to 7*a24ffb47SSadaf EbrahimiStackdriver Trace. [Stackdriver Trace][stackdriver-trace] is a distributed 8*a24ffb47SSadaf Ebrahimitracing system that collects latency data from your applications and displays it in the Google 9*a24ffb47SSadaf EbrahimiCloud Platform Console. You can track how requests propagate through your application and receive 10*a24ffb47SSadaf Ebrahimidetailed near real-time performance insights. 11*a24ffb47SSadaf Ebrahimi 12*a24ffb47SSadaf Ebrahimi## Quickstart 13*a24ffb47SSadaf Ebrahimi 14*a24ffb47SSadaf Ebrahimi### Prerequisites 15*a24ffb47SSadaf Ebrahimi 16*a24ffb47SSadaf EbrahimiTo use this exporter, you must have an application that you'd like to trace. The app can be on 17*a24ffb47SSadaf EbrahimiGoogle Cloud Platform, on-premise, or another cloud platform. 18*a24ffb47SSadaf Ebrahimi 19*a24ffb47SSadaf EbrahimiIn order to be able to push your traces to [Stackdriver Trace][stackdriver-trace], you must: 20*a24ffb47SSadaf Ebrahimi 21*a24ffb47SSadaf Ebrahimi1. [Create a Cloud project](https://support.google.com/cloud/answer/6251787?hl=en). 22*a24ffb47SSadaf Ebrahimi2. [Enable billing](https://support.google.com/cloud/answer/6288653#new-billing). 23*a24ffb47SSadaf Ebrahimi3. [Enable the Stackdriver Trace API](https://console.cloud.google.com/apis/api/cloudtrace.googleapis.com/overview). 24*a24ffb47SSadaf Ebrahimi 25*a24ffb47SSadaf EbrahimiThese steps enable the API but don't require that your app is hosted on Google Cloud Platform. 26*a24ffb47SSadaf Ebrahimi 27*a24ffb47SSadaf Ebrahimi### Hello "Stackdriver Trace" 28*a24ffb47SSadaf Ebrahimi 29*a24ffb47SSadaf Ebrahimi#### Add the dependencies to your project 30*a24ffb47SSadaf Ebrahimi 31*a24ffb47SSadaf EbrahimiFor Maven add to your `pom.xml`: 32*a24ffb47SSadaf Ebrahimi```xml 33*a24ffb47SSadaf Ebrahimi<dependencies> 34*a24ffb47SSadaf Ebrahimi <dependency> 35*a24ffb47SSadaf Ebrahimi <groupId>io.opencensus</groupId> 36*a24ffb47SSadaf Ebrahimi <artifactId>opencensus-api</artifactId> 37*a24ffb47SSadaf Ebrahimi <version>0.28.3</version> 38*a24ffb47SSadaf Ebrahimi </dependency> 39*a24ffb47SSadaf Ebrahimi <dependency> 40*a24ffb47SSadaf Ebrahimi <groupId>io.opencensus</groupId> 41*a24ffb47SSadaf Ebrahimi <artifactId>opencensus-exporter-trace-stackdriver</artifactId> 42*a24ffb47SSadaf Ebrahimi <version>0.28.3</version> 43*a24ffb47SSadaf Ebrahimi </dependency> 44*a24ffb47SSadaf Ebrahimi <dependency> 45*a24ffb47SSadaf Ebrahimi <groupId>io.opencensus</groupId> 46*a24ffb47SSadaf Ebrahimi <artifactId>opencensus-impl</artifactId> 47*a24ffb47SSadaf Ebrahimi <version>0.28.3</version> 48*a24ffb47SSadaf Ebrahimi <scope>runtime</scope> 49*a24ffb47SSadaf Ebrahimi </dependency> 50*a24ffb47SSadaf Ebrahimi</dependencies> 51*a24ffb47SSadaf Ebrahimi``` 52*a24ffb47SSadaf Ebrahimi 53*a24ffb47SSadaf EbrahimiFor Gradle add to your dependencies: 54*a24ffb47SSadaf Ebrahimi```groovy 55*a24ffb47SSadaf Ebrahimicompile 'io.opencensus:opencensus-api:0.28.3' 56*a24ffb47SSadaf Ebrahimicompile 'io.opencensus:opencensus-exporter-trace-stackdriver:0.28.3' 57*a24ffb47SSadaf Ebrahimiruntime 'io.opencensus:opencensus-impl:0.28.3' 58*a24ffb47SSadaf Ebrahimi``` 59*a24ffb47SSadaf Ebrahimi 60*a24ffb47SSadaf Ebrahimi#### Register the exporter 61*a24ffb47SSadaf Ebrahimi 62*a24ffb47SSadaf EbrahimiThis uses the default configuration for authentication and project ID. 63*a24ffb47SSadaf Ebrahimi 64*a24ffb47SSadaf Ebrahimi```java 65*a24ffb47SSadaf Ebrahimipublic class MyMainClass { 66*a24ffb47SSadaf Ebrahimi public static void main(String[] args) throws Exception { 67*a24ffb47SSadaf Ebrahimi StackdriverTraceExporter.createAndRegister( 68*a24ffb47SSadaf Ebrahimi StackdriverTraceConfiguration.builder().build()); 69*a24ffb47SSadaf Ebrahimi // ... 70*a24ffb47SSadaf Ebrahimi } 71*a24ffb47SSadaf Ebrahimi} 72*a24ffb47SSadaf Ebrahimi``` 73*a24ffb47SSadaf Ebrahimi 74*a24ffb47SSadaf Ebrahimi#### Authentication 75*a24ffb47SSadaf Ebrahimi 76*a24ffb47SSadaf EbrahimiThis exporter uses [google-cloud-java](https://github.com/GoogleCloudPlatform/google-cloud-java), 77*a24ffb47SSadaf Ebrahimifor details about how to configure the authentication see [here](https://github.com/GoogleCloudPlatform/google-cloud-java#authentication). 78*a24ffb47SSadaf Ebrahimi 79*a24ffb47SSadaf EbrahimiIf you prefer to manually set the credentials use: 80*a24ffb47SSadaf Ebrahimi``` 81*a24ffb47SSadaf EbrahimiStackdriverTraceExporter.createAndRegisterWithCredentialsAndProjectId( 82*a24ffb47SSadaf Ebrahimi new GoogleCredentials(new AccessToken(accessToken, expirationTime)), 83*a24ffb47SSadaf Ebrahimi "MyStackdriverProjectId"); 84*a24ffb47SSadaf Ebrahimi``` 85*a24ffb47SSadaf Ebrahimi 86*a24ffb47SSadaf Ebrahimi#### Specifying a Project ID 87*a24ffb47SSadaf Ebrahimi 88*a24ffb47SSadaf EbrahimiThis exporter uses [google-cloud-java](https://github.com/GoogleCloudPlatform/google-cloud-java), 89*a24ffb47SSadaf Ebrahimifor details about how to configure the project ID see [here](https://github.com/GoogleCloudPlatform/google-cloud-java#specifying-a-project-id). 90*a24ffb47SSadaf Ebrahimi 91*a24ffb47SSadaf EbrahimiIf you prefer to manually set the project ID use: 92*a24ffb47SSadaf Ebrahimi``` 93*a24ffb47SSadaf EbrahimiStackdriverTraceExporter.createAndRegisterWithProjectId("MyStackdriverProjectId"); 94*a24ffb47SSadaf Ebrahimi``` 95*a24ffb47SSadaf Ebrahimi 96*a24ffb47SSadaf Ebrahimi#### Enable Stackdriver Trace API access scope on Google Cloud Platform 97*a24ffb47SSadaf EbrahimiIf your Stackdriver Trace Exporter is running on Kubernetes Engine or Compute Engine, 98*a24ffb47SSadaf Ebrahimiyou might need additional setup to explicitly enable the ```trace.append``` Stackdriver 99*a24ffb47SSadaf EbrahimiTrace API access scope. To do that, please follow the instructions for 100*a24ffb47SSadaf Ebrahimi[GKE](https://cloud.google.com/trace/docs/setup/java#kubernetes_engine) or 101*a24ffb47SSadaf Ebrahimi[GCE](https://cloud.google.com/trace/docs/setup/java#compute_engine). 102*a24ffb47SSadaf Ebrahimi 103*a24ffb47SSadaf Ebrahimi#### Java Versions 104*a24ffb47SSadaf Ebrahimi 105*a24ffb47SSadaf EbrahimiJava 7 or above is required for using this exporter. 106*a24ffb47SSadaf Ebrahimi 107*a24ffb47SSadaf Ebrahimi## FAQ 108*a24ffb47SSadaf Ebrahimi### Why do I not see some trace events in Stackdriver? 109*a24ffb47SSadaf EbrahimiIn all the versions before '0.9.1' the Stackdriver Trace exporter was implemented using the [v1 110*a24ffb47SSadaf EbrahimiAPI][stackdriver-v1-api-url] which is not fully compatible with the OpenCensus data model. Trace 111*a24ffb47SSadaf Ebrahimievents like Annotations and NetworkEvents will be dropped. 112*a24ffb47SSadaf Ebrahimi 113*a24ffb47SSadaf Ebrahimi### Why do I get a "StatusRuntimeException: NOT_FOUND: Requested entity was not found"? 114*a24ffb47SSadaf EbrahimiOne of the possible reasons is you are using a project id with bad format for the exporter. 115*a24ffb47SSadaf EbrahimiPlease double check the project id associated with the Stackdriver Trace exporter first. 116*a24ffb47SSadaf EbrahimiStackdriver Trace backend will not do any sanitization or trimming on the incoming project id. 117*a24ffb47SSadaf EbrahimiProject id with leading or trailing spaces will be treated as a separate non-existing project 118*a24ffb47SSadaf Ebrahimi(e.g "project-id" vs "project-id "), and will cause a NOT_FOUND exception. 119*a24ffb47SSadaf Ebrahimi 120*a24ffb47SSadaf Ebrahimi[travis-image]: https://travis-ci.org/census-instrumentation/opencensus-java.svg?branch=master 121*a24ffb47SSadaf Ebrahimi[travis-url]: https://travis-ci.org/census-instrumentation/opencensus-java 122*a24ffb47SSadaf Ebrahimi[appveyor-image]: https://ci.appveyor.com/api/projects/status/hxthmpkxar4jq4be/branch/master?svg=true 123*a24ffb47SSadaf Ebrahimi[appveyor-url]: https://ci.appveyor.com/project/opencensusjavateam/opencensus-java/branch/master 124*a24ffb47SSadaf Ebrahimi[maven-image]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-exporter-trace-stackdriver/badge.svg 125*a24ffb47SSadaf Ebrahimi[maven-url]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-exporter-trace-stackdriver 126*a24ffb47SSadaf Ebrahimi[stackdriver-trace]: https://cloud.google.com/trace/ 127*a24ffb47SSadaf Ebrahimi[stackdriver-v1-api-url]: https://cloud.google.com/trace/docs/reference/v1/rpc/google.devtools.cloudtrace.v1#google.devtools.cloudtrace.v1.TraceSpan 128