Fejl ved oprettelse af PerformanceCounter i Azure Emulator
Jeg vil gerne have oprettet nogle performancemålinger i mit Azure projekt og har i den forbindelse lagt kode ind i OnStart på RoleEntryPoint for min webrole.Jeg har indtil videre kun forsøgt at køre det i emulatoren, ikke i Azure.
Jeg har flg. kode til mit RoleEntryPoint (som i nogen grad er sakset fra et af de mange eksempler på, hvordan man aktiverer diagnostics ifm. Azure):
{
public override bool OnStart()
{
try
{
// For information on handling configuration changes
// see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.
DiagnosticMonitorConfiguration config = DiagnosticMonitor.GetDefaultInitialConfiguration();
bool logPerformance =
!String.IsNullOrEmpty(
RoleEnvironment
.GetConfigurationSettingValue("logPerformance"));
bool logTrace =
!String.IsNullOrEmpty(
RoleEnvironment
.GetConfigurationSettingValue("logTrace"));
bool logIIS =
!String.IsNullOrEmpty(
RoleEnvironment
.GetConfigurationSettingValue("logIIS"));
if (logPerformance)
{
var counters = new List<string>
{
@"\Memory\Available MBytes"
,@"\Processor(_Total)\% Processor Time"
,@"\ASP.NET Applications(__Total__)\Requests/Sec"
};
if (counters.Count() > 0)
{
config.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromMinutes(5);
config.PerformanceCounters.BufferQuotaInMB = 10;
counters.ForEach(counter =>
config.PerformanceCounters.DataSources.Add(
new PerformanceCounterConfiguration()
{
CounterSpecifier = counter,
SampleRate = TimeSpan.FromSeconds(10)
})
);
}
}
if (logTrace)
{
config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(2);
config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Warning;
config.Logs.BufferQuotaInMB = 10;
}
if (logIIS)
{
config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(5);
config.Directories.BufferQuotaInMB = 20;
}
// Apply the updated configuration to the diagnostic monitor.
// The first parameter is for the connection string configuration setting.
DiagnosticMonitor.Start(
"Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString",
config);
}
catch (Exception e)
{
Trace.TraceError("Exception during WebRole1.OnStart: " + e.ToString());
}
return base.OnStart();
}
}
Når jeg kører min emulator viser den nogle fejl, som ser nogenlunde således ud (for hver af de specificerede counters):
[MonAgentHost] Error: 2
[MonAgentHost] Error: 9028
[MonAgentHost] Error: 8168
[MonAgentHost] Error: SysCounterListener.dll
[MonAgentHost] Error: 0
[MonAgentHost] Error: b9eb57e3-62d5-49a5-b395-abc3bd5
[MonAgentHost] Error: liscounter.cpp
[MonAgentHost] Error: SystemCounter::AddCounter
[MonAgentHost] Error: 660
[MonAgentHost] Error: ffffffffc0000bb9
[MonAgentHost] Error: 0
[MonAgentHost] Error:
[MonAgentHost] Error: PdhAddCounter(\Processor(_Total)\% Processor Time) failed
Det interessante er, at IIS-loggen fungerer godt nok, men altså ikke performance-tællerne.
Jeg har tjekket om mine counters er enabled og det er de (med undtagelse af ASP.NET 2.0 x64, men da dette er en .NET 4.0 løsning antager jeg ikke, dette er relevant).
Jeg har desuden prøvet at oprette et console-projekt og teste nogle af disse performance-tællere, hvor det har fungeret uden problemer.
Spørgsmålet er derfor om nogen ved, hvad der kan være galt på min maskine?
Jeg er tilbøjelig til at tro det kan have noget med rettigheder at gøre, men jeg kører VS som administrator og dette bevirker, som jeg har forstået det, at compute- og storage-emulatorerne også kører med disse rettigheder (eller hvad?)...
Min platform er:
- Windows 7 Home Premium
- Visual Studio 2010 Pro SP1
- Azure SDK 1.7.1