Any tools to monitor IIS and application performance - web-services

I have a web-service application that exposes lot of web-methods ( internally calling internal APIs or external web-services). I would like to have a tool to monitor this whole application running under IIS. To be clear I just don't want to inspect the requests that are failing, I also would like to see things like how long different calls are taking . I guess it has to be something like SQL Profiler tool
where you can look at all types of queries ( those that run successfully and those that fail too) and then apply all sorts of filter in focusing on the areas that interests you more.
Is there anything built in IIS that could be used for this purpose?

What you are looking for is a runtime profiler for the CLR. The answer is ETW tracing. The tool that can help is PerfMonitor.
IIS 7 has failed request tracing which can help in diagnosing the cause for the
failure.
Also IIS logs have lot of information on request, response,duration and few more
which can be helpful in getting metrics. I usually use Log Parser for getting
metrics from IIS logs
And if you are in IIS7+ then you could use built-in ETW tracing for webservices.
Here is the ETW provider for webservice
e04fe2e0-c6cf-4273-b59d-5c97c9c374a4: Microsoft-Windows-WebServices Microsoft-Windows-WebServices

For any application running under ASP.NET, you can use perfmon to look at different performance numbers.
If you're using ASP.NET 4, there are even better tools available to you
Also if your web services are WCF based, it gets even better Not only do you have very rich tracing, there's also a gui that displays the logs very nicely.

You can try get official IIS Extensions with the Microsoft Web Platform Installer called Web Performance Monitor

Microsoft sells System Center Operation Manager, which has been used by many big firms. But that's too expensive if you cannot afford it.
Web Performance Monitor of course worth a try, and Perfmon is already an option.

Related

Is there an easy way to supply data to Application Insights from normal win32 C++ code?

