次の方法で共有


Azure Functions アプリの Application Insights ログが見つからないか正しくない

Azure FunctionsApplication Insights の統合により、関数アプリを厳密に監視できます。 また、カスタム構成なしで Application Insights を使用できます。

Application Insights ログが見つからない場合、またはデータが部分的または不正確と思われる場合は、次の手順を使用して問題を解決します。

関数アプリの構成を確認する

  1. Azure portal で Function App に移動します。

  2. [問題の診断と解決] を選び、[Azure Functions 診断]を開きます。

  3. Search バーに「Function Configuration Checks」と入力して開きます。

  4. すべての関数アプリ構成チェックの診断レポートが表示されます。 特に Application Insights では、次のチェックが実行されます。

    • 次のいずれかの接続設定のみが存在します。

      • APPINSIGHTS_INSTRUMENTATIONKEY Application Insights インストルメンテーション キー

      • APPLICATIONINSIGHTS_CONNECTION_STRING 接続

        より安定した動作を行うには、 APPLICATIONINSIGHTS_CONNECTION_STRING を使用することをお勧めします。 APPINSIGHTS_INSTRUMENTATIONKEYを使用する機能は、2025 年までに非推奨となる予定です。

    • AzureWebJobsDashboard 組み込みログが、推奨に従って無効になっている。

    • サンプリング は、Azure Functions テレメトリに対して有効になっています (既定で有効)。

推奨事項: 関数アプリはバージョン 4 で、ランタイム バージョンは少なくとも 4.15.2xx にする必要があります。 これは、このバージョン以降、Azure Functions から Application Insights サービスへのログ フローを追跡できるためです。 ログ フローを監視することで、不足しているログを確認できます。

カスタム アプリケーション ログ

既定では、書き込まれたカスタム アプリケーション ログは Functions ホストに送信され、Worker カテゴリの下で Application Insights に送信されます。 ただし、一部の言語スタックでは、ログを Application Insights に直接送信できるため、書き込むログの出力方法を完全に制御できます。 この場合、ログ パイプラインは worker > Functions host > Application Insights から worker > Application Insights に変更されます。

次の表は、各スタックで使用できる構成オプションをまとめたものです。

言語スタック カスタム ログを構成する場所
.NET (インプロセス モデル) host.json
.NET (分離モデル) 既定値 (カスタム ログを Functions ホストに送信): host.json
Application Insights にログを直接送信するには、HostBuilder で Application Insights 構成するを参照してください。
Node.JS host.json
Python host.json
Java 既定値 (カスタム ログを Functions ホストに送信): host.json
Application Insights にログを直接送信するには、「 Application Insights Java エージェントを構成するを参照してください。
PowerShell host.json

カスタム アプリケーション ログが直接送信されるように構成すると、ホストはログを出力しなくなり、host.json はログの動作を制御しなくなります。 同様に、各スタックによって公開されるオプションはカスタム ログにのみ適用され、この記事で説明されている他のランタイム ログの動作は変更されません。 この場合、すべてのログの動作を制御するには、両方の構成を変更する必要がある場合があります。

ログが見つからないか、部分的である

Application Insights を使用すると、ログ、パフォーマンス、およびエラー データを収集できます。 サンプリング構成 は、テレメトリの量を減らすために使用されます。 サンプリング機能は、次の host.json 例に示す設定で既定で有効になっています。 除外された型はサンプリングされません。

{
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond" : 20,
        "excludedTypes": "Request;Exception"
      }
    }
  }
}

部分的に不足しているログがある場合は、サンプリングが原因で発生する可能性があります。 実際のサンプリング レートを確認するには、次のコード スニペットに示されている必要な時間間隔を使用する Analytics クエリを使用します。 サンプリングの種類の TelemetrySavedPercentage が 100 未満である場合は、その種類のテレメトリがサンプリングされます。

union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > todatetime("mm/dd/yyyy hh:mm:ss") and timestamp < todatetime("mm/dd/yyyy hh:mm:ss")
| summarize TelemetrySavedPercentage = 100/avg(itemCount), TelemetryDroppedPercentage = 100-100/avg(itemCount) by bin(timestamp, 1d), itemType
| sort by timestamp asc

詳細については、「Application Insights でのデータの収集、保持、保存」をご覧ください。

ログのボリュームと詳細を制御する

書き込まれるログを増やしたり抑制したりできます。 これを行うには、 host.jsonで構成されているログ レベルとカテゴリの組み合わせを使用できます。

Azure Functions のロガーでは、すべてのログにカテゴリがあります。 このカテゴリは、ランタイム コードまたは関数コードのどの部分がログを生成したかを示します。 例えば次が挙げられます。

  • Host.ResultsFunction.<YOUR_FUNCTION_NAME>は、使用可能なカテゴリの一部です。
  • "ログ レベル" がすべてのログに割り当てられます。 この値は、 WarningInformationなどの相対的な重要度を示します。

詳細については、使用可能なその他のカテゴリログ レベルに関するページを参照してください。

サンプル コード スニペットに従って、アプリケーションでログを書き込む方法を構成できます。

{
  "version": "2.0",
  "logging": {
    "logLevel": {
      "default": "Information", // catch all default, with modifications below for individual categories.
      "Function": "Warning", // Warning level from all Functions (except the ones configured below).
      "Host.Aggregator": "Trace", // Log all traces in the 'customMetrics' table of (and shown on Metrics/Alerts blade in AI) - use either this or Host.Results
      "Host.Results": "Error", // Error and Critical requests are only logged in the 'requests' table of the AI (and shown on Monitor Functions blade in Functions App) - use either this or Host.Aggregator
      "Function.Function1": "Information", //Information level logs from Function 1, logged in 'traces', 'dependencies' and 'customMetrics' tables of AI
      "Function.Function2.User": "Information" //user code logs from Function2, logged in 'traces' table of AI
    },
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond": 1,
        "excludedTypes": "Exception"
      }
    }
  }
}

これらの値をアプリ設定レベルで構成するには ( host.json の変更での再デプロイを回避するために)、アプリケーション設定と同等の値を作成して特定の host.json 値をオーバーライドします。 詳細については、「host.json 値をオーバーライドする」を参照してください。

ログを抑制する方法の詳細については、「 functions-log-suppressionを参照してください。

仮想ネットワーク統合関数アプリでログが生成されない

関数アプリが仮想ネットワークと統合されている場合は、Application Insights SDK または Application Insights エージェントが次の URL のデータをポータルに送信できるように、サーバー ファイアウォールで送信トラフィック用のポート 443 を開く必要があります。

  • dc.applicationinsights.azure.com
  • dc.applicationinsights.microsoft.com
  • dc.services.visualstudio.com
  • * .in.applicationinsights.azure.com

詳細については、「Azure Monitor で使用される IP アドレス」を参照してください。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。