APMの自動検出と設定のセットアップ

10分  

このセクションでは、Kubernetes上で実行されているJavaサービスに対して自動検出と設定を有効化します。これにより、OpenTelemetry CollectorがPodアノテーションを検索し、JavaアプリケーションにSplunk OpenTelemetry Javaエージェントでインストゥルメンテーション (instrumentation) を行う必要があることを示します。これにより、クラスター上で実行されているJavaサービスからトレース (trace)、スパン (span)、およびプロファイリング (profiling) データを取得できるようになります。

自動検出と設定

自動検出と設定は、コード変更や再コンパイルを必要とせずにアプリケーションからトレース、スパン、およびプロファイリングデータを取得するように設計されていることを理解することが重要です。

これはAPMを始めるための優れた方法ですが、手動インストゥルメンテーション (manual instrumentation) の代替ではありません。手動インストゥルメンテーションでは、カスタムスパン、タグ、ログをアプリケーションに追加でき、トレースにより多くのコンテキストと詳細を提供できます。

Javaアプリケーションの場合、OpenTelemetry Collectorはinstrumentation.opentelemetry.io/inject-javaというアノテーションを検索します。

このアノテーションの値はtrueに設定するか、OpenTelemetry Collectorのnamespace/daemonset(例:default/splunk-otel-collector)に設定できます。これにより、名前空間をまたいで動作することができ、このワークショップではこれを使用します。

deployment.yamlの使用

Podが自動的にトレースを送信するようにしたい場合は、以下に示すようにdeployment.yamlにアノテーションを追加できます。これにより、初期デプロイメント (deployment) 時にインストゥルメンテーションライブラリが追加されます。時間を節約するために、以下のPodに対してこれを実施済みです:

  • admin-server
  • config-server
  • discovery-server
apiVersion: apps/v1
kind: Deployment
metadata:
  name: admin-server
  labels:
    app.kubernetes.io/part-of: spring-petclinic
spec:
  selector:
    matchLabels:
      app: admin-server
  template:
    metadata:
      labels:
        app: admin-server
      annotations:
        instrumentation.opentelemetry.io/inject-java: "default/splunk-otel-collector"
Last Modified 2025/12/05

4. 自動検出と設定のサブセクション

デプロイメントのパッチ適用

自動検出と設定を構成するには、デプロイメント (deployment) にインストゥルメンテーションアノテーションを追加するためのパッチを適用する必要があります。パッチが適用されると、OpenTelemetry Collectorが自動検出と設定ライブラリを注入し、Podが再起動されてトレース (trace) とプロファイリング (profiling) データの送信が開始されます。まず、以下を実行してapi-gatewaysplunk-otel-javaイメージがないことを確認します:

kubectl describe pods api-gateway | grep Image:
Image:         quay.io/phagen/spring-petclinic-api-gateway:0.0.2

次に、デプロイメントにアノテーションを追加して、すべてのサービスのJava自動検出と設定を有効にします。以下のコマンドは、すべてのデプロイメントにパッチを適用します。これにより、OpenTelemetry Operatorがsplunk-otel-javaイメージをPodに注入します:

kubectl get deployments -l app.kubernetes.io/part-of=spring-petclinic -o name | xargs -I % kubectl patch % -p "{\"spec\": {\"template\":{\"metadata\":{\"annotations\":{\"instrumentation.opentelemetry.io/inject-java\":\"default/splunk-otel-collector\"}}}}}"
deployment.apps/config-server patched (no change)
deployment.apps/admin-server patched (no change)
deployment.apps/customers-service patched
deployment.apps/visits-service patched
deployment.apps/discovery-server patched (no change)
deployment.apps/vets-service patched
deployment.apps/api-gateway patched

config-serverdiscovery-serveradmin-serverについては、すでにパッチが適用されているため変更はありません。

api-gateway Podのコンテナイメージを再度確認するには、以下のコマンドを実行します:

kubectl describe pods api-gateway | grep Image:
Image:         ghcr.io/signalfx/splunk-otel-java/splunk-otel-java:v1.30.0
Image:         quay.io/phagen/spring-petclinic-api-gateway:0.0.2

api-gatewayに新しいイメージが追加され、ghcr.ioからsplunk-otel-javaがプルされます(注:2つのapi-gatewayコンテナが表示される場合、元のコンテナがまだ終了処理中の可能性があるため、数秒待ってください)。

Splunk Observability CloudのKubernetes Navigatorに戻ります。数分後、Podがオペレーターによって再起動され、自動検出と設定コンテナが追加されることが確認できます。以下のスクリーンショットのような表示になります:

restart restart

Kubernetes NavigatorでPodが緑色になるまで待ってから、次のセクションに進んでください。

Last Modified 2025/12/05

Splunk APMでのデータの表示

左側のメニューでAPMをクリックして、新しくインストゥルメンテーション (instrumentation) されたサービスからのトレース (trace) によって生成されたデータを確認します。

ドロップダウンボックスでEnvironmentフィルター (1) をワークショップインスタンスの名前に変更します。

メモ

これは**<INSTANCE>-workshopになります。ここでINSTANCE**は、先ほど実行したシェルスクリプトの値です。これのみが選択されていることを確認してください。

apm apm

Service Map (2) ペインをクリックして、次のセクションの準備をします。