Splunk Observability Cloud 用に Java アプリケーションの手動でインストルメンテーションする

スパンにカスタム属性を追加する必要がある場合、またはスパンとメトリクスを手動で生成する必要がある場合は、Java アプリケーションを手動でインストルメントします。

Splunk Distribution of OpenTelemetry Java のエージェントを使ってアプリケーションを自動的にインストルメントすれば、ほとんどのニーズに対応できます。アプリケーションを手動でインストルメントする必要があるのは、たとえば、スパンにカスタム属性を追加する必要があるときや、スパンとメトリクスを手動で生成する必要があるときだけです。

注: 手動 OTel インストルメンテーションは Splunk 自動 JVM インストルメンテーションと完全に互換性があり、Splunk によって完全にサポートされています。

カスタムJavaアプリケーショントレースの送信

カスタムのスパンとトレースを作成するには、以下の手順に従ってください:

  1. Splunk Distribution of OpenTelemetry Java をインストールします。「Splunk Observability Cloud に Java アプリケーションをインストルメンテーションする」を参照してください。

  2. getTracer メソッドを使用して、トレーサーを獲得します:

    import io.opentelemetry.api.trace.Tracer;
    
    Tracer tracer = openTelemetry.getTracer("instrumentation-scope-name", "instrumentation-scope-version");
  3. スパンを作成します。次の例は、サンプルアプリケーションでスパンを作成および終了する方法を示しています。

    import io.opentelemetry.api.trace.Span;
    import io.opentelemetry.context.Scope;
    
    // ...
    @GetMapping("/rolldice")
    public List<Integer> index(@RequestParam("player") Optional<String> player,
          @RequestParam("rolls") Optional<Integer> rolls) {
       Span span = tracer.spanBuilder("rollTheDice")
          .setAttribute("player.name", player.orElse("unknown"))
          .startSpan();
    
       // Make the span the current span
       try (Scope scope = span.makeCurrent()) {
    
          //.. Application logic
    
       } catch(Throwable t) {
          span.recordException(t);
          throw t;
       } finally {
          span.end();
       }
    }

その他の例については、https://opentelemetry.io/docs/java/manual_instrumentation の OpenTelemetry Java インストルメンテーションリポジトリにある手動インストルメンテーションのドキュメントを参照してください。

カスタムJavaアプリケーション・メトリクスの送信

カスタムメトリクスを作成するには、以下の手順に従います:

  1. Splunk Distribution of OpenTelemetry Java をインストールします。「Splunk Observability Cloud に Java アプリケーションをインストルメンテーションする」を参照してください。

  2. メーターを作ります:

    OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
    Meter sampleMeter = openTelemetry.getMeter("foo.example.metrics");
  3. 特定のメトリクスタイプを作成します。次の例は、ゲージメトリクスを作成する方法を示しています。

    sampleMeter
       .gaugeBuilder("player.hitpoints")
       .setDescription("A player's currently remaining hit points.")
       .setUnit("HP")
       .ofLongs()
       .buildWithCallback(res -> {
           long hitpoints = currentPlayer.hitpoints();
           String playerName = currentPlayer.name();
           res.record(hitpoints, Attributes.of(stringKey("name"), playerName)));
       });
       .buildWithCallback(
          result -> result.record(Runtime.getRuntime().totalMemory(), Attributes.empty()));

その他の例については、https://opentelemetry.io/docs/java/manual_instrumentation の OpenTelemetry Java インストルメンテーションリポジトリにある手動インストルメンテーションのドキュメントを参照してください。