如何使用 Azure Cosmos DB 的 Azure Functions 触发器配置日志记录和连接

本文介绍使用 Azure Cosmos DB 的 Azure Functions 触发器时可以设置的高级配置选项。

启用特定于触发器的日志

Azure Cosmos DB 的 Azure Functions 触发器在内部使用 更改源提要处理器库,库生成一组运行状况日志,可用于监控内部操作,以便进行 故障排除

运行状况日志描述了在初始化、负载均衡和处理场景中尝试操作时 Azure Cosmos DB 的 Azure Functions 触发器的行为方式。

启用日志记录

若要在对 Azure Cosmos DB 使用 Azure Functions 触发器时启用日志记录,请在 Azure Functions 项目或 Azure Functions 应用中找到 host.json 该文件并 配置所需的日志记录级别。 在如下示例中启用Host.Triggers.CosmosDB的跟踪:

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

使用更新的配置部署 Azure Function 后,会看到 Azure Cosmos DB 日志的 Azure Functions 触发器作为跟踪的一部分。 您可以在您配置的日志记录提供程序中的类别Host.Triggers.CosmosDB下查看日志。

发出哪种类型的日志?

启用后,将发出四个级别的日志事件:

  • 错误:

    • 更改馈送处理出现未知或严重错误时,会影响触发器的正常功能。
  • 警告:

    • 当函数用户代码出现未经处理的异常时 - 函数代码中存在差距,并且函数无法 复原错误 或序列化错误(对于 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"

配置连接策略

有两种连接模式 - 直接模式和网关模式。 若要了解有关这些连接模式的详细信息,请参阅 连接模式 文章。 默认情况下, 网关 用于在 Azure Cosmos DB 的 Azure Functions 触发器上建立所有连接。 但是,对于性能驱动方案,它可能不是最佳选择。

更改连接模式和协议

有两个关键配置设置可用于配置客户端连接策略 - 连接模式连接协议。 可以更改 Azure Functions 触发器用于 Azure Cosmos DB 和所有 Azure Cosmos DB 绑定的默认连接模式和协议。 若要更改默认设置,需要在 Azure Functions 项目或 Azure Functions 应用中找到 host.json 该文件,并添加以下 额外设置

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

其中 connectionMode 必须具有所需的连接模式(直接或网关)和 protocol 所需的连接协议(用于直接模式的 Tcp 或网关模式的 Https)。

如果 Azure Functions 项目正在使用 Azure Functions V1 运行时,则配置名称略有差异,则应使用 documentDB ,而不是 cosmosDB

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

自定义用户代理

Azure Cosmos DB 的 Azure Functions 触发器会向服务发出请求,其结果将反映在 监视中。 可以通过更改userAgentSuffixhost.json额外设置来自定义用于来自 Azure Function 的请求的用户代理:

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

注释

在消耗计划中托管函数应用时,每个实例都有一个能维护的套接字连接数量限制。 使用直接/TCP 模式时,通过设计可以创建更多连接并达到 消耗计划限制,在这种情况下,可以使用网关模式,或改为在 高级计划专用(应用服务)计划中托管函数应用。

后续步骤