No, we never got this resolved. Our conclusion was that AppD's out-of-the-box support for ws:/wss: communication is very limited. It probably would be possible to set it up, but it seems that a lot of manual configuration would be required.
Since our own software (which we were trying to monitor with AppD) itself happens to be a sensor data collection and analysis system (though primarily for geophysical sensors) we ended up implementing our own "self-monitoring" system by introducing synthetic sensors that were implemented via JMX, etc.
... View more
Our application is a cloud platform that gives users access to embedded systems and IoT devices. Whereas we do have a small HTTP-based web API, the majority of communication and interaction happens via Web Socket communication on three different ports. On some of the ports the higher-level transmission protocol is JSON-RPC 2.0, other ports use a number of custom binary protocols.
We use the Netty 4.1 framework to implement WebSocket communication.
Little to no traffic happens over HTTP.
AppDynamics has been able to identify some basic business transactions, mainly centered around GWT, which is one of the mechanisms we use for front-end communication. However, for device communication AppD has not been able to auto-detect meaningful endpoints.
So, my detailed questions are:
What is a good way to set-up monitoring for the WebSocket communication that has not been autodetected?
How do we set up a health check that, e.g., sends a particular JSON-RPC message on the Web Socket and measures the time until we receive a response?
... View more
It looks like the dialog for adding a custom class for object instance tracking allows you to specify an interface or an abstract class. As interfaces or abstract classes cannot be instantiated, one would expect the semantics of this to add object instance tracking for all concrete subclasses of the given class/interface. Is that how it works?
For example, I added object instance tracking for the interface java.util.concurrent.ScheduledExecutorService, and I am pretty sure that my app creates a number of java.util.concurrent.ScheduledThreadPoolExecutor objects (which is a concrete implementation of ScheduledExecutorService). However the instance count constantly remains at zero.
Ideally, I'd like OIT to behave as described (mainly because that would be the most convenient behavior). If that's not how it's supposed to work, the AppDynamics UI should probably prevent users from entering class names of non-concrete classes.
Can someone clarify how OIT deals with abstract classes and interfaces?
... View more