Splunk APMのAlwaysOn Profilingにデータを取り込む 🔗
以下の手順に従って、Splunk APMのAlwaysOn Profilingにプロファイリングを取り込みます。
前提条件 🔗
Splunk APMのAlwaysOn Profilingにデータを取り込むには、以下が必要です:
Splunk Observability Cloudの組織でSplunk APMが有効化されていること。
ホスト上でSplunk Distribution of OpenTelemetry Collectorのバージョン0.44.0以上が実行されていること。Splunk Distribution of the OpenTelemetry Collector の利用開始 を参照してください。Splunk OTel Collectorのバージョンが0.44.0より低い場合は、OpenTelemetry Collectorの設定を確認する を参照してください。
AlwaysOn Profilingはホストベースのすべてのサブスクリプションで有効になっています。1分あたりの解析トレース数(TAPM)に基づくサブスクリプションの場合は、Splunk サポートの担当者に確認してください。
Helmチャートのデプロイメント 🔗
If you’re deploying the Splunk Distribution of the OpenTelemetry Collector using Helm, pass the following value when installing the chart:
--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
If you are using a version of the OTel Collector lower than 0.78.0, make sure to turn off logs collection:
logsEnabled: false
注釈
profileEnabled
を true
に設定すると、AlwaysOn Profilingに必要なログパイプラインが作成されますが、 APMのインストルメンテーションはインストールされません。インストルメンテーションをインストールするには、プロファイリングデータを取り込む を参照してください。
プロファイリングデータを取り込む 🔗
AlwaysOn Profilingを使用してSplunk APMにプロファイリングデータを取り込むには、以下の手順に従います:
アプリケーションやサービスをインストルメントする 🔗
AlwaysOn Profilingでは、スタックトレースをアプリケーションリクエストに関連付けるためにAPMのトレースデータを必要とします。Splunk APM用にアプリケーションをインストルメントするには、適切なプログラミング言語の手順に従ってください:
言語 |
利用可能なインストルメンテーション |
ドキュメント |
---|---|---|
Java |
Splunk Distribution of OpenTelemetry Javaバージョン1.14.2以降 OpenJDKのバージョン15.0から17.0.8までは、メモリプロファイリングに対応していません。詳細はJDKバグトラッカーの https://bugs.openjdk.org/browse/JDK-8309862 を参照してください。 |
|
Node.js |
Splunk Distribution of OpenTelemetry JSバージョン2.0以降 |
|
.NET |
Splunk Distribution of OpenTelemetry .NETバージョン 1.3.0以上 |
.NET アプリケーションを Splunk Observability Cloud (OpenTelemetry) にインストルメンテーションする |
Python |
Splunk Distribution of OpenTelemetry Pythonバージョン 1.15以上 |
注釈
プロファイリングデータの保持については、Application Performance Monitoring(APM)のデータ保持 を参照してください。
AlwaysOn Profilingの有効化 🔗
Splunk Observability Cloud用にサービスをインストルメントし、Splunk APMにAPMのデータが取り込まれていることを確認したら、AlwaysOn Profilingを有効にします。
AlwaysOn Profilingを有効にするには、該当するプログラミング言語の手順に従ってください:
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_ENDPOINT
環境変数で設定します。このエンドポイントが設定されていない場合、汎用のOTLPエンドポイントが使用され、
otel.exporter.otlp.endpoint
システムプロパティまたはOTEL_EXPORTER_OTLP_ENDPOINT
環境変数によって設定されます。このエンドポイントも設定されていない場合は、デフォルトの
http://localhost:4317
になります。Kubernetes以外のデプロイメントでは、OTLPエンドポイントは
http://${COLLECTOR_IP}:4317
を指す必要があります。コレクターとプロファイルされたアプリケーションが同じホスト上で実行されている場合は、http://localhost:4317
を使用してください。それ以外の場合は、プロファイルされたホストからコレクターホスト向けのポート4317に対するアクセスをブロックするファイアウォールルールがないことを確認してください。Kubernetesデプロイメントの場合、OTLPエンドポイントは
http://$(K8S_NODE_IP):4317
を指す必要があります。ここでK8S_NODE_IP
は、アプリケーションを実行しているKubernetesポッド上の環境構成を設定することにより、KubernetesダウンストリームAPIからフェッチされます。例: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 \
-Dsplunk.metrics.endpoint=http(s)://collector:9943
-jar <your_application>.jar
プロファイリングデータ用に別のエンドポイントを設定するなど、その他の設定オプションについては、AlwaysOn Profilingの Java 設定 を参照してください。
注釈
AlwaysOn Profilingは、Oracle JDK 8およびIBM J9ではサポートされていません。
要件
AlwaysOn Profilingには、Node.js 16以上が必要です。
インストルメンテーション
SPLUNK_PROFILER_ENABLED
環境変数をtrue
に設定して、プロファイラーを有効化します。SPLUNK_PROFILER_MEMORY_ENABLED
環境変数をtrue
に設定して、メモリのプロファイリングを有効化します。splunk.profiler.logs-endpoint
システムプロパティまたはSPLUNK_PROFILER_LOGS_ENDPOINT
環境変数で、OTLPエンドポイントを確認します:Kubernetes以外のデプロイメントでは、OTLPエンドポイントは
http://${COLLECTOR_IP}:4317
を指す必要があります。コレクターとプロファイルされたアプリケーションが同じホスト上で実行されている場合は、http://localhost:4317
を使用してください。それ以外の場合は、プロファイルされたホストからコレクターホスト向けのポート4317に対するアクセスをブロックするファイアウォールルールがないことを確認してください。Kubernetesデプロイメントの場合、OTLPエンドポイントは
http://$(K8S_NODE_IP):4317
を指す必要があります。ここでK8S_NODE_IP
は、アプリケーションを実行しているKubernetesポッド上の環境構成を設定することにより、KubernetesダウンストリームAPIからフェッチされます。例: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 Profilingの Node.js 設定 を参照してください。
要件
AlwaysOn Profilingには、.NET 6.0以上が必要です。
注釈
.NET Frameworkはサポートされていません。
インストルメンテーション
.NETプロセスの
SPLUNK_PROFILER_ENABLED
環境変数をtrue
に設定して、プロファイラーを有効化します。SPLUNK_PROFILER_MEMORY_ENABLED
環境変数をtrue
に設定して、メモリのプロファイリングを有効化します。SPLUNK_PROFILER_LOGS_ENDPOINT
環境変数はデフォルトではhttp://localhost:4318/v1/logsを指します。Splunk Distribution of OpenTelemetry Collectorを指すように設定し直すことができます。
プロファイリングデータ用に別のエンドポイントを設定するなど、その他の設定オプションについては、AlwaysOn Profiling の .NET OTel 設定 を参照してください。
注釈
AlwaysOn Profiling for Pythonは開発中のベータ版です。この機能は、保証、メンテナンス、サポート、サービスレベルのコミットメントを伴わずに、Splunk によって「現状のまま」お客様に提供されます。本機能の使用には、Splunk 一般規約 が適用されます。
要件
AlwaysOn Profilingには、Python 3.7.2以上が必要です。
インストルメンテーション
SPLUNK_PROFILER_ENABLED
環境変数を true
に設定するか、アプリケーションコード内で start_profiling
関数を呼び出して、プロファイラーを有効化します。
SPLUNK_PROFILER_LOGS_ENDPOINT
環境変数内のOTLPエンドポイントを確認します:
Kubernetes以外の環境では、必ず
SPLUNK_PROFILER_LOGS_ENDPOINT
環境変数がhttp://localhost:4317
を指していることを確認してください。Kubernetesデプロイメントの場合、OTLPエンドポイントは
http://$(K8S_NODE_IP):4317
を指す必要があります。ここでK8S_NODE_IP
は、アプリケーションを実行しているKubernetesポッド上の環境構成を設定することにより、KubernetesダウンストリームAPIからフェッチされます。例: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 Profiling の Python 設定 を参照してください。
Splunk Observability Cloudがプロファイリングデータを受信していることを確認する 🔗
AlwaysOn Profilingを設定し有効化したら、プロファイリングデータが受信されていることを確認します:
Splunk Observability Cloudにログインします。
ナビゲーションメニューで、
を選択します。Splunk APM で、AlwaysOn Profiling を選択します。
サービスを選択し、CPUビューからメモリビューに切り替えます。
サービスが複数のインスタンスで実行されている場合は、ホスト、コンテナ、プロセスIDを選択して、関心のあるインスタンスを選択します。
メモリのプロファイリングを有効にしている場合は、メモリのメトリクスを調べます。メモリプロファイリングのメトリクス を参照してください。
ゲートウェイデプロイメントでAlwaysOn Profilingを有効化する 🔗
以下の手順に従って、以下のゲートウェイデプロイメント例と同様のデータ転送モードまたはゲートウェイモードのコレクターにAlwaysOn Profilingをセットアップします:
インストルメンテーションエージェントを、ホスト監視(エージェント)モードのコレクターのOTLP gRPCレシーバーに向けます。OTLP gRPCレシーバーは、ホスト監視(エージェント)モードのコレクターと同じホストおよびポートで動作している必要があります。
以下のコンポーネントを使用して、ホスト監視(エージェント)モードのコレクターを設定します:
OTLP gRPCレシーバー
データ転送(ゲートウェイ)モードのコレクターを指すOTLPエクスポーター
レシーバーとエクスポーターを接続するログパイプライン。 例えば、ゲートウェイに送信するために必要な調整を加えたデフォルトのエージェント構成は、GitHubの Splunk Opentelemetry Collector を参照してください。
service: pipelines: logs: receivers: [fluentforward, 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エクスポーター
レシーバーとエクスポーターを接続するログパイプライン