You could take a look at building something on top of StatsD:
https://github.com/etsy/statsd/
There's a .NET package for that can be found here:
https://github.com/robbihun/NStatsD.Client
It's lightweight as it's basically just firing off an UDP packet to a remote server. That remote server then aggregates it and stores it in Graphite which is good at taking this data and turning it into graphs and it manages things like data retention for you. For analysis, Graphite also allows you to output the data as JSON (which basically turns your metrics into an array of doubles) and has many functions and filters you can apply to recorded metrics which you could then feed into your other systems.
See here for some examples of what is possible with Graphite:
http://matt.aimonetti.net/posts/2013/06/26/practical-guide-to-graphite-monitoring
It doesn't meet all your requirements however, such as being able to record data about the client like computer names. But you can probably reach that goal by using namespacing in your metric names; so you would record your metric with a key like "client567.orders.loadtime" and "client567" would be an entry in some other database that stores that client567 uses IE11 on Windows 7, for example.
So it's not a complete out-of-the-box solution, but it forms a nice basis I think.
Another option is to use a commercial platform such as NewRelic:
http://newrelic.com/
It comes with performance monitoring for a lot of technologies (from ASP.NET to SQL Server to Solr). It does however require an agent process (a service on Windows) running in the background that handles the monitoring for you, which might or might not be an option for you. It's more or less meant for webservers and would probably not be very suitable to monitor a client-side WPF application.