英語で読む

次の方法で共有


Azure Cosmos DB 用 Azure Functions トリガーによるログと接続を構成する方法

適用対象: NoSQL

この記事では、Azure Cosmos DB 用 Azure Functions トリガーを使用するときに設定できる詳細な構成オプションについて説明します。

トリガー固有のログを有効にする

Azure Cosmos DB 用 Azure Functions トリガーでは Change Feed プロセッサ ライブラリが内部的に使用されます。このライブラリでは、トラブルシューティングの目的で、内部操作を監視するために使用できる正常性ログのセットが生成されます。

正常性ログには、負荷分散、初期化、処理の各シナリオ中に操作を試みたときに、Azure Cosmos DB 用 Azure Functions トリガーがどのように動作したかが記述されます。

ログの記録を有効にする

Azure Cosmos DB 用 Azure Functions トリガーの使用時にログ記録を有効にするには、対象の Azure Functions プロジェクトまたは Azure Function アプリ内で host.json ファイルを探し、必要なログ記録のレベルを構成します。 次のサンプルで示すように、Host.Triggers.CosmosDB のトレースを有効にします。

{
  "version": "2.0",
  "logging": {
    "fileLoggingMode": "debugOnly",
    "logLevel": {
      "Host.Triggers.CosmosDB": "Warning"
    }
  }
}

更新した構成で Azure Functions をデプロイすると、トレースの一部として Azure Cosmos DB 用 Azure Functions トリガーのログが表示されるようになります。 構成済みログ プロバイダーでのログは、"カテゴリ" Host.Triggers.CosmosDB で見ることができます。

生成されるログの種類は?

有効にすると、次の 4 つのレベルのログ イベントが生成されます。

  • エラー:

    • 正しいトリガー機能に影響を与える変更フィード処理で、不明または重大なエラーが発生した場合。
  • 警告:

    • 関数ユーザー コードにハンドルされない例外があった場合 - 関数コードにギャップがあり、関数にエラーに対する回復性 やシリアル化エラーに対する回復性がない (C# 関数の場合、生の json を選択した C# 型に逆シリアル化することはできない)。
    • トリガーと Azure Cosmos DB アカウントとのやり取りを妨げる、一時的な接続の問題がある場合。 トリガーはこれらの 一時的な接続エラーを 再試行しますが、長時間続くとネットワークの問題となる可能性があります。 デバッグ レベル トレースを有効にして、基になる Azure Cosmos DB SDK から診断を取得できます。
  • [情報]:

    • リースが別のインスタンスに取得されるとき - 初期化の間と関数のスケーリング時に、リースのバランスを別のインスタンスに再調整できます。 取得または有効期限の間隔をカスタマイズした場合は、値が不適切である可能性があることを示す場合もあります (有効期限の間隔が更新より短くなっています)。
  • デバッグ:

    • インスタンスがリースを取得すると、現在のインスタンスはリースの変更フィードの処理を開始します。
    • インスタンスがリースをリリースすると、現在のインスタンスはリースの変更フィードの処理を中止します。
    • 新しい変更がトリガーから関数コードに配信されると、関数コードでエラーが発生している可能性があり、かつ変更を受け取っているかどうかわからない状況をデバッグするのに役立ちます。
    • 警告とエラーのトレースの場合は、トラブルシューティングのために基になる Azure Cosmos DB SDK から診断情報を追加します。

ソース コードを参照して、完全な詳細を確認することもできます。

ログのクエリを実行する

Azure Application Insights の Analytics で Azure Cosmos DB 用 Azure Functions トリガーによって生成されたログを照会するには、次のクエリを実行します。

traces
| where customDimensions.Category == "Host.Triggers.CosmosDB"

接続ポリシーの構成

接続モードには、直接モードとゲートウェイ モードの 2 つがあります。 これらの接続モードの詳細については、接続モードに関する記事を参照してください。 既定では、Azure Cosmos DB 用 Azure Functions トリガーにおけるすべての接続の確立に、ゲートウェイが使用されます。 ただしこれは、パフォーマンス重視のシナリオでは最適な選択肢ではない可能性があります。

接続のモードとプロトコルの変更

クライアントの接続ポリシーを構成するために使用できる 2 つの主要な構成設定として、接続モード接続プロトコルがあります。 Azure Cosmos DB 用 Azure Functions トリガーとすべての Azure Cosmos DB バインディングで使用される既定の接続モードおよびプロトコルは、変更することができます。 既定の設定を変更するには、Azure Functions プロジェクトまたは Azure Functions アプリ内で host.json ファイルを見つけて、次の追加設定を行います。

{
  "cosmosDB": {
    "connectionMode": "Direct",
    "protocol": "Tcp"
  }
}

connectionMode には目的の接続モード (Direct または Gateway)、protocol には目的の接続プロトコル (直接モードでは Tcp またはゲートウェイ モードでは Https) が設定されている必要があります。

自分の Azure Functions プロジェクトで Azure Functions V1 ランタイムを使用している場合、構成の名前はわずかに異なり、documentDB ではなく cosmosDB を使用する必要があります。

{
  "documentDB": {
    "connectionMode": "Direct",
    "protocol": "Tcp"
  }
}

ユーザー エージェントのカスタマイズ

Azure Cosmos DB 用の Azure Functions トリガーは、監視に反映されるサービスへの要求を実行します。 Azure 関数からの要求に使用されるユーザー エージェントをカスタマイズするには、userAgentSuffixhost.json を変更します。

{
  "cosmosDB": {
    "userAgentSuffix": "MyUniqueIdentifier"
  }
}

注意

従量課金プランで関数アプリをホストしている場合は、各インスタンスで保持できるソケット接続の量に制限があります。 直接または TCP モードで操作している場合は、設計上、より多くの接続が作成されるため、従量課金プランの制限に達する可能性があります。この場合は、ゲートウェイ モードを使用するか、または代わりに Premium プランまたは専用 (App Service) プランのどちらかで関数アプリをホストできます。

次の手順