Docs » Splunk Observability Cloud でサポートされているインテグレーション » バックエンドアプリケーションをインストルメンテーションして、スパンを Splunk APM に送信する » Splunk Observability Cloud に Node.js アプリケーションをインストルメンテーションする » Splunk Observability Cloud の Node.js インストルメンテーションのトラブルシューティング

Splunk Observability Cloud の Node.js インストルメンテーションのトラブルシューティング 🔗

Splunk Distribution of OpenTelemetry JS を使用して Node.js アプリケーションをインストルメンテーションしているときに、Splunk Observability Cloud にデータが表示されない場合は、以下のトラブルシューティング手順に従ってください。

Node.jsのOpenTelemetry問題のトラブルシューティングの手順 🔗

以下の手順は、Node.js インストルメンテーションの問題のトラブルシューティングに役立ちます:

  1. 診断ロギングの有効化

  2. デバッグメトリクスを有効にする

診断ロギングの有効化 🔗

診断ログは、インストルメンテーションの問題のトラブルシューティングに役立ちます。

インストルメンテーションログをコンソールに出力するには、アプリケーションが実行されているのと同じスコープで、OTEL_LOG_LEVEL 環境変数を debug に設定します。例えば、OTEL_LOG_LEVEL=<level> node start.js。後で読み込まれるので、.envファイルには追加しないでください。

また、logLevel 引数を設定することで、プログラムでデバッグロギングを有効にすることもできます。例:

start({
   logLevel: 'debug',
   metrics: {
      // configuration passed to metrics signal
   },
   profiling: {
      // configuration passed to profiling signal
   },
   tracing: {
      // configuration passed to tracing signal
   },
});

コードでデバッグロギングを無効にするには、次の例のように setLogger() を呼び出します:

const { diag } = require('@opentelemetry/api');
diag.setLogger();

注釈

必要なときだけデバッグロギングを有効にします。デバッグモードはより多くのリソースを必要とします。

デバッグメトリクスを有効にする 🔗

You can activate internal debug metrics by setting the SPLUNK_DEBUG_METRICS_ENABLED environment variable to true in the same scope where the application is running. For example, SPLUNK_DEBUG_METRICS_ENABLED=true node start.js. Don’t add it to the .env file, as it’s loaded later.

For more information, see デバッグメトリクス.

トレース・エクスポーターの問題 🔗

デフォルトでは、Splunk Distribution of OpenTelemetry JS は OTLP エクスポーターを使用します。トレースのエクスポートに影響する問題が発生すると、デバッグログにエラーが出力されます。

OTLP がスパンをエクスポートできない 🔗

ログの以下のエラーは、インストルメンテーション器がトレースデータを OpenTelemetry Collector に送信できないことを意味します:

@opentelemetry/instrumentation-http http.ClientRequest return request
{"stack":"Error: connect ECONNREFUSED 127.0.0.1:55681\n    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1148:16)\n    at TCPConnectWrap.callbackTrampoline (internal/async_hooks.js:131:17)","message":"connect ECONNREFUSED 127.0.0.1:55681","errno":"-111","code":"ECONNREFUSED","syscall":"connect","address":"127.0.0.1","port":"55681","name":"Error"}

OTLPエクスポーターとOTel Collector 間の接続不足のトラブルシューティングを行うには、以下のことを確認してください:

  1. OTEL_EXPORTER_OTLP_ENDPOINT が正しい OpenTelemetry Collector インスタンスホストを指していることを確認します。

  2. コレクタインスタンスが構成され、稼動していることを確認します。Splunk OpenTelemetry Collector のトラブルシューティング を参照してください。

  3. OTLP レシーバーが OTel Collector でアクティブになり、トレースパイプラインに接続されていることを確認します。

  4. OTel Collector が次のアドレスを指していることを確認してください: http://<host>:4317.URL が正しいことを確認してください。

スパン送信時の401エラー 🔗

トレースを Splunk Observability Cloud に直接送信して 401 エラーコードを受け取った場合、SPLUNK_ACCESS_TOKEN で指定した認証トークンが無効です。次のような理由が考えられます:

  • 値はnullです。

  • 値が整形式トークンではありません。

  • このトークンは、authScope が ingest に設定されているアクセストークンではありません。

Splunk プラットフォームインスタンスに直接データを送信する場合は、有効な Splunk アクセストークンを使用していることを確認してください。Splunk Observability Cloudを使用したユーザー APIアクセストークンの取得と管理 を参照してください。

