HTTP の 4xx ステータスコードをエラーとして設定する

送信リクエストにおける 4xx の HTTP のレスポンスコードのうち、特定のコードまたはすべてをエラーとしてマークすることで、 Instana での正確なエラー追跡が可能になります。

デフォルトでは、 Instana .NET トレーサーは、 HTTP のレスポンスステータスコードが 5xx の範囲(500~599)にある場合にのみ、 HTTP のスパンをエラーとしてマークします。 HTTP 4xx 発信(クライアント)呼び出しに対する応答は、デフォルトではエラーとして扱われません。これは、 4xx のような応答が 404 Not Found、多くのアプリケーションにおいてエラー状態ではなく、想定される結果である場合があるためです。

この機能を使用すると、 HTTP からの発信コールにおける特定の、あるいはすべての 4xx ステータスコードをエラーとして分類することができます。 Instana その後、それらを誤った操作としてカウントし、エラー率の算出に含め、エラーダッシュボードやアラートに表示します。

注:
この設定は、送信側(クライアント/EXIT)のスパンにのみ適用されます。たとえば、 または HttpClient を使用して行われる呼び出しなどが該当します HttpWebRequest。 アプリケーションによって処理される着信 HTTP リクエスト(ENTRY/server spans)には影響ありません。 4xx レスポンスを返す下流のサービスは、着信リクエストを処理しているサーバーでエラーが発生したことを示すものではありません。

スパン・カインドの振る舞い

表 1. スパン・カインドの振る舞い
スパンの種類 トレーサー用語 4xx 行動 5xx 行動
お客様 EXIT スパン HttpClient 外部の API への呼び出し 設定可能(オプトイン) 常にエラーが発生する
SERVER ENTRY スパン ASP.NET Core からのリクエストを受信しました 決してエラーを出さない 常にエラーが発生する

デフォルトの動作

設定を行わない場合、トレーサーは以下のルールを適用します:

  • HTTP 1xx–4xx ステータスコード:どのスパンでもエラーとしてマークされていません。
  • HTTP 5xx ステータスコード:EXITスパンとENTRYスパンの両方で、常にエラーとしてマークされます。

この動作は下位互換性があり、既存のデプロイメントに変更を加える必要はありません。 このトピックで説明する設定オプションは、デフォルトの動作に加えて、エラーの分類を追加するものです。

構成方式

以下の設定方法がサポートされています(優先順位の高い順に列挙しています):

  1. 環境変数 :プロセスの起動時に設定され、最優先されます。
  2. YAML 設定ファイル :. を通じて設定されたファイルパス INSTANA_CONFIG_PATH
  3. エージェントベースの設定 :接続時に Instana エージェントによって提供されます。優先度は最も低くなります。

1つのプロセスの実行期間中、有効になるメソッドは1つだけです。 環境変数が設定されている場合、 YAML およびエージェントの設定は無視されます。 詳細については、「 設定の優先順位」 を参照してください。

環境変数

以下の環境変数を使用して、 HTTP の 4xx エラー分類を設定してください。

INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS

表 2.INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS プロパティ
プロパティー
タイプ カンマ区切りの整数のリスト
有効な範囲 400~499のみ。 この範囲外の値は無視されます。
Default (未設定)
401,403,429

EXIT(クライアント)スパンにおいて、リストされている HTTP4xx のステータスコードをエラーとしてマークします。 この変数が設定されている場合、 は無視 INSTANA_TRACING_HTTP_EXIT_CLASSIFY_ALL_4XX_AS_ERRORS されます。

# Linux / macOS
export INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS=401,403,429

# Windows (PowerShell)
$env:INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS="401,403,429"

# Docker
ENV INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS=401,403,429

# Kubernetes (env section of a container spec)
- name: INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS
  value: "401,403,429"

INSTANA_TRACING_HTTP_EXIT_CLASSIFY_ALL_4XX_AS_ERRORS

表 3. INSTANA_TRACING_HTTP_EXIT_CLASSIFY_ALL_4XX_AS_ERRORS プロパティ
プロパティー
タイプ ブール・ストリング
許容値 true, false
Default false

に設定すると true、EXITスパンにおけるすべての HTTP 4xx レスポンス(400~499)がエラーとしてマークされます。 も設定 INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS されている場合、この設定は無視されます。

# Mark all 4xx responses on exit spans as errors
export INSTANA_TRACING_HTTP_EXIT_CLASSIFY_ALL_4XX_AS_ERRORS=true

YAML 設定ファイル

すでに Instana の設定ファイル(環境 INSTANA_CONFIG_PATH 変数を通じて設定されているもの)を使用している場合は、スパンフィルタリングなどの他の設定とともに、 HTTP のエラー分類設定をそのファイルに追加することができます。

注:
YAML 環境 INSTANA_TRACING_HTTP_EXIT_CLASSIFY_ALL_4XX_AS_ERRORS 変数 `` または INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS `` のいずれかが設定されている場合、設定は無視されます。

