Splunk APM AlwaysOn プロファイリングにデータを取得する

次の手順に従って、Splunk APM AlwaysOn プロファイリングにデータを取得します。

次の手順に従って、Splunk APM AlwaysOn プロファイリングにプロファイリングします。

前提条件

Splunk APM AlwaysOn プロファイリングにデータを取得するには、次のものが必要です。

AlwaysOn プロファイリングは、すべてのホストベースのサブスクリプションで有効になります。1 分あたりに分析されたトレース(TAPM)に基づくサブスクリプションについては、Splunk のサポート担当者に確認してください。

Helm チャートを使用した展開

Helm を使用して OpenTelemetry Collector の Splunk Distribution を展開している場合は、チャートのインストール時に次の値を渡します。

--set splunkObservability.profilingEnabled='true'

values.yaml ファイル自体でパラメータを編集することもできます。以下にその例を示します。

# This option enables only the shared pipeline for logs and profiling data.
# There is no active collection of profiling data.
# Instrumentation libraries must be configured to send it to the collector.
# If you don't use AlwaysOn Profiling for Splunk APM, you can disable it.
profilingEnabled: false

0.78.0 より前の OTel Collector バージョンを使用している場合は、ログ収集をオフにします。

logsEnabled: false
注: profileEnabled をtrue に設定すると、AlwaysOn プロファイリングに必要なログパイプラインが作成されますが、APM インストゥルメンテーションはインストールされません。インストゥルメンテーションをインストールするには、 「Get profiling data in」を参照してください。

でのプロファイリングデータの取得

次の手順に従って、AlwaysOn プロファイリングを使用してプロファイリングデータを Splunk APM に取得します。

  1. アプリケーションまたはサービス をインストゥルメント化します

  2. [AlwaysOnプロファイリング(AlwaysOn Profiling)] をアクティブ化します

  3. Splunk Observability Cloud がプロファイリングデータを受信していることを確認します

アプリケーションまたはサービスをインストゥルメント化

AlwaysOn プロファイリングでは、APM トレースデータでスタックトレースをアプリケーション要求に関連付ける必要があります。Splunk APM のアプリケーションをインストゥルメント化するには、適切なプログラミング言語の手順に従います。

言語

使用可能なインストゥルメンテーション

ドキュメント

Java

OpenTelemetry Java バージョン 1.14.2 以降の Splunk Distribution

OpenJDK バージョン 15.0 ~ 17.0.8 は、メモリプロファイリングではサポートされていません。詳細については、JDK バグトラッカーの https://bugs.openjdk.org/browse/JDK-8309862 を参照してください。

Node.js

OpenTelemetry JS バージョン 2.0 以降の Splunk Distribution

Splunk Observability Cloud の Node.js アプリケーションをインストゥルメント化できます

.NET

OpenTelemetry.NET バージョン 1.3.0 以降の Splunk Distribution

Splunk Observability Cloud(OpenTelemetry)用の .NET アプリケーションをインストゥルメント化

Python

OpenTelemetry Python バージョン 1.15 以降の Splunk Distribution

AlwaysOnプロファイリングのアクティブ化

Splunk Observability Cloud のサービスをインストゥルメント化し、APM データが Splunk APM に取り込まれることを確認したら、AlwaysOn プロファイリングを有効にします。

AlwaysOn プロファイリングをアクティブにするには、適切なプログラミング言語の手順に従います。

Java

CPU とメモリのプロファイリングのアクティブ化

  • CPU プロファイリングを使用するには、 splunk.profiler.enabled システム プロパティを有効にするか、または SPLUNK_PROFILER_ENABLED 環境変数を trueに設定します。

  • splunk.profiler.memory.enabled システムプロパティまたは SPLUNK_PROFILER_MEMORY_ENABLED 環境変数を trueに設定して、メモリプロファイリングをアクティブにします。メモリプロファイリングをアクティブにするには、 splunk.profiler.enabled プロパティを trueに設定する必要があります。

