当Azure辅助角色停止时(由于未处理的异常或因为Run()结束),尚未传输的本地诊断信息会发生什么? Microsoft documentation表示诊断按计划的时间间隔或按需传输到存储,这两种情况都不能涵盖未处理的异常。这是否意味着在这种情况下诊断信息总是丢失?这似乎特别奇怪,因为崩溃转储是诊断数据的一部分(默认情况下在DiagnosticMonitorConfiguration.Directories中设置)。那么你怎么能得到一个崩溃转储(与this question相关)?
对我而言,如果在角色终止时也会传输诊断,那将是合乎逻辑的,但这不是我的经验。
答案 0 :(得分:1)
这取决于“角色停止”的含义。 SDK 1.3及更高版本中的Diagnostic Monitor实现为后台任务,不依赖于RoleEntryPoint。因此,如果您的意思是您的RoleEntryPoint报告自身不健康或类似情况,那么您的DiagnosticMonitor(DM)仍然会响应,并将根据您设置的配置发送数据。
但是,如果您的意思是角色停止是缩小操作(关闭VM),那么不,磁盘上没有数据刷新。此时,VM将关闭,DM将关闭。任何尚未刷新(转移)的东西都可以被视为丢失。
如果您只是重新启动VM,那么理论上您将连接回保存缓冲诊断数据的相同资源VHD,这样您就不会丢失它,它将在下一个请求时传输。我很确定它上面启用了粘性存储,所以在重启时不会清除它。
HTH。
答案 1 :(得分:0)
诊断数据在传输到存储之前存储在本地。这样您就可以获得这些信息;您可以使用RDP查看/验证这一点。
老实说,在角色停止后,我没有测试过它是否会被转移。但是,您可以按要求转移。因此,使用该方法,您可以请求在角色停止后再次传输日志/转储。
我建议您查看Cerebrata Azure Diagnostics Manager之类的工具,以请求按日传输日志,并分析数据。
我也回答了你的其他问题。我的部分答案是添加允许您动态更改日志记录和传输设置的事件。
希望这有帮助
答案 2 :(得分:0)
我认为它的工作方式如下:本地诊断数据存储在名为“DiagnosticStore”的本地存储中,我猜测cleanOnRoleRecycle设置为false。 (我不知道如何验证最后一点 - LocalResource没有相应的属性。)当角色被回收时,数据仍然存在并最终由新的诊断监视器上传(假设角色不会在之前崩溃)它可以完成)。