Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以从CosmosDB监控Azure函数中的更改提要工作是否完美_C#_Azure_Azure Cosmosdb_Azure Cosmosdb Changefeed - Fatal编程技术网

C# 是否可以从CosmosDB监控Azure函数中的更改提要工作是否完美

C# 是否可以从CosmosDB监控Azure函数中的更改提要工作是否完美,c#,azure,azure-cosmosdb,azure-cosmosdb-changefeed,C#,Azure,Azure Cosmosdb,Azure Cosmosdb Changefeed,我有一个Azure函数,它将触发CosmosDB的变更提要,然后将其文档ETL到MS SQL。但是当服务器(CosmosDB或Azure功能主机)有压力时,提要会延迟几秒钟甚至几分钟。目前我有办法防止数据工厂丢失,并每天重新同步 现在,我想实施测量来监控,例如延迟时间、成功或失败,以指出并确定是否应该放大DTU,或者是服务于分析的东西。我无法查询所有Cosmos和SQL来比较它们,尽管这是通过简单的查询计数来检测丢失的最后一种方法 这可能吗?对于运行状况监视,您可以启用将运行状况监视检查发送到您

我有一个Azure函数,它将触发CosmosDB的变更提要,然后将其文档ETL到MS SQL。但是当服务器(CosmosDB或Azure功能主机)有压力时,提要会延迟几秒钟甚至几分钟。目前我有办法防止数据工厂丢失,并每天重新同步

现在,我想实施测量来监控,例如延迟时间、成功或失败,以指出并确定是否应该放大DTU,或者是服务于分析的东西。我无法查询所有Cosmos和SQL来比较它们,尽管这是通过简单的查询计数来检测丢失的最后一种方法


这可能吗?

对于运行状况监视,您可以启用将运行状况监视检查发送到您的App Insights:

通过以下方式启用日志记录:

{
  "version": "2.0",
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "Host.Triggers.CosmosDB": "Trace"
    }
  }
}
这将捕获在尝试执行检查点时触发器内部发生的任何关键错误(例如,租约集合已被删除)

关于更改延迟,最常见的原因如下:

请记住,在大多数情况下,在当前执行完成当前批处理后,将读取新的更改批。通常情况下,如果您遵循,并且函数很小,它们不会造成问题,但是如果您看到您的函数需要很长时间来处理更改(例如,不是线性的,它在1秒内处理10个事件,但在30秒内处理50个事件,这是您在应用程序中看到的每个函数执行的洞察指标),它可能指向函数代码中不希望出现的复杂性

还有一种方法可以将变更反馈估计器连接到另一个函数上,该函数基本上揭示了您在变更反馈方面的落后程度:

其思想是,您可以使用TimerTrigger并将其与当前触发器配置混合,以创建估计器并使用它(有关完整描述,请参阅帖子):


对于一个给出了downvote或closevote的人,虽然这不是一种常见的情况,也不是很清楚,因为它可能是由多个情感引起的,因此我想要的是能够通过CosmosDB和Azure功能的低级别接近有效地监控健康状况,以消除数据丢失的所有风险。非常感谢,我将很快为您了解您的技术和反馈。我已经部署了一个集合进行测试,它运行良好。另一个问题是,目前我有10个集合,我应该为所有人实现吗?每秒监听10个函数会使服务器更加滞后?更改提要是每个集合的,因此如果您有10个集合,则估计值是每个集合的。每隔几秒钟检查一次估计值不会增加多少总体使用量。请始终关注门户指标,并查看您是如何使用已配置的吞吐量的。
[FunctionName("Monitor")]
public static async Task Monitor(
    [TimerTrigger("*/1 * * * * *", RunOnStartup = true)] TimerInfo timer, // Timer will trigger every 1 second, adjust CRON expression
    [CosmosDB("%MonitoredDatabase%", "%MonitoredCollection%", ConnectionStringSetting = "CosmosDB")] DocumentClient monitoredCollectionClient, 
    [CosmosDB("%MonitoredDatabase%", "leases", ConnectionStringSetting = "CosmosDB")] DocumentClient leaseCollectionClient,
    ILogger log)
{
    var estimator = GetRemainingWorkEstimator(monitoredCollectionClient, leaseCollectionClient);
    var remainingWork = await estimator.GetEstimatedRemainingWork();
    // Send custom metric to App Insight
    log.LogInformation(remainingWork.ToString());
    log.LogMetric("RemainingWork", remainingWork);
}