开发者

diagnostic data taking a long time to be logged in windows azure

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
        diagMonitorC开发者_如何学JAVAonfiguration.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);
    }
}


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:

The ScheduledTransferPeriod property is used to set how frequently a data buffer will transfer local logging data to persistent storage. By default, this property is not set for any data buffer to prevent unintentional storage costs.

The value you set for this property will be rounded up to the nearest minute. Therefore, the minimum transfer period you can specify is 1 minute.


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