Always-On Profiling & DB Query Performance

Always-On Profiling & Metrics

3 min

先ほどHelmチャートを使用してSplunk Distribution of the OpenTelemetry Collectorをインストールした際、AlwaysOn ProfilingMetricsを有効にするように設定しました。これにより、OpenTelemetry JavaはアプリケーションのCPUとメモリのプロファイリングを自動的に生成し、Splunk Observability Cloudに送信します。

PetClinicアプリケーションをデプロイしてアノテーションを設定すると、collectorは自動的にアプリケーションを検出し、トレースとプロファイリングのためにインストルメントします。これを確認するために、次のスクリプトを実行して、インストルメントしているJavaコンテナの1つの起動ログを調べることができます

ログには、Javaの自動検出と設定によって取得されたフラグが表示されます

logs
.  ~/workshop/petclinic/scripts/get_logs.sh
私たちが注目しているのは、com.splunk.opentelemetry.profiler.ConfigurationLogger によって書き込まれたセクション、つまりProfiling Configurationです。

splunk.profiler.directory など、制御できるさまざまな設定を確認できます。これは、エージェントがSplunkに送信する前にコールスタックを書き込む場所です。(これは、コンテナの設定方法によって異なる場合があります。)

変更したいもう1つのパラメータは splunk.profiler.call.stack.interval です。これは、システムがCPU Stack traceをキャプチャする頻度です。Pet Clinicアプリケーションのような短いスパンがある場合は、このインターバル設定を短くすることをお勧めします。デモアプリケーションでは、デフォルトのインターバル値を変更しなかったため、スパンに常にCPU Call Stackが関連付けられているとは限りません。

これらのパラメータを設定する方法はこちら で確認できます。以下の例では、deployment.yaml でコールスタックのより高い収集レートを設定する方法を示しています。これは、JAVA_OPTIONS configセクションでこの値を設定することで行います。

yaml
env:
- name: JAVA_OPTIONS
  value: "-Xdebug -Dsplunk.profiler.call.stack.interval=150"