特定の 4xx コードをエラーとしてマークする

com.instana.tracing:
  http:
    exit:
      classify-as-errors:
        - 401
        - 403
        - 429

すべての「 4xx 」コードをエラーとしてマークする

com.instana.tracing:
  http:
    exit:
      classify-all-4xx-as-errors: true

両方の設定キーが定義されている場合の優先順位

両方のキーが存在する場合、が優先 classify-as-errors されます。

com.instana.tracing:
  http:
    exit:
      classify-all-4xx-as-errors: true   # ignored — classify-as-errors is non-empty
      classify-as-errors:
        - 401
        - 403

YAML でサポートされているフォーマット

表 4. 対応フォーマット YAML
フォーマット
ブロックリスト(推奨) classify-as-errors: 以下の品目 - 401 とともに
インライン配列 classify-as-errors: [401, 403, 429]
ルートキーのバリエーション com.instana.tracing:またはtracing:

エージェントベースの設定

Instana エージェントは、ディスカバリ応答の一部として、 HTTP のエラー分類設定を提供することができます。 トレーサーは、エージェントに初めて接続した際に、この設定を自動的に読み込みます。 追加のセットアップは不要です。

エージェントベースの設定では、 YAML ファイルと同じキー構造が使用されます。 これは優先順位が最も低いソースであり、環境変数がすでに設定されている場合は、何も通知せずにスキップされます。

注:
エージェントの設定は、アプリケーションが起動し、エージェントに接続した後に適用されます。 起動直後、エージェントの設定がまだ有効になっていない状態が短時間続く場合があります。 時間的制約の厳しい環境では、代わりに環境変数を使用してください。

設定の優先順位

複数の設定ソースが存在する場合、以下の優先順位が適用されます:

Environment Variables  >  YAML file  >  Agent config  >  Default (4xx not error)

起動時に環境変数が検出されると、その変数はプロセスの存続期間全体にわたって固定されます。 YAML また、エージェントの設定は恒久的にバイパスされます。

同一ソース内での優先順位:設定ソースにかかわらず、両方のキーが存在する場合、 は よりも classify-as-errors 常に優先されます classify-all-4xx-as-errors

構成例

例 1: 「401 Unauthorized」のみをエラーとしてマークする

アプリケーションにおいて、404は正常な状態とみなされるが、401は常にクライアントの設定ミスを示すものと想定される場合は、この設定を使用してください:

export INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS=401

例 2: 認証およびレート制限の失敗をエラーとしてマークする

export INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS=401,403,429

例 3: 厳格な環境において、すべての ` 4xx ` をエラーとしてマークする

export INSTANA_TRACING_HTTP_EXIT_CLASSIFY_ALL_4XX_AS_ERRORS=true

例 4:特定のコードを含む「 YAML 」

com.instana.tracing:
  http:
    exit:
      classify-as-errors:
        - 401
        - 403

例 5: Kubernetes のデプロイ

env:
  - name: INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS
    value: "401,403,429"

ベスト・プラクティス

HTTP の 4xx ステータスコードをエラーとして設定する際は、以下のベストプラクティスを参考にしてください。

4xx のステータスコードをすべて分類するのではなく、具体的なコードを使用してください

この設定を行う classify-all-4xx-as-errors: true と、 4xx のすべてのレスポンスがエラーとして扱われます。これには、通常は想定内であり、問題のないコード 409 Conflict である や 404 Not Found なども含まれます。 この設定により、エラー件数が過大に計上されたり、誤ったアラートが発生したりする可能性があります。 アプリケーションのコンテキストにおいて、真に予期せぬ障害を示している特定のコードのみをリストアップするようにしてください。

最初は小規模に始め、必要に応じて拡大する

まずは、エラーと最も明確に関連しているコード(通常は 401403429)のみにマークを付け、ダッシュボードへの影響を確認してから、他のコードを追加するようにしてください。 エラー率が急激に上昇すると、真の回帰を特定することが難しくなることがあります。

コンテナおよび Kubernetes での環境変数の使用

環境変数は、コンテナ化された環境において最も信頼性の高い設定方法です。 これらは起動時に適用され、Podの仕様で確認でき、エージェントの接続問題によって上書きされることはありません。 YAML またはエージェント設定は、多数のサービスにわたる一元管理が必要な場合にのみ使用してください。

同じ設定について、環境変数と YAML の両方を設定しないでください

両方が指定されている場合、環境変数が優先され、 YAML の値は黙って無視されます。 混乱を避けるため、各デプロイメントごとに1つの設定方法を採用し、それを文書化してください。

共有サービスやマルチテナント型サービスでは、「すべてを分類」する処理を避ける

