パート 2:CollectorとJavaアプリケーションをデプロイする

Kubernetes 環境を構成できたので、次は Splunk Distribution of OpenTelemetry Collector をデプロイします。

Splunk Distribution of OpenTelemetry Collectorをデプロイする

Helmを使用して、Splunk Distribution of OpenTelemetry CollectorをKubernetesの名前空間にデプロイします:

  1. コマンドラインインターフェイスで、以下のコマンドを実行します:

    helm install splunk-otel-collector -f ./values.yaml splunk-otel-collector-chart/splunk-otel-collector

    このコマンドは、前のステップのvalues.yamlファイルを使用して、Helmを介してSplunk Distribution of OpenTelemetry Collectorを設定およびデプロイします。

  2. 以下のコマンドを実行して、petclinic名前空間内のすべてのポッドを表示します:

    kubectl get pod -n petclinic

    現在、いくつかの新しいポッドが稼働しています:

    NAME                                                            READY   STATUS    RESTARTS   AGE
    splunk-otel-collector-agent-nkwwf                               1/1     Running   0          94s
    splunk-otel-collector-certmanager-6d95596898-z7qfz              1/1     Running   0          94s
    splunk-otel-collector-certmanager-cainjector-5c5dc4ff8f-7rlwx   1/1     Running   0          94s
    splunk-otel-collector-certmanager-webhook-69f4ff754c-hm9m2      1/1     Running   0          94s
    splunk-otel-collector-k8s-cluster-receiver-594fd9c8c7-6n545     1/1     Running   0          94s
    splunk-otel-collector-operator-69d476cb7-s8hcl                  2/2     Running   0          94s

    この出力は、Splunk Distribution of OpenTelemetry Collector が正常にデプロイされ、Collector がデータの受信と Splunk Observability Cloud への送信を開始する準備ができていることを示しています。

これで Splunk Distribution of OpenTelemetry Collector のデプロイが完了し、Spring Petclinic のアプリケーションをデプロイする準備ができました。

Spring Petclinicのアプリケーションをデプロイする

Spring Petclinic JavaアプリケーションをKubernetesクラスターにデプロイします:

  1. petclinic-spec.yaml という名前の spring-petclinic-app ディレクトリに新しい YAML ファイルを作成します。このファイルには、Kubernetesでアプリケーションデプロイメントを設定するために使用するキーと値が格納されます。

  2. このファイルに、以下の重要なキーと値を含めます:

    キー

    注意事項

    metadata.name

    spring-petclinic

    デプロイの名前

    metadata.namespace

    petclinic

    アプリケーションをデプロイする名前空間

    spec.template.spec.containers

    - name: petclinic-app

    アプリケーションのコンテナの名前

    spec.template.spec.containers

    image: ghcr.io/pavolloffay/spring-petclinic:latest

    Spring Petclinicアプリケーションのイメージ

    spec.template.metadata.annotations

    instrumentation.opentelemetry.io/inject-java: "true"

    Java アプリケーション用の Splunk OpenTelemetry ゼロコードインストルメンテーションを有効化します

    これらのキーと値を追加すると、petclinic-spec.yamlファイルは次の例のようになります:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-petclinic
      namespace: petclinic
    spec:
      selector:
        matchLabels:
          app: spring-petclinic
      template:
        metadata:
          labels:
            app: spring-petclinic
          annotations:
            # Activates zero-code instrumentation for the Java application
            instrumentation.opentelemetry.io/inject-java: "true"
    spec:
      containers:
        - name: petclinic-app
          # Java application to instrument
          image: ghcr.io/pavolloffay/spring-petclinic:latest
          imagePullPolicy: Always
  3. 次のコマンドを実行して、アプリケーションのデプロイを開始します:

    kubectl apply -n petclinic -f spring-petclinic-app/petclinic-spec.yaml

    このコマンドは、spring-petclinic という新しいデプロイメントと、類似する名前のポッドの実行を開始します。

これで、Spring PetClinic Java アプリケーションを Kubernetes ポッドにデプロイできました。

デプロイを検証する

すべてが正しく実行されていることを確認します。アプリケーションポッド上で次のコマンドを実行して、<pod-name> を Spring Petclinic のアプリケーションポッド名に置き換えます。

kubectl describe pod -n petclinic <pod-name>

出力には、initContainer という名前の opentelemetry-auto-instrumentation-java が表示されています:

Name:             spring-petclinic-65b9764597-lwvkl
Namespace:        petclinic
Priority:         0
Service Account:  default
Node:             minikube/192.168.49.2
Start Time:       Wed, 20 Dec 2023 12:55:02 -0600
Labels:           app=spring-petclinic
                pod-template-hash=65b9764597
Annotations:      instrumentation.opentelemetry.io/inject-java: true
Status:           Running
IP:               10.244.0.9
IPs:
IP:           10.244.0.9
Controlled By:  ReplicaSet/spring-petclinic-65b9764597
Init Containers:
opentelemetry-auto-instrumentation-java:
    Container ID:  docker://1b4a6275e8c3936febc3a5b0dd785e484061d9a0c2f8f1e4b17e9c347797a483
    Image:         ghcr.io/signalfx/splunk-otel-java/splunk-otel-java:v1.30.0
    Image ID:      docker-pullable://ghcr.io/signalfx/splunk-otel-java/splunk-otel-java@sha256:bb3de9e5d7f3577888f547903b62e281885961e3a49baebfb83b6239824ab5a7

この出力には、環境変数 OTEL もいくつか表示されます:

Environment:
  JAVA_TOOL_OPTIONS:                    -javaagent:/otel-auto-instrumentation-java/javaagent.jar
  SPLUNK_OTEL_AGENT:                    (v1:status.hostIP)
  OTEL_SERVICE_NAME:                   spring-petclinic
  OTEL_EXPORTER_OTLP_ENDPOINT:         http://$(SPLUNK_OTEL_AGENT):4317
  OTEL_RESOURCE_ATTRIBUTES_POD_NAME:   spring-petclinic-65b9764597-lwvkl (v1:metadata.name)
  OTEL_RESOURCE_ATTRIBUTES_NODE_NAME:   (v1:spec.nodeName)
  OTEL_PROPAGATORS:                    tracecontext,baggage,b3
  OTEL_RESOURCE_ATTRIBUTES:            splunk.zc.method=splunk-otel-java:v1.30.0,k8s.container.name=petclinic-app,k8s.deployment.name=spring-petclinic,k8s.namespace.name=petclinic,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME),k8s.replicaset.name=spring-petclinic-65b9764597,service.version=latest
注: initContainer または OTEL 環境が表示されない場合は、kubectl rollout restart -n petclinic <pod-name> を使用してアプリケーションポッドを再起動してください。Java アプリケーションをデプロイする前に、OpenTelemetry Collector ポッドがアクティブかつ稼働中である必要があります。

Spring PetClinic UIにアクセスする

Spring PetClinic UIにアクセスするには、以下のステップに従ってください:

  1. spring-petclinic アプリケーションにNodePortサービスを作成します:

    kubectl expose deployment/spring-petclinic --type="NodePort" --port 8080
  2. NodePortを取得します:

    kubectl describe svc spring-petclinic | grep "NodePort"
  3. ブラウザで、http://<host>:<nodeport> にアクセスしてください。

次のステップ

これでアプリケーションが実行され、Splunk Application Performance Monitoring(APM)でのデータ表示を開始する準備が整いました。「パート 3:Splunk APM でデータを表示する」を参照してください。