public override bool OnStart() { string wadConnectionString = "Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"; RoleInstanceDiagnosticManager roleInstanceDiagnosticManager = CloudAccountDiagnosticMonitorExtensions.CreateRoleInstanceDiagnosticManager(RoleEnvironment.GetConfigurationSettingValue(wadConnectionString), RoleEnvironment.DeploymentId, RoleEnvironment.CurrentRoleInstance.Role.Name, RoleEnvironment.CurrentRoleInstance.Id); DiagnosticMonitorConfiguration config = roleInstanceDiagnosticManager.GetCurrentConfiguration(); // should never be null, but this is a fallback in case it is. I recommend removing this in a production // deployment if (null == config) { config = DiagnosticMonitor.GetDefaultInitialConfiguration(); } config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(15); config.Logs.ScheduledTransferLogLevelFilter = Microsoft.WindowsAzure.Diagnostics.LogLevel.Undefined; config.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = Microsoft.WindowsAzure.Diagnostics.LogLevel.Warning; config.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = TimeSpan.FromMinutes(15); config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(15); roleInstanceDiagnosticManager.SetCurrentConfiguration(config); System.Diagnostics.Trace.TraceInformation("Diagnostics Running"); #region Setup CloudStorageAccount Configuration Setting Publisher // This code sets up a handler to update CloudStorageAccount instances when their corresponding // configuration settings change in the service configuration file. RoleEnvironment.Changed += (sender, arg) => { var key = CloudConfigurationManager.GetSetting(arg.Changes.OfType <RoleEnvironmentConfigurationSettingChange>().ToString()); if (arg.Changes.OfType <RoleEnvironmentConfigurationSettingChange>() .Any((change) => (change.ConfigurationSettingName == key.ToString()))) { // The corresponding configuration setting has changed, propagate the value RoleEnvironment.GetConfigurationSettingValue(key.ToString()); // { // In this case, the change to the storage account credentials in the // service configuration is significant enough that the role needs to be // recycled in order to use the latest settings. (for example, the // endpoint has changed) RoleEnvironment.RequestRecycle(); //} } }; //}); #endregion return(base.OnStart()); }
public void ConfigureAzureDiagnostics() { if (Enable) { var exists = Trace.Listeners.Cast <TraceListener>().Count(tracelistener => tracelistener.GetType().IsAssignableFrom(typeof(DiagnosticMonitorTraceListener))) > 0; if (!exists) { try { var listener = new DiagnosticMonitorTraceListener(); Trace.Listeners.Add(listener); } catch (SecurityException) { return; } } } else { var exists = Trace.Listeners.Cast <TraceListener>().Count(tracelistener => tracelistener.GetType().IsAssignableFrom(typeof(ConsoleTraceListener))) > 0; if (!exists) { Trace.Listeners.Add(new ConsoleTraceListener()); } } if (!RoleEnvironment.IsAvailable || !InitializeDiagnostics) { return; } var roleInstanceDiagnosticManager = CloudAccountDiagnosticMonitorExtensions.CreateRoleInstanceDiagnosticManager( GetConnectionString(), RoleEnvironment.DeploymentId, RoleEnvironment.CurrentRoleInstance.Role.Name, RoleEnvironment.CurrentRoleInstance.Id); var configuration = roleInstanceDiagnosticManager.GetCurrentConfiguration(); if (configuration == null) { configuration = DiagnosticMonitor.GetDefaultInitialConfiguration(); ConfigureDiagnostics(configuration); DiagnosticMonitor.Start(ConnectionStringKey, configuration); } }
/// <summary> /// Updates the performance counter configuration based on the current list in ServiceConfiguration.cscfg. /// </summary> private static void ConfigureDiagnostics() { try { CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse( WebRole.GetConfigurationSettingValue(WADConnectionString)); var roleInstanceDiagnosticManager = CloudAccountDiagnosticMonitorExtensions.CreateRoleInstanceDiagnosticManager( RoleEnvironment.GetConfigurationSettingValue(WADConnectionString), RoleEnvironment.DeploymentId, RoleEnvironment.CurrentRoleInstance.Role.Name, RoleEnvironment.CurrentRoleInstance.Id); var roleDiagnosticMonitorConfiguration = roleInstanceDiagnosticManager.GetCurrentConfiguration(); // Copy settings from configuration. double webRolePeriod; if (!double.TryParse(WebRole.GetConfigurationSettingValue(WebRolePeriodName), out webRolePeriod)) { Trace.WriteLine("WebRole environment diagnostics error: " + WebRolePeriodName + " parse failed."); // Set the default to one minute. webRolePeriod = 1d; } // Transfer diagnostic information once every webRolePeriod minutes. TimeSpan transferPeriod = TimeSpan.FromMinutes(webRolePeriod); roleDiagnosticMonitorConfiguration.PerformanceCounters.ScheduledTransferPeriod = transferPeriod; double webRoleSampleRate; if (!double.TryParse(WebRole.GetConfigurationSettingValue(WebRoleSampleRateName), out webRoleSampleRate)) { Trace.WriteLine("WebRole environment diagnostics error: " + WebRoleSampleRateName + " parse failed."); // Set the default to ten seconds. webRoleSampleRate = 10d; } // Remove original performance counters and add new set roleDiagnosticMonitorConfiguration.PerformanceCounters.DataSources.Clear(); string webRoleConfig = WebRole.GetConfigurationSettingValue(WebRoleConfigName); string[] separators = new string[] { ConfigSeparator }; string[] webRoleCounterSpecifiers = webRoleConfig.Split(separators, StringSplitOptions.RemoveEmptyEntries); foreach (string specifier in webRoleCounterSpecifiers) { roleDiagnosticMonitorConfiguration.PerformanceCounters.DataSources.Add( new PerformanceCounterConfiguration() { CounterSpecifier = specifier, SampleRate = TimeSpan.FromSeconds(webRoleSampleRate) }); Trace.WriteLine("WebRole performance counter added: " + specifier); } roleInstanceDiagnosticManager.SetCurrentConfiguration(roleDiagnosticMonitorConfiguration); } catch (RoleEnvironmentException rex) { // The connection string was missing. Trace.WriteLine("WebRole environment diagnostics error: " + rex.Message); } catch (InvalidOperationException iox) { // Parse of the connection string failed. Trace.WriteLine("WebRole environment diagnostics error: " + iox.Message); } }