Splunk APM AlwaysOn プロファイリングにデータを取得する
次の手順に従って、Splunk APM AlwaysOn プロファイリングにデータを取得します。
次の手順に従って、Splunk APM AlwaysOn プロファイリングにプロファイリングします。
前提条件
Splunk APM AlwaysOn プロファイリングにデータを取得するには、次のものが必要です。
-
Splunk Observability Cloud 組織向けにアクティブ化された Splunk APM。
-
ホストで実行されている OpenTelemetry Collector バージョン 0.44.0 以降の Splunk Distribution。 「OpenTelemetry Collector の Splunk ディストリビューションを始める」を参照してください。Splunk OTel Collector のバージョンが 0.44.0 より前の場合は、 「OpenTelemetry Collector 構成の確認」を参照してください。
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 に取得します。
アプリケーションまたはサービスをインストゥルメント化
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 プロファイリングを設定してアクティブにした後、プロファイリング データが送信されていることを確認します。
-
Splunk Observability Cloud にログインします。
-
ナビゲーションメニューで、 [APM]を選択します。
-
Splunk APM で、 [AlwaysOnプロファイリング(AlwaysOn Profiling)]を選択します。
-
サービスを選択し、CPU ビューからメモリビューに切り替えます。
-
サービスが複数のインスタンスで実行されている場合は、ホスト、コンテナ、およびプロセス ID を選択して、対象のインスタンスを選択します。
-
メモリプロファイリングを有効にしている場合は、メモリメトリックを調べます。 「Memory profiling metrics」を参照してください。
ゲートウェイ展開での AlwaysOn プロファイリングのアクティブ化
次のゲートウェイの展開例と同様に、データ転送またはゲートウェイモードでコレクタを使用して AlwaysOn プロファイリングを設定するには、次の手順に従います。
-
ホストモニタリング(エージェント)モードで、インストゥルメンテーション エージェントをコレクタの OTLP gRPC 受信者にポイントします。OTLP gRPC レシーバは、ホストモニタリング(エージェント)モードのコレクタと同じホストとポートで実行されている必要があります。
-
次のコンポーネントを使用して、ホストモニタリング(エージェント)モードでコレクタを設定します。
-
OTLP gRPC レシーバー
-
OTLP エクスポータがデータ転送(ゲートウェイ)モードでコレクタを指していました。
-
受信者とエクスポータを接続するログパイプライン。たとえば、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)でコレクタを設定します。
-
OTLP gRPC レシーバー
-
splunk_hec エクスポータ
-
受信者とエクスポータを接続するログパイプライン
-