アプリケーションを Splunk AppDynamics Java、.NET または Node.js エージェントでモニターする場合、アプリケーションで Splunk AppDynamics エージェントが OpenTelemetry スパンデータと Splunk AppDynamics SaaS データの両方を報告するようにインストゥルメント化できます。インストゥルメント化されると、エージェントは HTTP のエントリおよび終了リクエストから OpenTelemetry スパンデータを生成します。Splunk AppDynamics 相関ヘッダーは、OpenTelemetry バゲージヘッダー内に挿入されます。これにより、交差する OpenTelemetry ノードを介してビジネストランザクションとの相関が発生します。

たとえば、上の図は、Splunk AppDynamics Java エージェントが OpenTelemetry で有効になっている場合に、OpenTelemetry データがどのように報告されるかを示しています。Java エージェントは Splunk AppDynamics SaaS データをコントローラに送信し、OpenTelemetry スパンを OpenTelemetry Collector に送信します。Collector は、受信したスパンを OTLP/HTTP 経由で Splunk AppDynamics OpenTelemetry サービスに送信します。Splunk AppDynamics OpenTelemetry サービスは、スパンをトレースに統合し、トレースをコントローラに登録されているビジネストランザクションにマッピングします。コントローラ UI には、エージェントからの Splunk AppDynamics SaaS データと Splunk AppDynamics OpenTelemetry サービスからの OpenTelemetry データの両方が表示されます。 

はじめる前に

OpenTelemetry™ Collector をデプロイして構成し、リソース属性を構成したことを確認してください

Java エージェントで OpenTelemetry を有効にする

OpenTelemetry で Java エージェントを有効にするには、Java エージェントバージョン 21.11.4 以降が必要です(Java エージェントバージョン 22.3.0 以降を使用することをお勧めします)。OpenTelemetry でサポートされる Java フレームワークのリストについては、「Supported Java Agent Frameworks for OpenTelemetry」を参照してください。

JVM システムプロパティに以下のシステムプロパティを追加します

  1. OpenTelemetry を有効にします。

    -Dappdynamics.opentelemetry.enabled=true
    CODE
  2. トレースエクスポータを OTLP に設定します(OpenTelemetry 対応の Java エージェントは、OTLP 形式で OpenTelemetry スパンを送信します)。

    -Dotel.traces.exporter=otlp
    CODE
  3. JVM の階層名(service.name 内)とアプリケーション名(service.namespace 内)を設定します。

    service.name で階層名を設定しない場合、値はデフォルトで、.NET エージェントによって最初に登録された階層名になります(階層が Splunk AppDynamics によって最初にインストゥルメントされたとき)。

    -Dotel.resource.attributes="service.name=myServiceName,service.namespace=myServiceNameSpace"
    CODE

    また、OpenTelemetry の otel-config.yml ファイルまたは OTEL_RESOURCE_ATTRIBUTES  環境変数で階層とアプリケーション名を設定するオプションもあります。「service.name と service.namespace をアプリケーション名と階層名に設定する」を参照してください。 

(オプション)コレクタのエンドポイントの設定

デフォルトでは、コレクタのエンドポイントは http://localhost:4317 を指しますが、必要に応じてプロパティ Dotel.exporter.otlp.traces.endpoint で設定できます。

-Dotel.exporter.otlp.traces.endpoint=http://localhost:8080
CODE

(オプション)バッチ処理のタイミングの設定

デフォルトのエクスポータスパンバッチ処理スケジュールは 5000 ミリ秒です。バッチ処理スケジュールは、OpenTelemetry 環境変数 OTEL_BSP_SCHEDULE_DELAY を使用して構成できます。

-Dotel.bsp.schedule.delay=90000
CODE

Java インストゥルメンテーションのサンプル

