AWS Lambda における「.NET 」トレースのトラブルシューティング

AWS Lambda の関数でトレースが期待通りに動作しない場合は、具体的なケースごとの対処法に進む前に、まず一般的なトラブルシューティングの手順から試してみてください。

一般的なトラブルシューティング

以下のステップを実行します。

  1. 前提条件を確認してください:

    • .NET のバージョン互換性を確認してください:

      • .NET 実行環境: 8.0 以降
    • 「 Instana 」レイヤーがLambda関数に正しく紐付けられていることを確認してください。
    • Layerのインストールを確認する: Instana Layerが正しく読み込まれると、 CloudWatch のログに初期化メッセージが表示されます:

      • Instana の初期化メッセージを確認してください。
      • レイヤーの読み込みに関連するエラーメッセージがないか確認してください。
      • 環境変数が正しく読み込まれていることを確認してください。

      これらのメッセージが表示されない場合は:

      • レイヤーのARNが正しいことを確認してください。
      • Lambda関数のランタイム互換性を確認してください。
      • 環境変数が関数レベルで設定されていることを確認してください。
  2. 環境変数の確認:トレースが機能しない場合は、以下の環境変数が設定されているか確認してください:

    • 正しく設定してください。
    • 正しく綴られています。
    • アプリケーションがデプロイされる環境に合わせて適切に設定してください。
    • 有効であり、プロセスまたはアプリケーションからアクセス可能で、かつ正確である。
  3. Lambdaの設定を確認する:

    • Lambda関数が正しいランタイム(.NET 8以降)を使用していることを確認してください。
    • Instana レイヤーのARNが、正しい AWS リージョンおよび.NET ランタイムと一致していることを確認してください。
    • Lambda関数がインターネットに接続されているか、または Instana エンドポイントにアクセスできるよう、Virtual Private Cloud(VPC)が適切に構成されていることを確認してください。
  4. エンドポイント URL の設定を確認してください:

    • SaaS Instana : Instana テナントの正しいサーバーレスエンドポイントを使用してください:

      • フォーマット: https://serverless-<region>.instana.io
      • 例: https://serverless-blue-saas.instana.io
    • セルフホスト型 Instana :

      • フォーマット: https://<instana-backend-ip>/serverless
      • 環境変数を設定します: INSTANA_DISABLE_CA_CHECK=true または 1
  5. Lambda関数のタイムアウト時間が十分であることを確認してください(初期のコールドスタートでは、最低30秒を推奨します)。
  6. CloudWatch のログを確認し、 Instana に関連するエラーや警告がないか確認してください。

ケースごとのトラブルシューティング

一般的なトラブルシューティングを行っても問題が解決しない場合は、以下のトラブルシューティング手順をご確認ください:

シナリオ 1: Instana のUIにトレースが表示されない

症状: Lambda関数は正常に実行されるが、設定後も Instana のUIにトレースが表示されない。

トラブルシューティングの手順

  1. Lambda関数のランタイムがサポートされていることを確認してください(.NET s 8以降)。
  2. 「 Instana 」レイヤーがLambda関数に正しく紐付けられていることを確認してください:

    1. AWS コンソールで、 [Lambda ] > [Functions ] > [ご自身の関数] の順に移動します。
    2. Lambda 関数の [ 設定 ] タブで、 [レイヤー] をクリックします。
    3. 「 Instana 」レイヤーが一覧に表示されていることを確認してください。
  3. レイヤーのARNが、正しいリージョンおよび.NET のランタイムバージョンと一致していることを確認してください:

    • 標準的な AWS 領域のARN形式: arn:aws:lambda:<region>:410797082306:layer:instana-dotnetcore:<layer-version>
    • 中国における AWS 領域のARNフォーマット: arn:aws:lambda:<region>:107998019096:layer:instana-dotnetcore:<layer-version>
  4. 環境変数が正しく設定されていること、およびパスが有効であり、プロセスまたはアプリケーションからアクセス可能で、かつ正しいことを確認してください:

    CORECLR_ENABLE_PROFILING=1
    CORECLR_PROFILER={cf0d821e-299b-5307-a3d8-b283c03916dd}
    CORECLR_PROFILER_PATH=/opt/instana_tracing/CoreProfiler.so
    DOTNET_STARTUP_HOOKS=/opt/Instana.Tracing.Core.dll
    INSTANA_AGENT_KEY=<your-agent-key>
    INSTANA_ENDPOINT_URL=<serverless_instana_endpoint>
    INSTANA_AWS_ACCOUNT_ID=<your_aws_account_id>
    LAMBDA_HANDLER=<Assembly::Namespace.ClassName::MethodName>
  5. エンドポイント ` URL ` が正しいことを確認してください:

    • SaaS Instana : Instana テナントの正しいサーバーレスエンドポイントを使用してください:

      • フォーマット: https://serverless-<region>.instana.io
      • 例: https://serverless-blue-saas.instana.io
    • セルフホスト型 Instana :

      • フォーマット: https://<instana-backend-ip>/serverless
      • 環境変数を INSTANA_DISABLE_CA_CHECKtrue 設定するか、 1
  6. Lambda関数がインターネットに接続されているか、または Instana エンドポイントにアクセスできるようVPCが適切に構成されていることを確認してください。
  7. Lambda関数の実行ロールに必要な権限が設定されているか確認してください。
  8. Lambda関数のタイムアウト時間が十分であることを確認してください(初期のコールドスタートでは、最低30秒を推奨します)。
  9. CloudWatch のログを確認し、 Instana に関連するエラーや警告がないか確認してください。

