诊断数据需要很长时间才能记录在windows azure中

时间:2011-08-05 12:31:23

标签: azure azure-diagnostics

我写了一小段代码,通过不同的按钮点击,可以收集不同类型的日志数据。但是,当我运行这段代码时,通常在通过服务器资源管理器检查时不会反映记录的数据,即使记录它们,也可以在很长一段时间后(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);
    }
}

3 个答案:

答案 0 :(得分:2)

IIRC,1分钟似乎是最短的转移时间。不确定如果将它设置为更小的东西会发生什么。您可以检查生成的控制文件(在wad-control容器中),并查看实际设置的传输速率。请记住,这是一个异步过程(日志,缓冲本地,然后传输)。如果你想要实时的东西,你需要调整tracelistener直接记录到表或blob(或使用Service Bus跟踪)。 Check the training kit on debugging了解如何做到这一点。

答案 1 :(得分:1)

根据docs

  

ScheduledTransferPeriod属性用于设置a的频率   数据缓冲区将本地日志记录数据传输到持久存储。通过   默认情况下,此属性未设置为任何数据缓冲区以防止   无意的存储成本。

     

您为此属性设置的值将向上舍入到最近   分钟。因此,您可以指定的最小传输时间为1   分钟。

答案 2 :(得分:0)

无法肯定地说,但您有多次拨打SetCurrentConfiguration()。我上次检查时,你只能拨打一次。我不知道通过多次调用它会看到什么观察到的行为。我真的建议将所有诊断配置代码聚合到一个地方,可能在global.asax中,而不是分散在几个按钮处理程序中。