Java Code Examples for io.opencensus.trace.config.TraceConfig#getActiveTraceParams()

The following examples show how to use io.opencensus.trace.config.TraceConfig#getActiveTraceParams() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: MetaStoreServer.java    From metastore with Apache License 2.0 5 votes vote down vote up
/** Main method. This comment makes the linter happy. */
public static void main(String[] args) throws Exception {
  LOG.info("MetaStore server");
  printVersion();

  ArgumentParser parser = ArgumentParsers.newFor("metastore").build();
  parser.addArgument("-c", "--config").required(false);

  Namespace res = parser.parseArgs(args);
  String configPath = res.getString("config");
  if (configPath == null) {
    LOG.info("No configuration file set via argument, setting from environment.");
    configPath = System.getenv("METASTORE_CONFIG_PATH");
    LOG.info("Taking configuration file: " + configPath);
  } else {
    LOG.info("Taking configuration file: " + configPath);
  }

  // 2. Configure 100% sample rate, otherwise, few traces will be sampled.
  TraceConfig traceConfig = Tracing.getTraceConfig();
  TraceParams activeTraceParams = traceConfig.getActiveTraceParams();
  traceConfig.updateActiveTraceParams(
      activeTraceParams.toBuilder().setSampler(Samplers.alwaysSample()).build());

  String port = System.getenv("PORT");
  if (port == null) {
    port = "8980";
  }
  MetaStoreServer server = new MetaStoreServer(configPath, Integer.valueOf(port));
  server.start();
  server.blockUntilShutdown();
}
 
Example 2
Source File: BasicSetup.java    From opencensus-java with Apache License 2.0 5 votes vote down vote up
/**
 * Enables OpenCensus metric and traces.
 *
 * <p>This will register all basic {@link io.opencensus.stats.View}s. When coupled with an agent,
 * it allows users to monitor application behavior.
 *
 * <p>Example usage for maven:
 *
 * <pre>{@code
 * <dependency>
 *   <groupId>io.opencensus</groupId>
 *   <artifactId>opencensus-contrib-observability-ready-util</artifactId>
 *   <version>${opencensus.version}</version>
 * </dependency>
 * }</pre>
 *
 * <p>It is recommended to call this method before doing any RPC call to avoid missing stats.
 *
 * <pre>{@code
 * BasicSetup.enableOpenCensus();
 * }</pre>
 *
 * @param endPoint the end point of OC-Agent.
 * @param probability the desired probability of sampling. Must be within [0.0, 1.0].
 * @since 0.25
 */
public static void enableOpenCensus(String endPoint, double probability) {
  // register basic rpc views
  RpcViews.registerAllGrpcBasicViews();

  // set sampling rate
  TraceConfig traceConfig = Tracing.getTraceConfig();
  TraceParams activeTraceParams = traceConfig.getActiveTraceParams();
  traceConfig.updateActiveTraceParams(
      activeTraceParams.toBuilder().setSampler(Samplers.probabilitySampler(probability)).build());

  String serviceName = firstNonNull(System.getenv("SERVICE_NAME"), DEAFULT_SERVICE_NAME);
  // create and register Trace Agent Exporter
  OcAgentTraceExporter.createAndRegister(
      OcAgentTraceExporterConfiguration.builder()
          .setEndPoint(endPoint)
          .setServiceName(serviceName)
          .setUseInsecure(true)
          .setEnableConfig(false)
          .build());

  // create and register Metrics Agent Exporter
  OcAgentMetricsExporter.createAndRegister(
      OcAgentMetricsExporterConfiguration.builder()
          .setEndPoint(endPoint)
          .setServiceName(serviceName)
          .setUseInsecure(true)
          .build());
}
 
Example 3
Source File: OcAgentExportersQuickStart.java    From opencensus-java with Apache License 2.0 4 votes vote down vote up
private static void configureAlwaysSample() {
  TraceConfig traceConfig = Tracing.getTraceConfig();
  TraceParams activeTraceParams = traceConfig.getActiveTraceParams();
  traceConfig.updateActiveTraceParams(
      activeTraceParams.toBuilder().setSampler(Samplers.alwaysSample()).build());
}
 