複数のチームやクライアントが利用するサービスにおいて、一部の 4xx コードは、特定の呼び出し元に対して有効となる場合があります。 特定のコードリストを使用することで、それらのコードの使用が想定されている呼び出し元には影響を与えることなく、予測可能で一貫性のあるエラー報告が可能になります。

トラブルシューティング

HTTP の「 4xx 」エラー分類に関する一般的な問題の診断および解決には、以下のトラブルシューティング情報をご利用ください。

4xx 設定後もスパンにエラーとしてマークされない

  1. 起動時(環境変数および YAML )またはエージェントが最初に接続した際に、設定が一度読み込まれることを確認してください。 プロセスが開始される前に、環境変数が設定されていることを確認してください。
  2. 環境変数が正しく設定されていることを確認してください。 プロセス環境内で ( Linuxprintenv | grep INSTANA_TRACING ) または Get-ChildItem Env: | Where-Object Name -like "INSTANA_TRACING*" ( PowerShell ) を実行してください。
  3. ステータスコードの範囲を確認してください。 400~499の範囲の整数のみが有効です。 、や 500、といった値 200、あるいは数値ではない文字列は、警告がログに記録されるものの、何も表示されずに無視されます。
  4. 「ENTRY」スパンではなく、「EXIT」スパンを確認してください。

「classify-all」を有効にした後、エラー数が予想以上に多くなっている

この設定を行う INSTANA_TRACING_HTTP_EXIT_CLASSIFY_ALL_4XX_AS_ERRORS=true と、 4xx からのすべてのレスポンスがエラーとして扱われます。これには、アプリケーションでは想定される可能性 409 のある や 404 といったコードも含まれます。 ノイズを低減するために、特定のコードリストを使用して INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS に切り替えてください。

YAML 設定が反映されていない

  1. が、存在し、かつプロセス所有者が読み取り可能なファイルを指 INSTANA_CONFIG_PATH していることを確認してください。
  2. 環境 INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS 変数 および INSTANA_TRACING_HTTP_EXIT_CLASSIFY_ALL_4XX_AS_ERRORS が設定されていないことを確認してください。 これらは、 YAML を黙って上書きします。
  3. YAML のキー名には、アンダースコア(.)ではなくハイフン(--)が使用されていることを確認してください classify-as-errorsclassify_as_errors
  4. インデントを確認してください。 YAML インデントに依存します。 http は( com.instana.tracing または tracing)の子でなければならず、また、はの子で exit なければならない http

エージェントの設定が適用されていません

エージェントの設定は、トレーサーがエージェントに接続した後にのみ適用されます。 起動時にエージェントが利用できない場合、エージェントの設定が反映されない可能性があります。 起動時の設定を確実に反映させるには、環境変数を使用してください。

エージェントの設定を上書きするような環境変数が設定されていないことを確認してください:

printenv | grep INSTANA_TRACING

再起動のたびに設定がリセットされているようです

一部の環境では、シェルセッションで設定された環境変数は、子プロセスに引き継がれません。 再起動後も設定が維持されるように、システムサービス定義、 Docker Compose ファイル、 Kubernetes のPod仕様、またはアプリケーションの起動スクリプトでこれらの設定を行ってください。

参照

以下の参考情報では、環境変数、 YAML キー、および検証ルールについてまとめています。

環境変数

表 5. 環境変数
変数 タイプ Default 説明
INSTANA_TRACING_HTTP_EXIT_CLASSIFY_AS_ERRORS カンマ区切りの整数 (未設定) EXITスパンでエラーとしてマークすべき 4xx コードの一覧。 400~499以外の値は無視されます。 . より優先される classify-all
INSTANA_TRACING_HTTP_EXIT_CLASSIFY_ALL_4XX_AS_ERRORS trueまたはfalse false この場合 true、EXITスパンにおいて400~499のすべての応答をエラーとしてマークします。 が設定されている classify-as-errors 場合は無視されます。
INSTANA_CONFIG_PATH ファイル・パス 設定なし YAML の設定ファイルへの絶対パス。 spanフィルタリングやその他のトレーサー機能と共有されています。

YAML キー

表 6. YAML キー
鍵パス タイプ 説明
com.instana.tracing.http.exit.classify-as-errors 整数のリスト EXITスパンでエラーとしてマークすべき 4xx ステータスコードの一覧。
com.instana.tracing.http.exit.classify-all-4xx-as-errors ブール この場合 true、EXITスパン上の400~499のすべての応答がエラーとしてマークされます。

検証ルール

  • の値は、400~499の範囲の整数でなければ classify-as-errors なりません。
  • この範囲外の値は無視され、トレーサーログに警告が記録されます。
  • 整数以外の値は無視され、トレーサーログに警告が記録されます。
  • 同じ設定レベルに両方のキーが存在する場合、が優先 classify-as-errors されます。
  • 5xx ステータスコード(500~599)は常にエラーとして扱われ、無効にすることはできません。
  • ENTRY(サーバー)のスパンは、設定にかかわらず、決して影響を受けません。