Azure辅助角色生成向跟踪日志存储写入意外错误

时间:2010-10-07 17:21:11

标签: azure azure-worker-roles

我们在云中运行了一个辅助角色,该角色轮询Azure CloudQueue,定期检索Web角色为我们提供的消息。目前,工作者角色和Web角色位于同一个Cloud Service应用程序中,目前我们只运行一个实例。

在我们测试时,我们已开启日志记录,因此消息内容和其他有用信息会显示在我们使用Cerebrata Azure诊断管理器查看的云存储中。 (伟大的产品顺便说一句)

DiagnosticMonitorConfiguration diagConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();

diagConfig.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;

实际上它看起来效果非常好,但偶尔我们会在跟踪日志中看到一条详细信息,其中只有“失败”作为消息。它似乎生成的代码包含在try catch中,所以我们没有通过这些方法看到消息,这很奇怪。

似乎正在发生的事情超出了我们代码的控制范围,可能是工作者角色正在重新启动,或者云操作系统正在检测一个重大错误,只有它可以通过重新启动我们的工作角色来处理。它会恢复并继续下去,所以对我们来说可能会发生一些谜。

我们尚未确定的是我们是否正在丢失信息。

任何帮助将不胜感激。 干杯 Kindo Malay

2 个答案:

答案 0 :(得分:0)

如果没有堆栈跟踪,很难说太多,但是如果日志记录设置为详细,那么您很可能会看到来自其中一个dll的内部日志记录。

例如,如果您运行导致某些类型错误的Azure表查询,则错误将被记录3次,因为存储客户端库正在捕获错误,将其追踪然后重试。

如果您的try catch块没有捕获到错误,那么您可能无需担心任何问题。

如果队列消息的可传递性对您很重要,则应确保使用CloudQueue.GetMessage的可见性超时过载,并仅在完成处理后删除该消息。您可能最终会处理两次消息,但至少您将处理所有消息。

答案 1 :(得分:0)

如果您的角色实例在运行一段时间后重新启动,通常是因为您的进程因未处理的异常而退出。