Example 4
Source File: OcAgentTraceExporterIntegrationTest.java    From opencensus-java with Apache License 2.0 4 votes vote down vote up
@Test
public void testExportSpans() throws InterruptedException, IOException {
  // Mock a real-life scenario in production, where Agent is not enabled at first, then enabled
  // after an outage. Users should be able to see traces shortly after Agent is up.

  // Configure to be always-sampled.
  TraceConfig traceConfig = Tracing.getTraceConfig();
  TraceParams activeTraceParams = traceConfig.getActiveTraceParams();
  traceConfig.updateActiveTraceParams(
      activeTraceParams.toBuilder().setSampler(Samplers.alwaysSample()).build());

  // Register the OcAgent Exporter first.
  // Agent is not yet up and running so Exporter will just retry connection.
  OcAgentTraceExporter.createAndRegister(
      OcAgentTraceExporterConfiguration.builder()
          .setServiceName(SERVICE_NAME)
          .setUseInsecure(true)
          .setEnableConfig(false)
          .build());

  // Create one root span and 5 children.
  try (Scope scope = tracer.spanBuilder("root").startScopedSpan()) {
    for (int i = 0; i < 5; i++) {
      // Fake work
      doWork("first-iteration-child-" + i, i);
    }
  }

  // Wait 5s so that SpanExporter exports exports all spans.
  Thread.sleep(5000);

  // No interaction with Agent so far.
  assertThat(fakeOcAgentTraceServiceGrpc.getExportTraceServiceRequests()).isEmpty();

  // Image an outage happened, now start Agent. Exporter should be able to connect to Agent
  // when the next batch of SpanData arrives.
  agent.start();

  // Create one root span and 8 children.
  try (Scope scope = tracer.spanBuilder("root2").startScopedSpan()) {
    for (int i = 0; i < 8; i++) {
      // Fake work
      doWork("second-iteration-child-" + i, i);
    }
  }

  // Wait 5s so that SpanExporter exports exports all spans.
  Thread.sleep(5000);

  List<ExportTraceServiceRequest> exportRequests =
      fakeOcAgentTraceServiceGrpc.getExportTraceServiceRequests();
  assertThat(exportRequests.size()).isAtLeast(2);

  ExportTraceServiceRequest firstRequest = exportRequests.get(0);
  Node expectedNode = OcAgentNodeUtils.getNodeInfo(SERVICE_NAME);
  Node actualNode = firstRequest.getNode();
  assertThat(actualNode.getIdentifier().getHostName())
      .isEqualTo(expectedNode.getIdentifier().getHostName());
  assertThat(actualNode.getIdentifier().getPid())
      .isEqualTo(expectedNode.getIdentifier().getPid());
  assertThat(actualNode.getLibraryInfo()).isEqualTo(expectedNode.getLibraryInfo());
  assertThat(actualNode.getServiceInfo()).isEqualTo(expectedNode.getServiceInfo());

  List<io.opencensus.proto.trace.v1.Span> spanProtos = new ArrayList<>();
  for (int i = 1; i < exportRequests.size(); i++) {
    spanProtos.addAll(exportRequests.get(i).getSpansList());
  }

  // On some platforms (e.g Windows) SpanData will never be dropped, so spans from the first batch
  // may also be exported after Agent is up.
  assertThat(spanProtos.size()).isAtLeast(9);

  Set<String> exportedSpanNames = new HashSet<>();
  for (io.opencensus.proto.trace.v1.Span spanProto : spanProtos) {
    if ("root2".equals(spanProto.getName().getValue())) {
      assertThat(spanProto.getChildSpanCount().getValue()).isEqualTo(8);
      assertThat(spanProto.getParentSpanId()).isEqualTo(ByteString.EMPTY);
    } else if ("root".equals(spanProto.getName().getValue())) {
      // This won't happen on Linux but does happen on Windows.
      assertThat(spanProto.getChildSpanCount().getValue()).isEqualTo(5);
      assertThat(spanProto.getParentSpanId()).isEqualTo(ByteString.EMPTY);
    }
    exportedSpanNames.add(spanProto.getName().getValue());
  }

  // The second batch of spans should be exported no matter what.
  assertThat(exportedSpanNames).contains("root2");
  for (int i = 0; i < 8; i++) {
    assertThat(exportedSpanNames).contains("second-iteration-child-" + i);
  }
}