Node.jsアプリケーションをSplunk Observability Cloudにインストルメンテーションする
Splunk Distribution of OpenTelemetry Node.js は、Node.js アプリケーションやサービスを自動的にインストルメンテーションできます。次の手順に従って、操作を開始します。
Splunk Distribution of OpenTelemetry JS は、Node.js アプリケーションと、アプリケーションが使用する一般的な node.js ライブラリの多くを自動的にインストルメンテーションできます。
開始するには、ガイド付きセットアップを使用するか、手動で指示に従ってください。
ガイド付きセットアップを使用してカスタマイズされた指示を生成する
環境とアプリケーションのための基本的なインストールコマンドをすべて生成するには、Node.js ガイド付きセットアップを使用してください。Node.js ガイド付きセットアップにアクセスするには、以下の手順に従ってください。
-
Splunk Observability Cloud にログインします。
-
Node.js のガイド付きセットアップを開きます。オプションで、ガイド付きセットアップに自分で移動することもできます:
-
ナビゲーションメニューで、Data Management を選択します。
-
Available integrations タブにアクセスするか、Deployed integrations タブで Add Integration を選択します。
-
インテグレーションフィルターメニューで、By Product を選択します。
-
APM 製品を選択します。
-
Node.jsのガイド付きセットアップを開くには、Node.js タイルを選択します。
-
Splunk Distribution of OpenTelemetry JS を手動でインストールする
ガイド付きセットアップを使用しない場合は、以下の手順に従って Splunk Distribution of OpenTelemetry JS を手動でインストールしてください。
Node.jsインストルメンテーションをインストールし、有効化します。
Splunk Distribution of OpenTelemetry JS で Node.js アプリケーションをインストルメンテーションするには、以下の手順に従ってください:
-
@splunk/otelパッケージをインストールします:npm install @splunk/otelカスタム インストルメンテーションを追加するには、「カスタム インストルメンテーションを追加する」を参照してください。
-
OTEL_SERVICE_NAME環境変数を設定します:- Linux
-
export OTEL_SERVICE_NAME=<yourServiceName> - Windows PowerShell
-
$env:OTEL_SERVICE_NAME=<yourServiceName>
-
(オプション) Splunk Distribution of OpenTelemetry Collectorが別のホストで実行されている場合は、エンドポイント URL を設定します:
- Linux
-
export OTEL_EXPORTER_OTLP_ENDPOINT=<yourCollectorEndpoint>:<yourCollectorPort> - Windows PowerShell
-
$env:OTEL_EXPORTER_OTLP_ENDPOINT=<yourCollectorEndpoint>:<yourCollectorPort>
-
(オプション)デプロイ環境とサービスバージョンを設定します:
- Linux
-
export OTEL_RESOURCE_ATTRIBUTES='deployment.environment=<envtype>,service.version=<version>' - Windows PowerShell
-
$env:OTEL_RESOURCE_ATTRIBUTES='deployment.environment=<envtype>,service.version=<version>'
-
(オプション)メトリクスコレクションを有効にします。「メトリクスコレクションを有効にする」を参照してください。
-
Node.jsアプリケーションを実行するには、以下のコマンドを入力します:
node -r @splunk/otel/instrument <your-app.js>
APM に何もデータが表示されない場合は、「Splunk Observability Cloud の Node.js インストルメンテーションのトラブルシューティング」を参照してください。
AlwaysOn Profilingの有効化
AlwaysOn Profiling を有効にするには、SPLUNK_PROFILER_ENABLED 環境変数 を true に設定します。
メモリプロファイリングを有効にするには、AlwaysOn Profilingを有効にした後、SPLUNK_PROFILER_MEMORY_ENABLED 環境変数を true に設定します。
次の例は、アプリケーションコードからプロファイラを起動する方法を示しています:
start({
serviceName: '<service-name>',
endpoint: 'collectorhost:port',
profiling: { // Activates CPU profiling
memoryProfilingEnabled: true, // Activates Memory profiling
}
});
詳細については、「Splunk APMのAlwaysOn Profiling にデータを取り込む」を参照してください。詳細な設定については、「AlwaysOn Profiling の Node.js 設定」を参照してください。
メトリクス・コレクションを有効にする
実行時の自動メトリクスコレクションを有効にするには、SPLUNK_METRICS_ENABLED 環境変数を使用して、メトリクス機能を有効にします。詳細については、「メトリクスの設定」を参照してください。
- Linux
-
export SPLUNK_METRICS_ENABLED='true' - Windows PowerShell
-
$env:SPLUNK_METRICS_ENABLED='true'
Node.jsディストリビューションの設定
ほとんどの場合、入力する必要がある設定はサービス名だけです。トレース伝播フォーマットの変更やサーバートレースデータの構成などの高度な設定については、「Splunk Observability Cloud 用の Splunk Distribution of OTel JS を設定する」を参照してください。
プログラムでアプリケーションをインストルメンテーションする
トレースパイプラインをさらに細かく制御するには、Node.jsアプリケーションをプログラムでインストルメンテーションします。
プログラムでアプリケーションをインストルメンテーションするには、インストルメンテーション関数を呼び出す前に、エントリポイントスクリプトの先頭に以下の行を追加します:
const { start } = require('@splunk/otel');
start({
serviceName: 'my-node-service',
endpoint: 'http://localhost:4317'
});
// Rest of your main module
start() 関数は、コンフィギュレーション設定を引数として受け取ります。たとえば、ランタイムメトリクスやメモリプロファイリングを有効にするために使用できます。
start({
serviceName: 'my-node-service',
metrics: { runtimeMetricsEnabled: true },
profiling: { memoryProfilingEnabled: true }
});
エントリー・ポイント・スクリプトに start() 関数を追加したら、-r フラグを使用してインストルメンテーションされたエントリー・ポイント・スクリプトを渡してアプリケーションを実行します:
node -r <entry-point.js> <your-app.js>
カスタムインストルメンテーションの追加
OpenTelemetry JS Instrumentation インターフェイスを実装したカスタムまたはサードパーティのインストルメンテーションを追加するには、以下のコードを使って start() に渡します:
const { start } = require('@splunk/otel');
const { getInstrumentations } = require('@splunk/otel/lib/instrumentations');
start({
tracing: {
instrumentations: [
...getInstrumentations(), // Adds default instrumentations
new MyCustomInstrumentation(),
new AnotherInstrumentation(),
],
},
});
サポートされているインストルメンテーションのリストは、GitHub の https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/metapackages/auto-instrumentations-node#supported-instrumentations を参照してください。
KubernetesにNode.jsディストリビューションをデプロイする
Kubernetes環境にCollector for Node.jsをデプロイするには、以下の手順に従ってください:
-
アプリケーションイメージのDockerfileを編集し、以下のコマンドを追加します:
# Install the @splunk/otel package RUN npm install @splunk/otel # Set appropriate permissions RUN chmod -R go+r /node_modules/@splunk/otel -
環境変数をKubernetesリソースに公開するために、Kubernetes Downward APIを設定します。
次の例は、
.spec.template.spec.containers.envセクションの下に OpenTelemetry 設定を追加して、環境変数を公開するようにデプロイメントを更新する方法を示しています:apiVersion: apps/v1 kind: Deployment spec: selector: matchLabels: app: your-application template: spec: containers: - name: myapp image: your-app-image env: - name: SPLUNK_OTEL_AGENT valueFrom: fieldRef: fieldPath: status.hostIP - name: OTEL_EXPORTER_OTLP_ENDPOINT value: "http://$(SPLUNK_OTEL_AGENT):4317" - name: OTEL_SERVICE_NAME value: "<serviceName>" - name: OTEL_RESOURCE_ATTRIBUTES value: "deployment.environment=<environmentName>" command: - node - -r @splunk/otel/instrument - <your-app>.js
Splunk Observability Cloud に直接データを送信する
デフォルトでは、すべてのテレメトリは Splunk Distribution of OpenTelemetry Collector のローカルインスタンスに送信されます。
Splunk Observability Cloud に直接データを送信する必要がある場合は、以下の環境変数を設定します:
- Linux
-
export SPLUNK_ACCESS_TOKEN=<access_token> export SPLUNK_REALM=<realm> - Windows PowerShell
-
$env:SPLUNK_ACCESS_TOKEN=<access_token> $env:SPLUNK_REALM=<realm>
アクセストークンを取得するには、「Splunk Observability Cloud を使用したユーザー API アクセストークンの取得と管理」を参照してください。
Splunk レルムを見つけるには、「Note about realms」を参照してください。
取り込み API エンドポイントの詳細については、「APM のトレースの送信」を参照してください。
ソースホストの指定
エージェントが使用するホストを上書きするには、環境変数 OTEL_RESOURCE_ATTRIBUTES を使用して、ホストの名前を希望するソースに設定します。
- Windows PowerShell
-
$env:OTEL_RESOURCE_ATTRIBUTES=host.name=<host_name> - Linux
-
export OTEL_RESOURCE_ATTRIBUTES=host.name=<host_name>
Lambda 関数のインストルメンテーション
Splunk OpenTelemetry Lambda Layer を使用して AWS Lambda 関数をインストルメンテーションできます。詳細については、「AWS Lambda 関数を Splunk Observability Cloud にインストルメンテーションする」を参照してください。