-Dotel.traces.exporter=otlp
-Dotel.resource.attributes="service.name=myServiceName,service.namespace=myServiceNameSpace"
-Dappdynamics.opentelemetry.enabled=true
-Dappdynamics.controller.hostName=sample-controller.e2e.appd-test.com
-Dappdynamics.controller.port=443
-Dappdynamics.agent.accountName=OTEL-account
-Dappdynamics.agent.accountAccessKey=3ea55405-61b2-43bb-a8e0-58aff761a028
-Dappdynamics.controller.ssl.enabled=true
-Dappdynamics.agent.applicationName=ecommerce_OT
-Dappdynamics.agent.uniqueHostId=ecommerce_OT_1
-Dappdynamics.agent.tierName=DownTier
-Dappdynamics.agent.nodeName=DownNode
-javaagent:/<Java Agent Jar Path>/javaagent.jar
CODE

.NET エージェントで OpenTelemetry を有効にする

OpenTelemetry の .NET エージェントを有効にするには、次のものが必要です。

  • .NET エージェントバージョン 22.6.0 以降
  • .NET バージョン 6.0 以降を使用するアプリケーション
  • OpenTelemetry でサポートされる .NET フレームワークのリストについては、「.NET Agent Frameworks for OpenTelemetry」を参照してください。

.NET アプリケーションを実行するプロセスに次の環境変数を追加します。

  1. OpenTelemetry を有効にします。

    APPDYNAMICS_OPENTELEMETRY_ENABLED=true
    CODE

     

  2. トレースエクスポータを OTLP に設定します(OpenTelemetry 対応の .NET エージェントは、OTLP 形式で OpenTelemetry スパンを送信します)。

    OTEL_TRACES_EXPORTER=otlp
    CODE
  3. アプリケーションの階層名(service.name 内)とアプリケーション名(service.namespace 内)を設定します。

    service.name で階層名を設定しない場合、値はデフォルトで、.NET エージェントによって最初に登録された階層名になります(階層が Splunk AppDynamics によって最初にインストゥルメントされたとき)。

    OTEL_RESOURCE_ATTRIBUTES=service.name=myServiceName,service.namespace=myServiceNameSpace
    CODE

    また、OpenTelemetry の otel-config.yml ファイルで階層名とアプリケーション名を設定するオプションもあります。「service.name と service.namespace をアプリケーション名と階層名に設定する」を参照してください。

(オプション)コレクタのエンドポイントの設定

デフォルトでは、コレクタのエンドポイントは http://localhost:4318 に設定されていて、OTLP 形式を使用して HTTP 経由でメトリックを送信します。OpenTelemetry の .NET Agent は、gRPC を介したメトリックの送信をサポートしていません。

エンドポイントは、環境変数 OTEL_EXPORTER_OTLP_ENDPOINT を使用して構成できます。

OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:8080
CODE

(オプション)バッチ処理のタイミングの設定

デフォルトのエクスポータスパンバッチ処理スケジュールは 5000 ミリ秒です。バッチ処理スケジュールは、環境変数 OTEL_BSP_SCHEDULE_DELAY を使用して構成できます。

OTEL_BSP_SCHEDULE_DELAY=90000
CODE

.NET インストゥルメンテーションのサンプル

...
APPDYNAMICS_OPENTELEMETRY_ENABLED=true
OTEL_TRACES_EXPORTER=otlp
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318
OTEL_RESOURCE_ATTRIBUTES=service.name=myServiceName,service.namespace=myServiceNameSpace
...
CODE

Node.js エージェントで OpenTelemetry を有効にする

Node.js エージェントで OpenTelemetry を有効にするには、Node.js エージェントバージョン 22.3.0 以降が必要です

