我正在尝试在Azure WebRole上捕获以下PerformanceCounters:
private string[] perfCounters = { @"\Processor(_Total)\% Processor Time",
@"\ASP.NET Applications(__Total__)\Requests/Sec",
@"\Memory\Available Bytes",
@"\ASP.NET\Request Execution Time",
@"\ASP.NET\Requests Queued"};
我在我的WebRole.cs中有以下代码来启用这些perf计数器的捕获:
DiagnosticMonitorConfiguration config = DiagnosticMonitor.GetDefaultInitialConfiguration();
int loggingInterval = Int32.Parse(RoleEnvironment.GetConfigurationSettingValue("loggingInterval"));
config.Logs.ScheduledTransferPeriod = System.TimeSpan.FromMinutes(loggingInterval);
foreach (String s in perCounters)
{
PerformanceCounterConfiguration procTimeConfig = new PerformanceCounterConfiguration();
procTimeConfig.CounterSpecifier = s;
procTimeConfig.SampleRate = System.TimeSpan.FromMinutes(1.0);
config.PerformanceCounters.DataSources.Add(procTimeConfig);
}
config.PerformanceCounters.ScheduledTransferPeriod = System.TimeSpan.FromMinutes(1.0);
DiagnosticMonitor.Start("DiagnosticsConnectionString", config);
如您所见,我将perf计数器的预定xfer周期设置为1分钟。
现在,我可以在我的开发结构的WADPerformanceCounters表中获取这些计数器,但是我无法将它们放在天蓝云上?谁能指出我在这里可能做错了什么?
卡皮尔西
答案 0 :(得分:1)
据说这个问题不在我看的地方。对此的修复非常简单,我删除了预先存在的部署并将我的cspkg文件作为新部署上传。似乎根据wad-control-container blob下的xml文件拾取了th个计数器。此xml文件是为每个部署而生成的。我意识到xml文件在我的情况下没有得到更新,当我删除部署并创建了一个新的部署时,它正在取得新的价值。
由于 卡皮尔
答案 1 :(得分:1)
只有在执行完整部署而非更新时,才会更新对诊断设置的任何更改。 要执行完整部署,请转到“发布配置文件”,“设置”和“高级设置”,然后取消选中“部署更新”复选框。发布时,它将是一个完整的部署。
此外,可以在不执行部署的情况下更新设置。 在Server Explorer中,转到Windows Azure =>云服务=> =>生产=>您的工作者角色并右键单击它,单击“更新诊断设置”。这将获取实际部署的当前诊断设置,您可以在此处更新它们而无需执行任何部署。 当然,如果你想验证你的代码实际上是以正确的方式设置它,那么你将需要进行如上所述的完整部署,这将完成代码然后验证。
答案 2 :(得分:0)
由于您在Dev Fabric中获得了计数器但在Azure Fabric中没有,所以让我明白一点:您是否更改了DiagnosticsConnectionString设置以引用Azure存储连接字符串?