xref: /aosp_15_r20/external/opencensus-java/exporters/trace/stackdriver/README.md (revision a24ffb47c3166327784aa05b149974e82e8f71b8)
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