Meeting Performance Goals for Azure Deployments: Listing 2.

Adding performance counters.

public override bool OnStart()
        {
            bool collectCountersForLoad = default(bool);
            collectCountersForLoad = bool.Parse(RoleEnvironment.GetConfigurationSettingValue("LoadTesting"));
            List<string> countersToWatch = new List<string>();

            if (collectCountersForLoad)
            {
                TimeSpan sampleInterval = TimeSpan.FromSeconds(5);
                countersToWatch.Add(@"\Processor(_Total)\% Processor Time");
                countersToWatch.Add(@"\.NET CLR Memory(_Global_)\Gen 0 heap size");
                countersToWatch.Add(@"\.NET CLR Memory(_Global_)\Gen 1 heap size");
                countersToWatch.Add(@"\.NET CLR Memory(_Global_)\Gen 2 heap size");

            }

            // To enable the AzureLocalStorageTraceListner, uncomment relevent section in the web.config  
            DiagnosticMonitorConfiguration diagnosticConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();
            diagnosticConfig.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);
            diagnosticConfig.Directories.DataSources.Add(AzureLocalStorageTraceListener.GetLogDirectory());

            foreach(string counter in countersToWatch)
            {
                diagnosticConfig.PerformanceCounters.DataSources.Add(new PerformanceCounterConfiguration
                                                                        {   CounterSpecifier = counter,
                                                                            SampleRate = TimeSpan.FromSeconds(5)
                                                                        }
                                                                    );
            }

            DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", diagnosticConfig);
            // For information on handling configuration changes
            // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

            return base.OnStart();
        }

About the Author

Joseph Fultz is an architect at the Microsoft Technology Center in Dallas, where he works with both enterprise customers and ISVs designing and prototyping software solutions to meet business and market demands. He has spoken at events such as Tech•Ed and similar internal training events.