Splunk Observability Cloud の Node.js インストルメンテーションのトラブルシューティング 🔗
Splunk Distribution of OpenTelemetry JS を使用して Node.js アプリケーションをインストルメンテーションしているときに、Splunk Observability Cloud にデータが表示されない場合は、以下のトラブルシューティング手順に従ってください。
Node.jsのOpenTelemetry問題のトラブルシューティングの手順 🔗
以下の手順は、Node.js インストルメンテーションの問題のトラブルシューティングに役立ちます:
診断ロギングの有効化 🔗
診断ログは、インストルメンテーションの問題のトラブルシューティングに役立ちます。
インストルメンテーションログをコンソールに出力するには、アプリケーションが実行されているのと同じスコープで、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 間の接続不足のトラブルシューティングを行うには、以下のことを確認してください:
OTEL_EXPORTER_OTLP_ENDPOINT
が正しい OpenTelemetry Collector インスタンスホストを指していることを確認します。コレクタインスタンスが構成され、稼動していることを確認します。Splunk OpenTelemetry Collector のトラブルシューティング を参照してください。
OTLP レシーバーが OTel Collector でアクティブになり、トレースパイプラインに接続されていることを確認します。
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
注釈
http
、net
、dns
などの Node.js コア・モジュールを externals
リストに追加する必要はありません。
Node.js の AlwaysOn Profilingのトラブルシューティング 🔗
AlwaysOn Profilingに関する一般的な問題と修正については、以下を参照してください:
AlwaysOn Profilingが有効になっていることを確認する 🔗
環境変数 SPLUNK_PROFILER_ENABLED
を true
に設定して、プロファイラが有効になっていることを確認してください。AlwaysOn Profilingの Node.js 設定 を参照してください。
サポートされていないNode.jsのバージョン 🔗
AlwaysOn Profiling を使用するには、Node.js をバージョン 16 以降にアップグレードします。
AlwaysOn Profiling のデータとログが Splunk Observability Cloud に表示されない 🔗
Collector 構成の問題により、AlwaysOn Profilingデータとログが Splunk Observability Cloud に表示されない場合があります。
この問題を解決するには、次のようにしてください:
Node.jsエージェントの設定、特に
SPLUNK_PROFILER_LOGS_ENDPOINT
をチェックします。Splunk Distribution of OpenTelemetry Collectorが期待されるエンドポイントで実行されていること、アプリケーションホストまたはコンテナがホスト名を解決して OTLP ポートに接続できることを確認します。
Splunk Distribution of OpenTelemetry Collectorを実行していることと、バージョンが 0.34 以上であることを確認してください。他のコレクタディストリビューションでは、プロファイリングデータを含むログデータをルーティングできない場合があります。
カスタム設定は、コレクタにプロファイリングデータを処理させる設定をオーバーライドする可能性があります。正しいトークンとエンドポイントフィールドを持つ
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をご利用のお客様
Submit a case in the Splunk Support Portal .
Contact Splunk Support .
見込み客および無料トライアルユーザー様
Splunk Answers のコミュニティサポートで質問し、回答を得る
Splunk #observability ユーザーグループの Slack チャンネルに参加して、世界中の顧客、パートナー、Splunk 社員とのコミュニケーションを図る。参加するには、Get Started with Splunk Community マニュアルの チャットグループ を参照してください。