Aspnetcore.docs: Update SignalR 2.x doc for Azure Diagnostics and Perf Counters

Created on 31 Jan 2017  路  14Comments  路  Source: dotnet/AspNetCore.Docs

Original: https://www.asp.net/signalr/overview/performance/using-signalr-performance-counters-in-an-azure-web-role

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.

Prerequisites

  • Change to Visual Studio 2015 and Azure SDK for Visual Studio 2015

Creating an Azure Web Role application that exposes SignalR performance counters

  1. Change to Visual Studio 2015

  2. Change to Visual Studio 2015

  3. Update Screenshot, but otherwise the same steps

  4. Unchanged

  5. Unchanged

  6. File is now diagnostics.wadcfgx (note the x in the extension). Screenshot will need to be updated.

  7. Replace content with Appendix A (diagnostics.wadcfgx content)

  8. Unchanged

  9. Unchanged

  10. Unchanged

  11. Unchanged

  12. Unchanged

  13. Unchanged

  14. Unchanged

  15. Unchanged

  16. Unchanged

  17. Unchanged

  18. Unchanged

  19. Unchanged

  20. Unchanged

  21. I don't see that template in VS 2015, just change the instructions to "... Right-click this folder, and select Add..., Class. ..."

  22. Unchanged

  23. Unchanged

  24. Unchanged

  25. Unchanged

  26. Remove this step

  27. Remove this step

  28. Unchanged

  29. 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

  30. Run the application locally using Ctrl-F5

  31. Wait about a minute

  32. 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

  33. Update ServiceConfiguration.Cloud.cscfg to set Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString to a connection string to a valid Azure Storage account.

  34. Deploy the app to the cloud, run it, and wait a few minutes.

  35. 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.

Appendix A: diagnostics.wadcfgx content

<?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>

Most helpful comment

Sure. I'll take it.

All 14 comments

@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.

capture

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.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

AnthonyMastrean picture AnthonyMastrean  路  3Comments

madelson picture madelson  路  3Comments

serpent5 picture serpent5  路  3Comments

YeyoCoder picture YeyoCoder  路  3Comments

sonichanxiao picture sonichanxiao  路  3Comments