シナリオ 2: Lambda 関数のタイムアウトに関する問題

症状:Instana トレースを追加した後、Lambda関数がタイムアウトするか、実行時間が大幅に増加する。

トラブルシューティングの手順

  1. Lambda関数のタイムアウト設定を確認し(必要に応じて延長する):

    1. AWS コンソールで、 [Lambda ] > [Functions ] > [ご自身の関数] の順に移動します。
    2. [構成 ] タブを選択します。
    3. 「一般設定」 >「 編集」 をクリックします。
    4. タイムアウトの値を増やしてください(最低30秒を推奨します)。
  2. コールドスタート時の負荷を確認してください:最初の起動には時間がかかります。
  3. Lambda関数に十分なメモリが割り当てられていることを確認してください(最低512 MBを推奨):

    1. AWS コンソールで、 [Lambda ] > [Functions ] > [ご自身の関数] の順に移動します。
    2. [構成 ] タブを選択します。
    3. 「一般設定」 >「 編集」 をクリックします。
    4. 必要に応じてメモリの割り当てを増やしてください。
  4. CloudWatch のログを確認し、パフォーマンス指標を確認してください。
  5. 同期呼び出しがLambdaの実行をブロックしていないか確認してください。
  6. 可能であれば、非同期トレースの利用を検討してください。
  7. Instana エンドポイントへのネットワーク遅延を確認してください。

シナリオ3:スパンが欠落している、またはトレースが不完全である

症状: 一部のトレースは表示されるものの、不完全であったり、下流の呼び出しが欠落していたり、あるいは欠落部分が見られたりする。

トラブルシューティングの手順

  1. サポートされているすべてのライブラリが、互換性のあるバージョン範囲内にあることを確認してください:
  2. 特定のライブラリに対してカスタム・インスツルメンテーションが必要かどうかを確認してください。
  3. 以下のLambda関数のコードを確認してください:

    • 適切にトレースされない可能性があるAsync/awaitパターン
    • Lambdaが返却された後に完了するバックグラウンドタスク
    • サポート対象外のクライアントを使用した外部サービスへの呼び出し
  4. デバッグログを有効にして、どのスパンが生成されるかを確認してください。
  5. すべてのスパンが送信される前に、Lambda関数が停止しているかどうかを確認してください。
  6. 分散トレーシングにおいて、コンテキストが適切に伝播されることを確認する。

シナリオ4:レイヤーの接続エラー

症状:Instana レイヤーを AWS Lambda 関数にアタッチできない、またはアタッチはされているものの、関数の実行中に正しく読み込まれない。

トラブルシューティングの手順

  1. レイヤーのARNが一致していることを確認してください:

    • AWS の地域を修正
    • .NET のランタイムバージョンを正しく設定してください(.NET 8以降)
    • 利用可能な最新のレイヤーバージョン
  2. Lambda関数のランタイムがレイヤーの互換性要件を満たしているか確認してください:

    • .NET バージョン8以降

    ランタイムがサポートされていない場合は、レイヤーをアタッチする前にLambdaランタイムを更新してください。

  3. 「 AWS 」アカウントが「 Instana 」レイヤーにアクセスする権限を持っていることを確認してください。
  4. Lambda関数が5レイヤーの制限に達していないか確認してください。
  5. CloudWatch のログを確認し、レイヤーの初期化エラーがないか確認してください。
  6. そのレイヤーがLambda関数のアーキテクチャと互換性があることを確認してください( x86_64 または arm64 ):

    • Lambda関数のアーキテクチャ設定を確認してください。
    • Instana レイヤーが、選択したアーキテクチャに対応していることを確認してください。