Node.js アプリケーションコードに以下の OpenTelemetry 構成を追加します。

  1. require ステートメントで OpenTelemetry を有効にします。

    Node.js アプリケーションの場合、OpenTelemetry の AppName および TierName は、Node.js require ステートメントの AppNameTierName から派生します。Splunk AppDynamics アプリケーション/階層に MY_APP/MY_TIER という名前が付けられている場合、OpenTelemetry アプリケーション/階層は MY_APP_OTEL/MY_TIER_OTEL になります。

    require("appdynamics").profile(
    {
      ...   
      openTelemetry: {
        enabled: <True:False> // openTelemetry is enabled or disabled
      }
      ... 
    }
    )
    JS
  2. スパンデータの追加のロギングを許可します。

    require("appdynamics").profile(
    {
      ...   
      openTelemetry: {
        debug: <True:False> // Additional logging, console dump of span data
        ... 
      }
      ...
    }
    )
    JS
  3. OpenTelemetry Collector の URL を追加します。

    require("appdynamics").profile(
    {     
      ...
      openTelemetry: {      
    	collector: {
    		url: <url> <http://host:port/v1/traces> // The default value is http://localhost:55680/v1/traces     
    	}
      ... 
     }
    )
    JS

(オプション)バッチ処理のタイミングの設定

require("appdynamics").profile(
{
  ...   
  openTelemetry: {
    exporter: {
      maxQueueSize: size_in_byte  the maximum queue size. After the size is reached spans are dropped. The default value is 2048. 
      scheduledDelayMillis: time_in_ms the delay interval in milliseconds between two consecutive exports. The default value is 5000. 
	}
 	...
  }
}
)
JS


Node.js インストゥルメンテーションのサンプル

require("appdynamics").profile(
{
  ...
  openTelemetry: {
    enabled: <True:False> // OpenTelemetry enabled or disabled
    debug: <True:False> // Additional logging, console dump of span data  
    collector: {
       url: <url> <http://host:port/v1/traces> // The default value is http://localhost:55680/v1/traces
     }
  }
  ... 
}
)
JS

OpenTelemetry を使用した Ruby アプリケーションのインストゥルメント化

次の図は、Ruby アプリケーションの OpenTelemetry データが Splunk AppDynamics にどのように取り込まれるのかを示しています。

Ruby アプリケーションは、OpenTelemetry スパンを OpenTelemetry Collector に送信します。Collector は、スパンを OTLP/HTTP 経由で Splunk AppDynamics OpenTelemetry サービスに送信します。Splunk AppDynamics OpenTelemetry サービスは、スパンをトレースに統合し、トレースをコントローラに登録されているビジネストランザクションにマッピングします。コントローラ UI には、Splunk AppDynamics OpenTelemetry サービスからの OpenTelemetry データが表示されます。

Ruby アプリケーションの設定

次の手順は、Ruby アプリケーションを設定するための簡単な説明を示しています。詳細については、Ruby の OpenTelemetry を参照してください。

次のいずれかの方法で、OpenTelemetry を使用して Ruby アプリケーションをインストゥルメント化できます。

自動インストゥルメンテーションは、推奨されるインストゥルメンテーション方式です。

自動インストゥルメンテーション

opentelemetry-sdk および opentelemetry-instrumentation-all パッケージは、最小限の手作業でトレースやスパンを自動的に取り込みます。

サポートされているフレームワークのリストについては、サポートされているフレームワークを参照してください。

次の手順は、単純な Ruby On Rails アプリケーションをインストゥルメント化する例です。

  1. 以下のパッケージを既存の Gemfile に追加します。

    Gemfile

    gem 'opentelemetry-sdk'
    gem 'opentelemetry-exporter-otlp'
    gem 'opentelemetry-instrumentation-all'
    RUBY
  2. OpenTelemetry を初期化するように Ruby アプリケーションを設定します。<project>/config/initializers/opentelemetry.rb ファイルを作成します。

    config/initializers/opentelemetry.rb

    # config/initializers/opentelemetry.rb
    require 'opentelemetry/sdk'
    require 'opentelemetry/exporter/otlp'
    require 'opentelemetry/instrumentation/all'
    
    OpenTelemetry::SDK.configure do |c|
      c.resource = OpenTelemetry::SDK::Resources::Resource.create({
        OpenTelemetry::SemanticConventions::Resource::SERVICE_NAMESPACE => '<YOUR_SERVICE_NAMESPACE>', # corresponds to Appd controller Application name
        OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => '<YOUR_SERVICE_NAME>' # corresponds to Appd controller Tier name
      })
      c.use_all() # enables all instrumentation!
    
    end
    RUBY
  3. OpenTelemetry Collector にトレースをレポートするようにアプリケーションを設定します。OpenTelemetry Collector がリッスンする OTEL_EXPORTER_OTLP_ENDPOINT 環境変数を設定します。

    env

    export OTEL_EXPORTER_OTLP_ENDPOINT=http://0.0.0.0:4318
    RUBY

    0.0.0.0OpenTelemetry Collector HOST であり、4318 は OpenTelemetry Collector PORT です。使用可能なエクスポータの詳細については、Ruby エクスポータを参照してください。

  4. 新しく追加した Gem を Gemfile にインストールします。

    bundle install
    CODE
  5. Ruby アプリケーションを起動します。

手動インストゥルメンテーション

手動インストゥルメンテーション方式は、フレームワークのサポートがない場合にのみ使用します。

  1. 以下のパッケージを既存の Gemfile に追加します。

    Gemfile

    gem 'opentelemetry-sdk'
    gem 'opentelemetry-exporter-otlp'
    RUBY
  2. 次の行を追加して、スパンを手動で作成します。たとえば、Ruby スクリプトまたはサポートされていないフレームワークをインストゥルメント化するスパンを作成できます。

    code snippet

    require 'opentelemetry/sdk'
    require 'opentelemetry/exporter/otlp'
    
    OpenTelemetry::SDK.configure
    
    def hello_world
      tracer_provider = OpenTelemetry.tracer_provider
      tracer = tracer_provider.tracer('hello world')
      tracer.in_span("hello_world", kind: :server) do |span|
        puts "Hello all"
        # Do something... expensive/simple task that you want to instrument
      end
      tracer_provider.shutdown
    end
    
    hello_world
    RUBY
  3. OpenTelemetry Collector がリッスンする OTEL_EXPORTER_OTLP_ENDPOINT 環境変数を設定します。

    env

    export OTEL_EXPORTER_OTLP_ENDPOINT=http://0.0.0.0:4318
    RUBY

    0.0.0.0OpenTelemetry Collector HOST であり、4318 は OpenTelemetry Collector PORT です。使用可能なエクスポータの詳細については、Ruby エクスポータを参照してください。

  4. 新しく追加した Gem を Gemfile にインストールします。

    bundle install
    CODE
  5. Ruby アプリケーションを起動します。

OpenTelemetry Collector

Splunk AppDynamics 構成を OpenTelemetry Collector サービスに追加します。

次のスニペットは、サンプル構成ファイルです。OpenTelemetry Collector の詳細については、「データ収集ツールの設定」を参照してください。

otel-config.yaml

# otel-config.yaml
processors:
  batch:
  memory_limiter:
  resource:
    attributes:
      - key: service.namespace
        action: upsert
        value: "xxx"
      - key: appdynamics.controller.host
        value: "xxx"
        action: upsert
      - key: appdynamics.controller.port
        value: xxx
        action: upsert
      - key: telemetry.sdk.name
        value: "xxx"
        action: upsert
      - key: appdynamics.controller.account
        value: "xxx"
        action: upsert

receivers:
  otlp:
    protocols:
      grpc:
      http:
        cors_allowed_origins:
          - http://*
          - https://*

exporters:
  otlphttp:
    endpoint: "https://<your-region>-sls-agent-api.saas.appdynamics.com"
    headers: { "x-api-key": "xxxxxx" }

  logging:
    loglevel: debug

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch, resource]
      exporters: [otlphttp, logging]

RUBY

Splunk AppDynamics コントローラ

次のスクリーンショットは、コントローラのApplication Dashboardを示しています。

OTel SDK のみ、または OTel SDK と、更新されたエージェント(Java >=21.11、.NET >=22.6、および Node.js >=22.3)を使用するアプリケーションの場合、[OTel] フローマップビューでエンドツーエンドのフローを表示できます。混在環境または古いエージェントの場合、[All Sources ] フローマップビューを使用する必要がある場合があります。これには、従来の Splunk AppDynamics SaaS と OTel の両方を使用して検出されたフローが含まれます。詳細については、コントローラ UI で OpenTelemetry™ データを表示する」を参照してください。

次のステップ

Splunk AppDynamics for OpenTelemetry を使用してアプリケーションをインストゥルメント化すると、コントローラで OpenTelemetry データを表示できます。

OpenTelemetry™ は The Linux Foundation® の商標です。