诊断数据需要很长时间才能记录在 Windows Azure 中
我编写了一小段代码,通过单击不同的按钮,将收集不同类型的日志记录数据。但是,当我运行这段代码时,通过服务器资源管理器检查时通常不会反映记录的数据,即使记录了这些数据,也可以在很长一段时间(15-20 分钟)后查看。我在编写这段代码时是否犯了任何错误。该段代码如下:
DiagnosticMonitorConfiguration diagMonitorConfiguration;
RoleInstanceDiagnosticManager roleInstanceDiagnosticManager;
protected void Page_Load(object sender, EventArgs e)
{
// Get the default initial configuration for DiagnosticMonitor.
diagMonitorConfiguration = DiagnosticMonitor.GetDefaultInitialConfiguration();
// Configures the transfer period for basic windows azure logs
diagMonitorConfiguration.Logs.ScheduledTransferPeriod = TimeSpan.FromSeconds(10);
// Configures the log type to be Verbose
diagMonitorConfiguration.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
// Start the diagnostics monitor
//DiagnosticMonitor.Start(CloudStorageAccount.DevelopmentStorageAccount, diagConfig);
//CloudStorageAccount storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"));
CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
roleInstanceDiagnosticManager = storageAccount.CreateRoleInstanceDiagnosticManager(RoleEnvironment.DeploymentId, RoleEnvironment.CurrentRoleInstance.Role.Name, RoleEnvironment.CurrentRoleInstance.Id);
//DiagnosticMonitorTraceListener tmpListener = new DiagnosticMonitorTraceListener();
//System.Diagnostics.Trace.Listeners.Add(tmpListener);
}
// Used to trace custom warning messages
protected void btnWarning_Click(object sender, EventArgs e)
{
// tracing user message as a warning
System.Diagnostics.Trace.TraceWarning("WARNING ENCOUNTERED :" + TextBoxName.Text);
}
// tracing custom error messages
protected void btnError_Click(object sender, EventArgs e)
{
// To log the user message as an error
.......TraceError("ERROR ENCOUNTERED :" + TextBoxName.Text);
}
// tracing custom information messages
protected void btnInformation_Click(object sender, EventArgs e)
{
// To log the user message as mere information
.........TraceInformation("INFORMATION SENT :" + TextBoxName.Text);
}
// used to enable diagnostic infrastructure logs to be collected
protected void btnEnableInfrastructure_Click(object sender, EventArgs e)
{
// configuring the type and transfer period for the Infrastructure logs
diagMonitorConfiguration.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = some filter;
diagMonitorConfiguration.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = SOME TIME PERIOD
// Update the configuration setting for the diagnostic manager
roleInstanceDiagnosticManager.SetCurrentConfiguration(diagConfig);
Thread.Sleep(5000);
}
// used to enable crash dumps for the application
protected void btnEnableCrashDumps_Click(object sender, EventArgs e)
{
//enabling crash dumps
CrashDumps.EnableCollection(true);
// Update the configuration setting for the diagnostic manager
roleInstanceDiagnosticManager.SetCurrentConfiguration(diagConfig);
Thread.Sleep(5000);
}
// used to enable the collection windows event logs
protected void btnEnableEventLogs_Click(object sender, EventArgs e)
{
//Configuring the Windows Event logs
diagMonitorConfiguration.WindowsEventLog.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
// two types of events, application and system data are logged
diagMonitorConfiguration.WindowsEventLog.DataSources.Add("some source");
// the time interval is configured as 5 seconds
diagMonitorConfiguration.WindowsEventLog.ScheduledTransferPeriod = some time period;
// Update the configuration setting for the diagnostic manager
roleInstanceDiagnosticManager.SetCurrentConfiguration(diagConfig);
Thread.Sleep(5000);
}
protected void btnEnablePerfCounters_Click(object sender, EventArgs e)
{
// configuring the performance counter data to be collected. processor time is collected
diagMonitorConfiguration.PerformanceCounters.DataSources.Add(new PerformanceCounterConfiguration()
{
THE REQD PARAMETERS
});
// similarly available memory data is also logged
diagMonitorConfiguration.PerformanceCounters.DataSources.Add(new PerformanceCounterConfiguration()
{
THE REQD PARAMETERS
});
// the scheduled time transfer is configured to 5seconds
diagMonitorConfiguration.PerformanceCounters.ScheduledTransferPeriod = some time period;
//DiagnosticMonitor.Start(CloudStorageAccount.DevelopmentStorageAccount, diagConfig); USED PREVIOUSLY
// Update the configuration setting for the diagnostic manager
roleInstanceDiagnosticManager.SetCurrentConfiguration(diagConfig);
Thread.Sleep(5000);
}
}
I've written a small piece of code whereby on different button click different types of logging data would be collected. However, when i run the piece of code, usualy the logged data is not reflected when checked through the server explorer and even if they are logged, they can be viewed after a long period of time(15-20 mins). Is there any mistake that i've commited while writing this piece of code. The piece of code is given below::
DiagnosticMonitorConfiguration diagMonitorConfiguration;
RoleInstanceDiagnosticManager roleInstanceDiagnosticManager;
protected void Page_Load(object sender, EventArgs e)
{
// Get the default initial configuration for DiagnosticMonitor.
diagMonitorConfiguration = DiagnosticMonitor.GetDefaultInitialConfiguration();
// Configures the transfer period for basic windows azure logs
diagMonitorConfiguration.Logs.ScheduledTransferPeriod = TimeSpan.FromSeconds(10);
// Configures the log type to be Verbose
diagMonitorConfiguration.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
// Start the diagnostics monitor
//DiagnosticMonitor.Start(CloudStorageAccount.DevelopmentStorageAccount, diagConfig);
//CloudStorageAccount storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"));
CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
roleInstanceDiagnosticManager = storageAccount.CreateRoleInstanceDiagnosticManager(RoleEnvironment.DeploymentId, RoleEnvironment.CurrentRoleInstance.Role.Name, RoleEnvironment.CurrentRoleInstance.Id);
//DiagnosticMonitorTraceListener tmpListener = new DiagnosticMonitorTraceListener();
//System.Diagnostics.Trace.Listeners.Add(tmpListener);
}
// Used to trace custom warning messages
protected void btnWarning_Click(object sender, EventArgs e)
{
// tracing user message as a warning
System.Diagnostics.Trace.TraceWarning("WARNING ENCOUNTERED :" + TextBoxName.Text);
}
// tracing custom error messages
protected void btnError_Click(object sender, EventArgs e)
{
// To log the user message as an error
.......TraceError("ERROR ENCOUNTERED :" + TextBoxName.Text);
}
// tracing custom information messages
protected void btnInformation_Click(object sender, EventArgs e)
{
// To log the user message as mere information
.........TraceInformation("INFORMATION SENT :" + TextBoxName.Text);
}
// used to enable diagnostic infrastructure logs to be collected
protected void btnEnableInfrastructure_Click(object sender, EventArgs e)
{
// configuring the type and transfer period for the Infrastructure logs
diagMonitorConfiguration.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = some filter;
diagMonitorConfiguration.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = SOME TIME PERIOD
// Update the configuration setting for the diagnostic manager
roleInstanceDiagnosticManager.SetCurrentConfiguration(diagConfig);
Thread.Sleep(5000);
}
// used to enable crash dumps for the application
protected void btnEnableCrashDumps_Click(object sender, EventArgs e)
{
//enabling crash dumps
CrashDumps.EnableCollection(true);
// Update the configuration setting for the diagnostic manager
roleInstanceDiagnosticManager.SetCurrentConfiguration(diagConfig);
Thread.Sleep(5000);
}
// used to enable the collection windows event logs
protected void btnEnableEventLogs_Click(object sender, EventArgs e)
{
//Configuring the Windows Event logs
diagMonitorConfiguration.WindowsEventLog.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
// two types of events, application and system data are logged
diagMonitorConfiguration.WindowsEventLog.DataSources.Add("some source");
// the time interval is configured as 5 seconds
diagMonitorConfiguration.WindowsEventLog.ScheduledTransferPeriod = some time period;
// Update the configuration setting for the diagnostic manager
roleInstanceDiagnosticManager.SetCurrentConfiguration(diagConfig);
Thread.Sleep(5000);
}
protected void btnEnablePerfCounters_Click(object sender, EventArgs e)
{
// configuring the performance counter data to be collected. processor time is collected
diagMonitorConfiguration.PerformanceCounters.DataSources.Add(new PerformanceCounterConfiguration()
{
THE REQD PARAMETERS
});
// similarly available memory data is also logged
diagMonitorConfiguration.PerformanceCounters.DataSources.Add(new PerformanceCounterConfiguration()
{
THE REQD PARAMETERS
});
// the scheduled time transfer is configured to 5seconds
diagMonitorConfiguration.PerformanceCounters.ScheduledTransferPeriod = some time period;
//DiagnosticMonitor.Start(CloudStorageAccount.DevelopmentStorageAccount, diagConfig); USED PREVIOUSLY
// Update the configuration setting for the diagnostic manager
roleInstanceDiagnosticManager.SetCurrentConfiguration(diagConfig);
Thread.Sleep(5000);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
IIRC,1 分钟似乎是最短的传输时间。完全不确定如果将其设置为较小的值会发生什么。您可以检查生成的控制文件(在 wad-control 容器中)并查看实际设置的传输速率。请记住,这是一个异步过程(记录、本地缓冲,然后传输)。如果您想要实时的东西,您需要调整跟踪侦听器以直接记录到表或 blob(或使用服务总线跟踪)。 查看调试培训工具包了解如何完成此操作。
IIRC, 1 min seems to be the minimum transfer time. Not sure entirely what happens if you set it to something smaller. You can check the resulting control file (in the wad-control container) and see what the transfer rate is actually set to. Keep in mind this is an async process (log, buffer locally, then transfer). If you want something realtime you need to adapt the tracelistener to log directly to table or blobs (or use Service Bus tracing). Check the training kit on debugging for how this can be done.
根据 文档:
As per the docs:
不能肯定地说,但您多次调用
SetCurrentConfiguration()
。上次我检查过,你只能调用一次。我不知道多次调用它会看到什么观察到的行为。我真的建议将所有诊断配置代码聚合到一个位置,也许在 global.asax 中,而不是分散在多个按钮处理程序中。Can't say for sure, but you have multiple calls to
SetCurrentConfiguration()
. Last time I checked, you could only call this once. I have no idea what observed behavior you'll see by calling it multiple times. I'd really suggest aggregating all your diagnostics configuration code into one place, maybe in global.asax, and not scattered across several button handlers.