/* * Copyright 2017, OpenCensus Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.opencensus.examples.trace; import static io.opencensus.examples.trace.Utils.sleep; import io.opencensus.exporter.trace.logging.LoggingTraceExporter; import io.opencensus.trace.Span; import io.opencensus.trace.Tracer; import io.opencensus.trace.Tracing; import io.opencensus.trace.config.TraceConfig; import io.opencensus.trace.samplers.Samplers; /** Example showing how to directly create a child {@link Span} and add annotations. */ public final class MultiSpansTracing { // Per class Tracer. private static final Tracer tracer = Tracing.getTracer(); private MultiSpansTracing() {} private static void doWork() { Span rootSpan = tracer.spanBuilderWithExplicitParent("MyRootSpan", null).startSpan(); rootSpan.addAnnotation("Annotation to the root Span before child is created."); Span childSpan = tracer.spanBuilderWithExplicitParent("MyChildSpan", rootSpan).startSpan(); childSpan.addAnnotation("Annotation to the child Span"); childSpan.end(); rootSpan.addAnnotation("Annotation to the root Span after child is ended."); rootSpan.end(); } /** * Main method. * * @param args the main arguments. */ public static void main(String[] args) { // WARNING: Be careful before you set sampler value to always sample, especially in // production environment. Trace data is often very large in size and is expensive to // collect. This is why rather than collecting traces for every request(i.e. alwaysSample), // downsampling is prefered. // // By default, OpenCensus provides a probabilistic sampler that will trace once in every // 10,000 requests, that's why if default probabilistic sampler is used // you might not see trace data printed or exported and this is expected behavior. TraceConfig traceConfig = Tracing.getTraceConfig(); traceConfig.updateActiveTraceParams( traceConfig.getActiveTraceParams().toBuilder().setSampler(Samplers.alwaysSample()).build()); LoggingTraceExporter.register(); doWork(); // Wait for a duration longer than reporting duration (5s) to ensure spans are exported. // Spans are exported every 5 seconds sleep(5100); } }