Webpackの互換性の問題 🔗

Splunk Distribution of OpenTelemetry JS では、Webpack を使ってバンドルされたモジュールをインストルメンテーションすることができません。OpenTelemetry はライブラリの require 呼び出しを傍受することでしかライブラリをインストルメンテーションできないからです。

バンドルされたモジュールを使用する Node.js アプリケーションをインストルメンテーションするには、require の呼び出しが OpenTelemetry から見えるように、Webpack externals 設定オプションを使用します。

以下の例では、express フレームワークをインストルメンテーションするために、webpack.config.js ファイルを編集する方法を示しています:

module.exports = {
   // ...
   externalsType: "node-commonjs",
   externals: [
      "express"
   // See https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node
   // for a list of supported instrumentations. Use the require name of the library or framework,
   // not the name of the instrumentation. For example, "tedious" instead of "instrumentation-tedious".
   ]
};

externals に追加すると、require メソッドを通して express フレームワークがロードされ、OpenTelemetry はそれをインストルメンテーションできるようになります。require メソッドが見つけられるように、パッケージが node_modules フォルダにあることを確認してください:

# Install the library or framework and add it to node_modules
npm install express

注釈

httpnetdns などの Node.js コア・モジュールを externals リストに追加する必要はありません。

Node.js の AlwaysOn Profilingのトラブルシューティング 🔗

AlwaysOn Profilingに関する一般的な問題と修正については、以下を参照してください:

AlwaysOn Profilingが有効になっていることを確認する 🔗

環境変数 SPLUNK_PROFILER_ENABLEDtrue に設定して、プロファイラが有効になっていることを確認してください。AlwaysOn Profilingの Node.js 設定 を参照してください。

サポートされていないNode.jsのバージョン 🔗

AlwaysOn Profiling を使用するには、Node.js をバージョン 16 以降にアップグレードします。

AlwaysOn Profiling のデータとログが Splunk Observability Cloud に表示されない 🔗

Collector 構成の問題により、AlwaysOn Profilingデータとログが Splunk Observability Cloud に表示されない場合があります。

この問題を解決するには、次のようにしてください:

  1. Node.jsエージェントの設定、特に SPLUNK_PROFILER_LOGS_ENDPOINT をチェックします。

  2. Splunk Distribution of OpenTelemetry Collectorが期待されるエンドポイントで実行されていること、アプリケーションホストまたはコンテナがホスト名を解決して OTLP ポートに接続できることを確認します。

  3. Splunk Distribution of OpenTelemetry Collectorを実行していることと、バージョンが 0.34 以上であることを確認してください。他のコレクタディストリビューションでは、プロファイリングデータを含むログデータをルーティングできない場合があります。

  4. カスタム設定は、コレクタにプロファイリングデータを処理させる設定をオーバーライドする可能性があります。正しいトークンとエンドポイントフィールドを持つ otlp レシーバーと splunk_hec エクスポーターを設定してください。profiling パイプラインは、設定した OTLP レシーバーと Splunk HEC エクスポーターを使用する必要があります。

次のスニペットには、profiling パイプラインのサンプルが含まれています:

receivers:
  otlp:
    protocols:
      grpc:

exporters:
  # Profiling
  splunk_hec/profiling:
    token: "${SPLUNK_ACCESS_TOKEN}"
    endpoint: "${SPLUNK_INGEST_URL}/v1/log"
    log_data_enabled: false

processors:
  batch:
  memory_limiter:
    check_interval: 2s
    limit_mib: ${SPLUNK_MEMORY_LIMIT_MIB}

service:
  pipelines:
    logs/profiling:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [splunk_hec, splunk_hec/profiling]

Splunk Observability Cloudをご利用のお客様で、Splunk Observability Cloudでデータを確認できない場合は、以下の方法でサポートを受けることができます。

Splunk Observability Cloudをご利用のお客様

見込み客および無料トライアルユーザー様

  • Splunk Answers のコミュニティサポートで質問し、回答を得る

  • Splunk #observability ユーザーグループの Slack チャンネルに参加して、世界中の顧客、パートナー、Splunk 社員とのコミュニケーションを図る。参加するには、Get Started with Splunk Community マニュアルの チャットグループ を参照してください。

このページは 2024年12月09日 に最終更新されました。