プロファイリングを設定する

  • プロファイリングデータをエクスポートする OTLP エンドポイントが正しく設定されていることを確認します。
    • プロファイリング固有のエンドポイントは 、splunk.profiler.logs-endpoint システムプロパティまたは SPLUNK_PROFILER_LOGS_END 永続変数を使用して設定されます。

    • そのエンドポイントが設定されていない場合は、 otel.exporter.otlp.endpoint システムプロパティまたは OTEL_EXPORTER_OTLP_END 永続変数で設定された汎用 OTLP エンドポイントが使用されます。

    • エンドポイントが設定されていない場合、デフォルトは http://localhost:4317になります。

    • 非 Kubernetes 展開の場合、OTLP エンドポイントは http://$[COLLECTOR_IP]:4317を指す必要があります。コレクタとプロファイリングされたアプリケーションが同じホストで実行されている場合は、 http://localhost:4317を使用します。他の場合は、プロファイリングされたホストからコレクタホストへのポート 4317 へのアクセスをブロックするファイアウォールルールがないことを確認してください。

    • Kubernetes 展開の場合、OTLP エンドポイントは、アプリケーションを実行している Kubernetes ポッドで環境構成を設定することにより、Kubernetes ダウンストリーム API から K8S_NODE_IP がフェッチされる http://$(K8S_NODE_IP):4317 を指す必要があります。以下にその例を示します。

      env:
      - name: K8S_NODE_IP
        valueFrom:
          fieldRef:
            apiVersion: v1
            fieldPath: status.hostIP
  • ポート 9943 は、コレクタ ディストリビューションの SignalFx レシーバ用のデフォルト ポートです。コレクタの構成でこのポートを変更した場合、カスタムポートを JVM に渡す必要があります。

次に、システムプロパティを使用してプロファイラをアクティブにする例を示します。

java -javaagent:./splunk-otel-javaagent.jar \
-Dsplunk.profiler.enabled=true \
-Dsplunk.profiler.memory.enabled=true \
-Dotel.exporter.otlp.endpoint=http(s)://collector:4317 \
-jar <your_application>.jar

プロファイリングデータ用の個別のエンドポイントの設定などの構成オプションの詳細については、 「AlwaysOn プロファイリングの Java 設定」を参照してください。

注: AlwaysOn プロファイリングは、Oracle JDK 8 および IBM J9 ではサポートされていません。
Node.js

要件

AlwaysOnプロファイリングには、Node.js 16以降が必要です。

インストルメンテーション

  • SPLUNK_PROFILER_ENABLED 環境変数を trueに設定して、プロファイラーをアクティブにします。

  • SPLUNK_PROFILER_MEMORY_ENABLED 環境変数を trueに設定して、メモリプロファイリングをアクティブにします。

  • splunk.profiler.logs-endpoint システムプロパティまたは SPLUNK_PROFILER_LOGS_END 永続変数の OTLP エンドポイントを確認します。
    • 非 Kubernetes 展開の場合、OTLP エンドポイントは http://$[COLLECTOR_IP]:4317を指す必要があります。コレクタとプロファイリングされたアプリケーションが同じホストで実行されている場合は、 http://localhost:4317を使用します。他の場合は、プロファイリングされたホストからコレクタホストへのポート 4317 へのアクセスをブロックするファイアウォールルールがないことを確認してください。

    • Kubernetes 展開の場合、OTLP エンドポイントは、アプリケーションを実行している Kubernetes ポッドで環境構成を設定することにより、Kubernetes ダウンストリーム API から K8S_NODE_IP がフェッチされる http://$(K8S_NODE_IP):4317 を指す必要があります。以下にその例を示します。

      env:
      - name: K8S_NODE_IP
        valueFrom:
          fieldRef:
            apiVersion: v1
            fieldPath: status.hostIP

次に、アプリケーションのコードからプロファイラをアクティブにする例を示します。

start({
   serviceName: '<service-name>',
   endpoint: 'collectorhost:port',
   profiling: {                       // Activates CPU profiling
      memoryProfilingEnabled: true,   // Activates Memory profiling
   }
});

プロファイリングデータ用の個別のエンドポイントの設定などの構成オプションの詳細については、 「AlwaysOn プロファイリングの Node.js 設定」を参照してください。

.NET

要件

AlwaysOnプロファイリングには、.NET 8.0以降が必要です。

注: .NET Frameworkはサポートされていません。

インストルメンテーション

  • .NET プロセスの SPLUNK_PROFILER_ENABLED 環境変数を true に設定して、プロファイラをアクティブにします。

  • SPLUNK_PROFILER_MEMORY_ENABLED 環境変数を trueに設定して、メモリプロファイリングをアクティブにします。

  • SPLUNK_PROFILER_LOGS_END 永続変数は、デフォルトで http://localhost:4318/v1/logsを指します。OpenTelemetry Collector の Splunk Distribution に再構成できます。

プロファイリングデータ用の個別のエンドポイントの設定などの構成オプションの詳細については、 「AlwaysOn プロファイリングの .NET OTel 設定」を参照してください。

