The approach we take is to monitor for the lack of something expected happening in a QoS table.
Essentially it's a fancy heartbeat and there's a couple ways of going about it.
The approach is to use logmon (or one of the other probes) to run a script/test that exercises one of the functions that your end user would perceive as "hanging". Change in log file size, disk space free measure, URL get, etc. Or even just a batch file that posts a QoS record periodically.
Then on your central hub, have a scheduled job query that QoS table for robots that haven't reported a QoS update recently.
It's not especially elegant but it does work.
-Garin