I'd like to know if there's something like a dll or lib (with headers, and possibly documentation) that can be linked into a normal* win32 C++ solution so it can (by function call) notify Application Insights of page views and send metric values.
This seems like it should exist and be simple to find, but I'm just going round in circles on Google, finding documentation for reading values back out via a web API, or using C#, or projects that other people tried in the past but now have no source available.
This is for updating a diagnostic tool which I'm trying to avoid having to completely re-architect because the logging now needs to go to a slightly different service.
*ie. not Winforms, C++/CX, Xamarin or UWP. Straight, command-line c++.
Currently there is no Application Insights client library for native applications (c/c++). Though it's in backlog I don't think it will be prioritized higher than java/node.js. So, I would not rely on its release anytime soon.
Customers who wanted to send telemetry from native applications usually picked one of the following options:
Using REST API directly. If application is going to use only couple of telemetry documents then it should be straightforward. With the most complexity coming from own requirements such as persistent channel.
Host CLR + use .NET Application Insights SDK
Have .NET service running on a box and implement communication channel between native app and this service.
Depending on environment (for instance, #2 makes sense if app already hosts .NET; #3 makes sense if there is already installed .NET service in addition to native app) you can check whether on of these options will work for you.

Monitoring AJAX heavy Web Application using Nagios

We have a (AJAX heavy) web application hosted in cloud across servers and we need to monitor the availability of this service. Requires logging in to the application with a username-password, perform some searches as that user etc.
Since we plan to use Nagios for some other monitoring tasks, we decided to use Nagios for web application monitoring too.
I came across three such solutions:
Webinject: I don't feel like using this. Project not under active development. It was last released in Jan 2006. I can't see any support/help available. Also I suspect how will it behave with Ajax.
Cucumber-Nagios:
I tried using this. It involves many Ruby components and found that you have to have in-depth knowledge of Ruby platform to make all these components work together. I am not a Ruby guy and having tough time making all these components work together. Also even this project is not under active development and I don't see support/help options available. I posted a bug 4 days back and don't see any response yet.
Selenium plugin for Nagios: Haven't tried it yet. Will try now.
Any more solutions available?
Also, since I don't see any good actively developed solutions for monitoring web applications using Nagios, I suspect if it's really a good approach to use Nagios for this? If not, what alternatives do I have? In short what is the best approach to monitor web applications availability?
Edit 1: We can't afford the Nagios XI paid version and will prefer open source solutions.
If not, what alternatives do I have?
Although Nagios was one of options that we've considered, we've chosen OpenNMS for monitoring purposes. Rationale for our decision is that OpenNMS is highly reliable and configurable free open-source tool and additionally, most of our applications are Java-based; OpenNMS offers integration with JMX. However, bear in mind that if you're demanding very complex tests for your Web site maybe it's better to look elsewhere. OpenNMS can be set to check for HTTP status codes etc., but if you're looking for complex scenarios take a look at:
Apache JMeter (we're using it mainly during the testing phase)
Selenium (can be well used even in production phase)

AVIcode versus AppFabric

I just learned today about the System Center AVIcode product, which is a .net application monitoring tool. I don't know much about it and I was wondering how it would compare to AppFabric. The latter also has monitoring features as well as other useful features. How much do these two product overlap and for which scenario is each one better suited?
Thanks for any insights!
AVIcode (now simply called "APM" feature in System Center 2012 - Operations Manager) and AppDynamics are monitoring products playing in the same space/market.
They both provide visibility into code-level performance issues with your application. If you are interested in AVIcode technology you can watch my talk at TechEd 2012 to see APM in Operations Manager in action http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/MGT302
AppFabric provides hosting and activation services, so it is orthogonal to the above - while it provides some "infrastructure" monitoring capability (i.e. the host running your code being up or down) it doesn't go to the code level showing "what was slow" or "what threw exceptions" in your code.
App Sight is applicable only to .NET framework 4.0 in terms on monitoring WCF transactions and Workflows. It's integrated into IIS Mgr thru extensions.
AVICode monitors a more broader range of .NET frameworks and protocols and is available as standalone or through integration with SCOM.
So the overlap would be the visibility they both provide for apps that leverage WCF and Workflows.
If you're interested in .NET application monitoring you might want to checkout http://www.appdynamics.com/. We're currently in the middle of our .NET beta program and have had a great response so far from users. I can sign you up for a no hassle free trial if you want to have a play and see what visibility we can provide . Drop me a line at appman#appdynamics.com if your keen.

How do you monitor your web services?

Is there any tools that can be used to monitor SOAP, REST services for basic as well as service uptime etc.,
I keep track of my systems with nagios. Basically I scripted some queries to
the relevant services so that I get warnings if they don't respond properly / in reasonable time.
In a development environment I use either the TcpMonitor that came with Apache Axis or WireShark which is less invasive in the sense that you don't have to change port numbers or hostnames in your configuration.
Also, for services implemented via Java servlets, I have a filter that I can put in front of the service which logs the payload of each request and response.
I've seen Nagios used successfully in the past.
If you want only to monitor my suggestion is nagios (just see the other answers)
But if you want a tool to display performance data on graphs, a good one is Cacti, it uses RRDTool and can help you generating graphs.
It keeps a historical graphing data.

Identifying ASP.NET web service references

At my day job we have load balanced web servers which talk to load balanced app servers via web services (and lately WCF). At any given time, we have 4-6 different teams that have the ability to add new web sites or services or consume existing services. We probably have about 20-30 different web applications and corresponding services.
Unfortunately, given that we have no centralized control over this due to competing priorities, org structures, project timelines, financial buckets, etc., it is quite a mess. We have a variety of services that are reused, but a bunch that are specific to a front-end.
Ideally we would have better control over this situation, and we are trying to get control over it, but that is taking a while. One thing we would like to do is find out more about what all of the inter-relationships between web sites and the app servers.
I have used Reflector to find dependencies among assemblies, but would like to be able to see the traffic patterns between services.
What are the options for trying to map out web service relationships? For the most part, we are mainly talking about internal services (web to app, app to app, batch to app, etc.). Off the top of my head, I can think of two ways to approach it:
Analyze assemblies for any web references. The drawback here is that not everything is a web reference and I'm not sure how WCF connections are listed. However, this would at least be a start for finding 80% of the connections. Does anyone know of any tools that can do that analysis? Like I said, I've used Reflector for assembly references but can't find anything for web references.
Possibly tap into IIS and passively monitor the traffic coming in and out and somehow figure out what is being called and where from. We are looking at enterprise tools that could help but it would be a while before they are implemented (and cost a lot). But is there anything out there that could help out quickly and cheaply? One tool in particular (AmberPoint) can tap into IIS on the servers and monitor inbound and outbound traffic, adds a little special sauce and begin to build a map of the traffic. Very nice, but costs a bundle.
I know, I know, how the heck did you get into this mess in the first place? Beats me, just trying to help us get control of it and get out of it.
Thanks,
Matt
The easiest way is to look through the logs, but if that doesn't include the referrer than you may also want to monitor what is going out from your web to the app server. You can use tools like Wireshark or Microsoft Network Monitor to see this traffic.
The other "solution" and I use this loosely is to bind a specific web server to app server and then run through a bundle and see what it is hitting on the app server. You could probably do this in a test environment to lesson the effects on the users of the site.
You need a service registry (UDDI??)... If you had a means to catalog these services and their consumers, it would make this job of dependency discovery a lot easier. That is not an easy solution, though. It takes time and documentation to get a catalog in place.
I think the quickest solution would be to query your IIS logs and find source URLs which originate from your own servers. You would at least be able to track down which servers your consumers are coming from.
Also, if you already have some kind of authentication mechanism in place, you could trace who is using a particular service based on login.
You are right about AmberPoint. There are other tools that catalog the service traffic and provide reports showing what is happening to your services. Systinet, SOA Software and Actional also has a products similar to Amberpoint but Amberpoint has a free-ware version, I believe.