views:

131

answers:

3

I have implemented a windows service application that will be deployed to multiple machines and run concurrently to process tasks in a central queue. I have a log file for each instance of service running. But I want to be able to monitor all instances of the service and retrieve application specific information, such as Name and ID of the task being processed by each service, periodically.

I am thinking to add a web service on each machine to expose those read-only info, and write another app (maybe web app) to retrieve those info across the network and to display them nicely. But is this the good approach? Any other thoughts? And I prefer not to use any off-the-shelf product. Please provide your advice.

Thanks in advance!

[I try to provide my implementaion below as an answer. Read if you are interested. Thanks.]

A: 

It might be overkill, but check out System Center Operations Manager. If you want to give "dashboard" style information to the status of not only your applications, but the machines and databases across many machines (or across a datacenter), SCOM is a good place to start.

JP Alioto
+1  A: 

If your service had an API to retrieve this information via networking, it would be fairly easy to make a client that checked the status of all of the running servers.

This is how many computing cluster services work - they run, and a client can schedule tasks as well as query them. Any technology can be used here, although for .NET, WCF would probably make this fairly easy and robust.

Reed Copsey
A: 

I ended up implmeneted something very similar to what Reed Copsey suggested. Since the application is already a Windows service, I define service/data contract for the information that I want to expose and host the WCF on the same service. This solution allows my client, either scheduler or UI app, to retrieve the information from all instances of service running in the cluster.

weilin8