对于运行状况监控,您可以将运行状况监控检查发送到您的 App Insights:https ://docs.microsoft.com/azure/cosmos-db/how-to-configure-cosmos-db-trigger-logs
通过以下方式启用日志记录:
{
"version": "2.0",
"logging": {
"fileLoggingMode": "always",
"logLevel": {
"Host.Triggers.CosmosDB": "Trace"
}
}
}
这将在尝试执行检查点时捕获触发器内部发生的任何严重错误(例如,已删除租约集合)。
至于延迟获取更改,最常见的原因在这里详述:https ://docs.microsoft.com/azure/cosmos-db/troubleshoot-changefeed-functions#my-changes-take-too-long-to-be -已收到
请记住,在大多数情况下,新批次的更改是在您当前执行完成处理当前批次后读取的。通常,如果您遵循Functions 最佳实践并且 Functions 很苗条,它们不会造成问题,但如果您发现您的 Function 需要很长时间来处理更改(不是线性的,例如,它在 1 秒内处理 10 个事件但在 30 秒内发生 50 个事件,这是您在 App Insights 中看到的每个函数执行的指标),它可能指向函数代码的不希望的复杂性。
还有一种方法可以将 Change Feed Estimator 连接到另一个 Function 上,它基本上暴露了您在 Change Feed 中落后多远:https ://medium.com/microsoftazure/azure-cosmos-db-functions-cookbook-monitoring-触发待处理工作 800b24589235
这个想法是您可以使用 TimerTrigger 并将其与当前的 Trigger 配置混合以创建 Estimator 并使用它(有关完整描述,请参阅帖子):
[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);
}