Download PDF
Download page Cisco AppDynamics for OpenTelemetry™ を使用したアプリケーションのインストゥルメント化.
Cisco AppDynamics for OpenTelemetry™ を使用したアプリケーションのインストゥルメント化
アプリケーションを 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 システムプロパティに以下のシステムプロパティを追加します。
OpenTelemetry を有効にします。
-Dappdynamics.opentelemetry.enabled=true
CODEトレースエクスポータを OTLP に設定します(OpenTelemetry 対応の Java エージェントは、OTLP 形式で OpenTelemetry スパンを送信します)。
-Dotel.traces.exporter=otlp
CODEJVM の階層名(
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
(オプション)バッチ処理のタイミングの設定
デフォルトのエクスポータスパンバッチ処理スケジュールは 5000 ミリ秒です。バッチ処理スケジュールは、OpenTelemetry 環境変数 OTEL_BSP_SCHEDULE_DELAY
を使用して構成できます。
-Dotel.bsp.schedule.delay=90000
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
.NET エージェントで OpenTelemetry を有効にする
OpenTelemetry の .NET エージェントを有効にするには、次のものが必要です。
- .NET エージェントバージョン 22.6.0 以降
- .NET バージョン 6.0 以降を使用するアプリケーション
- OpenTelemetry でサポートされる .NET フレームワークのリストについては、「.NET Agent Frameworks for OpenTelemetry」を参照してください。
.NET アプリケーションを実行するプロセスに次の環境変数を追加します。
OpenTelemetry を有効にします。
APPDYNAMICS_OPENTELEMETRY_ENABLED=true
CODEトレースエクスポータを OTLP に設定します(OpenTelemetry 対応の .NET エージェントは、OTLP 形式で OpenTelemetry スパンを送信します)。
OTEL_TRACES_EXPORTER=otlp
CODEアプリケーションの階層名(
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
(オプション)バッチ処理のタイミングの設定
デフォルトのエクスポータスパンバッチ処理スケジュールは 5000 ミリ秒です。バッチ処理スケジュールは、環境変数 OTEL_BSP_SCHEDULE_DELAY
を使用して構成できます。
OTEL_BSP_SCHEDULE_DELAY=90000
.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
...
Node.js エージェントで OpenTelemetry を有効にする
Node.js エージェントで OpenTelemetry を有効にするには、Node.js エージェントバージョン 22.3.0 以降が必要です。
Node.js アプリケーションコードに以下の OpenTelemetry 構成を追加します。
require
ステートメントで OpenTelemetry を有効にします。Node.js アプリケーションの場合、OpenTelemetry の AppName および TierName は、Node.js
require
ステートメントのAppName
とTierName
から派生します。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スパンデータの追加のロギングを許可します。
require("appdynamics").profile( { ... openTelemetry: { debug: <True:False> // Additional logging, console dump of span data ... } ... } )
JSOpenTelemetry 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.
}
...
}
}
)
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
}
}
...
}
)
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 アプリケーションをインストゥルメント化する例です。
以下のパッケージを既存の Gemfile に追加します。
Gemfile
gem 'opentelemetry-sdk' gem 'opentelemetry-exporter-otlp' gem 'opentelemetry-instrumentation-all'
RUBYOpenTelemetry を初期化するように 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
RUBYOpenTelemetry Collector にトレースをレポートするようにアプリケーションを設定します。OpenTelemetry Collector がリッスンする
OTEL_EXPORTER_OTLP_ENDPOINT
環境変数を設定します。env
export OTEL_EXPORTER_OTLP_ENDPOINT=http://0.0.0.0:4318
RUBY0.0.0.0
は OpenTelemetry Collector HOST であり、4318
は OpenTelemetry Collector PORT です。使用可能なエクスポータの詳細については、Ruby エクスポータを参照してください。新しく追加した Gem を Gemfile にインストールします。
bundle install
CODE- Ruby アプリケーションを起動します。
手動インストゥルメンテーション
手動インストゥルメンテーション方式は、フレームワークのサポートがない場合にのみ使用します。
以下のパッケージを既存の Gemfile に追加します。
Gemfile
gem 'opentelemetry-sdk' gem 'opentelemetry-exporter-otlp'
RUBY次の行を追加して、スパンを手動で作成します。たとえば、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
RUBYOpenTelemetry Collector がリッスンする
OTEL_EXPORTER_OTLP_ENDPOINT
環境変数を設定します。env
export OTEL_EXPORTER_OTLP_ENDPOINT=http://0.0.0.0:4318
RUBY0.0.0.0
は OpenTelemetry Collector HOST であり、4318
は OpenTelemetry Collector PORT です。使用可能なエクスポータの詳細については、Ruby エクスポータを参照してください。新しく追加した Gem を Gemfile にインストールします。
bundle install
CODE- 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]
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® の商標です。