Python
注: Python 用の AlwaysOn Profiling はベータ開発されています。この機能は、保証、メンテナンスおよびサポート、またはサービス レベルのコミットメントなしで、Splunk がユーザーに「現状」で提供するものです。この機能を使用する場合は 、Splunk General Terms(一般条件) が適用されます。

要件

AlwaysOn プロファイリングには、Python 3.7.2 以降が必要です。

インストルメンテーション

SPLUNK_PROFILER_ENABLED 環境変数を true に設定するか、アプリケーションコードで start_profiling 関数を呼び出して、プロファイラをアクティブにします。

SPLUNK_PROFILER_LOGS_END 永続変数の OTLP エンドポイントを確認します。

  • 非 Kubernetes 環境の場合、 SPLUNK_PROFILER_LOGS_END 永続変数が http://localhost:4317を指していることを確認します。

  • Kubernetes 展開の場合、OTLP エンドポイントは、アプリケーションを実行している Kubernetes ポッドで環境構成を設定することにより、Kubernetes ダウンストリーム API から K8S_NODE_IP がフェッチされる http://$(K8S_NODE_IP):4317 を指す必要があります。以下にその例を示します。

    env:
    - name: K8S_NODE_IP
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: status.hostIP

次に、アプリケーションのコードからプロファイラをアクティブにする例を示します。

from splunk_otel.profiling import start_profiling

# Activates CPU profiling
# All arguments are optional
start_profiling(
   service_name='my-python-service',
   resource_attributes={
      'service.version': '3.1'
      'deployment.environment': 'production',
   }
   endpoint='http://localhost:4317'
)

その他の構成オプションについては、 「AlwaysOn プロファイリングの Python 設定」を参照してください。

Splunk Observability Cloud がプロファイリングデータを受信していることを確認する

AlwaysOn プロファイリングを設定してアクティブにした後、プロファイリング データが送信されていることを確認します。

  1. Splunk Observability Cloud にログインします。

  2. ナビゲーションメニューで、 [APM]を選択します。

  3. Splunk APM で、 [AlwaysOnプロファイリング(AlwaysOn Profiling)]を選択します。

  4. サービスを選択し、CPU ビューからメモリビューに切り替えます。

  5. サービスが複数のインスタンスで実行されている場合は、ホスト、コンテナ、およびプロセス ID を選択して、対象のインスタンスを選択します。

  6. メモリプロファイリングを有効にしている場合は、メモリメトリックを調べます。 「Memory profiling metrics」を参照してください。

ゲートウェイ展開での AlwaysOn プロファイリングのアクティブ化

次のゲートウェイの展開例と同様に、データ転送またはゲートウェイモードでコレクタを使用して AlwaysOn プロファイリングを設定するには、次の手順に従います。

ステップ1. ホスト(エージェント)モニタリングモードでインストゥルメンテーション エージェントをコレクタにポイントします。ステップ 2:ホスト(エージェント)モニタリングモードでコレクタを設定します。ステップ 3:コレクタをデータ転送(ゲートウェイ)モードで設定します。ステップ 4:Splunk Observability Cloud にデータを送信します。

  1. ホストモニタリング(エージェント)モードで、インストゥルメンテーション エージェントをコレクタの OTLP gRPC 受信者にポイントします。OTLP gRPC レシーバは、ホストモニタリング(エージェント)モードのコレクタと同じホストとポートで実行されている必要があります。

  2. 次のコンポーネントを使用して、ホストモニタリング(エージェント)モードでコレクタを設定します。

    1. OTLP gRPC レシーバー

    2. OTLP エクスポータがデータ転送(ゲートウェイ)モードでコレクタを指していました。

    3. 受信者とエクスポータを接続するログパイプライン。たとえば、GitHub の Splunk Opentelemetry Collector の ゲートウェイに送信するために必要な調整を加えたデフォルトのエージェント設定を参照してください。

    service:
       pipelines:
          logs:
             receivers: [otlp]
             processors:
             - memory_limiter
             - batch
             - resourcedetection
             #- resource/add_environment
             #exporters: [splunk_hec, splunk_hec/profiling]
             # Use instead when sending to gateway
             exporters: [otlp]
  3. 次のコンポーネントを使用して、データ転送(ゲートウェイ)モード(3)でコレクタを設定します。
    1. OTLP gRPC レシーバー

    2. splunk_hec エクスポータ

    3. 受信者とエクスポータを接続するログパイプライン