The original doc uses deprecated APIs in the Windows Azure SDK. The new SDK strongly encourages the use of the declarative "wadcfgx" XML configuration file. SignalR counters can be used in that file, but because the instance name is not easily predicted, we use the specifier \SignalR(*)\... to capture data for all instances of each of the SignalR counters, since the Azure Cloud Service should only have one SignalR app running per instance anyway.
This lists the changes to the docs, it is not a full replacement for the original doc.
Change to Visual Studio 2015
Change to Visual Studio 2015
Update Screenshot, but otherwise the same steps
Unchanged
Unchanged
File is now diagnostics.wadcfgx (note the x in the extension). Screenshot will need to be updated.
Replace content with Appendix A (diagnostics.wadcfgx content)
Unchanged
Unchanged
Unchanged
Unchanged
Unchanged
Unchanged
Unchanged
Unchanged
Unchanged
Unchanged
Unchanged
Unchanged
Unchanged
I don't see that template in VS 2015, just change the instructions to "... Right-click this folder, and select Add..., Class. ..."
Unchanged
Unchanged
Unchanged
Unchanged
Remove this step
Remove this step
Unchanged
The remaining steps all describe viewing the performance counters locally, but the whole point of configuring Windows Azure Diagnostics is to allow you to collect the diagnostics remotely. We should change this section to include a description of how to access the counter data when running locally and in Azure. See the remaining steps for instructions
Run the application locally using Ctrl-F5
Wait about a minute
Open the "Cloud Explorer" tool window in VS and expand the following path (Local)\Storage Accounts\(Development)\Tables. Double-click WADPerformanceCountersTable. You should see SignalR counters in the table data
Update ServiceConfiguration.Cloud.cscfg to set Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString to a connection string to a valid Azure Storage account.
Deploy the app to the cloud, run it, and wait a few minutes.
In "Cloud Explorer" locate the storage account you configured in step 33 and find the WADPerformanceCountersTable table in it. You should see SignalR counters in the table data.
<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
<PublicConfig>
<WadCfg>
<DiagnosticMonitorConfiguration overallQuotaInMB="4096">
<DiagnosticInfrastructureLogs scheduledTransferLogLevelFilter="Error"/>
<Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Error" />
<Directories scheduledTransferPeriod="PT1M">
<IISLogs containerName ="wad-iis-logfiles" />
<FailedRequestLogs containerName ="wad-failedrequestlogs" />
</Directories>
<WindowsEventLog scheduledTransferPeriod="PT1M" >
<DataSource name="Application!*[System[(Level=1 or Level=2 or Level=3)]]" />
<DataSource name="Windows Azure!*[System[(Level=1 or Level=2 or Level=3 or Level=4)]]" />
</WindowsEventLog>
<CrashDumps containerName="wad-crashdumps" dumpType="Mini">
<CrashDumpConfiguration processName="WaIISHost.exe"/>
<CrashDumpConfiguration processName="WaWorkerHost.exe"/>
<CrashDumpConfiguration processName="w3wp.exe"/>
</CrashDumps>
<PerformanceCounters scheduledTransferPeriod="PT1M">
<PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\ISAPI Extension Requests/sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\Bytes Total/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Requests/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Errors Total/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Queued" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Rejected" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\.NET CLR Memory(w3wp)\% Time in GC" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\.NET CLR Exceptions(w3wp)\# of Exceps Thrown / sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\.NET CLR LocksAndThreads(w3wp)\# of current logical Threads" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\.NET CLR LocksAndThreads(w3wp)\# of current physical Threads" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\.NET CLR LocksAndThreads(w3wp)\Current Queue Length" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\.NET CLR LocksAndThreads(w3wp)\Contention Rate / sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\.NET CLR Memory(w3wp)\# Bytes in all Heaps" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\.NET CLR Memory(w3wp)\# GC Handles" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\.NET CLR Memory(w3wp)\# of Pinned Objects" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connections Connected" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connections Reconnected" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connections Disconnected" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connections Current" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connection Messages Received Total" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connection Messages Sent Total" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connection Messages Received/Sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connection Messages Sent/Sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Messages Received Total" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Messages Received/Sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Message Bus Messages Received/Sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Messages Published Total" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Messages Published/Sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Subscribers Current" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Subscribers Total" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Subscribers/Sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Allocated Workers" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Busy Workers" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Topics Current" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: All Total" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: All/Sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: Hub Resolution Total" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: Hub Resolution/Sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: Hub Invocation Total" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: Hub Invocation/Sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: Tranport Total" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: Transport/Sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Streams Total" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Streams Open" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Streams Buffering" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Errors Total" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Errors/Sec" sampleRate="PT10S" />
<PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Send Queue Length" sampleRate="PT10S" />
</PerformanceCounters>
</DiagnosticMonitorConfiguration>
</WadCfg>
<StorageAccount></StorageAccount>
</PublicConfig>
<PrivateConfig>
<StorageAccount name="" key="" endpoint="" />
</PrivateConfig>
<IsEnabled>true</IsEnabled>
</DiagnosticsConfiguration>
@danroth27 please set milestone and owner
@GuardRex is this something you'd be interested in working on? It's classic ASP.NET and the repro should be ready by 2/6/2017 cc @tdykstra
Sure. I'll take it.
Feel free to let me know if you need any help with it. It should mostly be clear from the outline, but it can be just a little tricky.
Thanks ... the outline content looks good. Sure, I'll ping u here if I get stuck.
"The repro should be ready by..." ... means that a doc stub (and/or sample) is forthcoming? If not, where is this doc? ... which repo, as I don't see it in the aspnet/Docs repo.
I believe it's referring to a repository being created to hold the original asp.net articles content.
Ah ... yes ... thought so. Thanks. I'll get right on this ~when the repo appears~ after the merge occurs.
You can see it now in the aspnetmigration branch, under aspnet folder, it'll be in master in a few days.
and the ASP.NET stuff is being merged into this docs repo. No plans to create a separate repo.
@tdykstra Would you like keywords and uid added to the metadata?
If so, what uid do you want? If you want them the same way as they're configured in aspnetcore, the uid will be ...
uid: signalr/overview/performance/using-signalr-performance-counters-in-an-azure-web-role
I ask about uid and xref generally in https://github.com/aspnet/Docs/issues/2660, because this approach seems unusual (i.e., path-based id's break xref links when a doc moves and the uid must be updated AFAICT).
Nevermind! I fixed it ..... I misspelled "default" in my command.
It broke anyway. Let me know if you think I'm doing something incorrectly.
[EDIT] Build from the aspnet folder, correct? (DocFX: v2.11.2)
PATH\GitHub\Docs\aspnet>docfx -t default --serve
We're aware of the local build issue in the aspnet folder and are investigating. no ETA yet.
Would you like keywords and uid added to the metadata?
Keywords and description yes, UID no -- none of the new aspnet content has it, so we'll have to do an automated update of all of them; it's not worth trying to do that piecemeal.
Most helpful comment
Sure. I'll take it.