シナリオ 5:環境変数の設定に関する問題

症状:Instana という環境変数が設定されているにもかかわらず、Lambda関数で認識されない。

トラブルシューティングの手順

  1. 環境変数がコード内だけでなく、Lambda関数レベルでも設定されていることを確認してください:

    1. AWS コンソールで、 [Lambda ] > [Functions ] > [ご自身の関数] の順に移動します。
    2. [構成 ] タブを選択します。
    3. 「環境変数」 をクリックします。
    4. 必要な変数がすべて存在することを確認してください。
  2. 環境変数名にタイプミスがないか確認してください(大文字と小文字が区別されます)。
  3. が有効であり、有効期限が切れていないことを INSTANA_AGENT_KEY 確認してください。
  4. Lambdaの実行環境から にアクセスできることを INSTANA_ENDPOINT_URL 確認してください。
  5. 環境変数が上書きされていないか、次の方法で確認してください:

    • Lambda関数のコード
    • コンテナイメージの設定(コンテナ化されたLambda用)
    • Infrastructure as Code( Terraform または CloudFormation )
  6. CloudWatch のログを確認し、環境変数の読み込みに関するメッセージを探してください。

シナリオ 7:VPC の設定に関する問題

症状: VPC内のLambda関数が、 Instana にトレースを送信できません。

トラブルシューティングの手順

  1. 以下の手順で、Lambda関数がインターネットにアクセスできることを確認してください:

    • NATゲートウェイ(パブリック Instana エンドポイント用)
    • VPCエンドポイント( AWS サービス用)
    • インターネットゲートウェイ(パブリックサブネットにある場合)
  2. セキュリティグループが HTTPS への送信トラフィック(ポート443)を許可しているか確認してください:

    1. AWS コンソールで、 [Lambda ] > [Functions ] > [ご自身の関数] の順に移動します。
    2. [構成 ] タブを選択します。
    3. 「VPC」 をクリックします。
    4. 関連するセキュリティグループを確認してください。
    5. アウトバウンドルールで HTTPS (ポート443)への通信が許可されていることを確認してください。
  3. ネットワークACLによって送信トラフィックがブロックされていないことを確認してください:

    1. AWS コンソールで、 [VPC ] > [ネットワークACL ] に移動します。
    2. Lambda関数のサブネットに関連付けられている Network ACL を確認してください。
    3. 送信ルールで HTTPS へのトラフィックが許可されていることを確認してください。
  4. wgetまたは を使用して、テスト用Lambda関数で curl 接続を確認します:

    接続性をテストするための簡単なLambda関数を作成します:

    using System.Net.Http;
    
    public async Task<string> TestConnectivity()
    {
        using var client = new HttpClient();
        var response = await client.GetAsync("https://serverless-<region>.instana.io");
        return $"Status: {response.StatusCode}";
    }
  5. Instana のセルフホスト版の場合:

    • VPCピアリングまたは Transit Gateway の設定を確認してください。
    • ルーティングが適切に行われているか、ルーティングテーブルを確認してください。
    • DNS の解決が、 Instana バックエンドで正常に機能することを確認してください。

ログの収集

AWS Lambda 自動ログ収集には対応していません。 したがって、ログは手動で収集する必要があります。

ログを手動で収集する

以下のステップを実行します。

  1. Lambda関数に環境変数を追加して、デバッグログを有効にします:

    INSTANA_DEBUG=true
    INSTANA_LOG_LEVEL=DEBUG
  2. CloudWatch のログにアクセスする:

    1. Go 「 AWS 」コンソール > 「 CloudWatch 」 > 「Log Groups 」へ移動します。
    2. ロググループを検索: /aws/lambda/<function-name>.
    3. Instana に関連するメッセージについて、最近のログストリームを確認してください。
  3. Lambda関数の設定情報を取得する:

    aws lambda get-function-configuration --function-name <function-name>
  4. Lambda関数の詳細を取得する:

    aws lambda get-function --function-name <function-name>
  5. Lambda関数の呼び出しをテストする:

    aws lambda invoke --function-name <function-name> --payload '{}' response.json
  6. レイヤー情報を確認する:

    aws lambda list-layers
    aws lambda get-layer-version --layer-name instana-dotnet --version-number <version>

サポート・チケットのオープン

これらのトラブルシューティングの手順を実行しても問題が解決しない場合は、サポートチケットを送信する前に、 MustGather のデータを収集してください。 MustGather このデータは、 IBM サポートが問題をより効率的に診断するのに役立ちます。

詳細については、 MustGather:、 Instana、.NET、.NET Core、Tracer - AWS Lambda をご覧ください。