Conceptually, the core construct that AppDynamics monitors is event based communication, where the processing of each message is one Business Transaction.
Being stream based, rather than message based, raw web sockets do not fit well into this model. If your application operates a higher level message-based protocol over websockets where a complete message is sent over the socket and received, processed and replied to on the server, then the server side activity should be modelled as a Business Transaction, and will be tracked as such by AppDynamics.
Business Transactions must start from an entry point the agent knows about. The agents automatically detect some entry-points by virtue of the transaction logic being placed in a well-known container (e.g. within a servlet for java HTTP). Business Transactions originating at points in code that are not known to the AppDynamics require custom configuration to be recognised (a POJO entry point, in the case of java, or using the agent API in the case of the Node.js agent).
Backend activity (e.g. your external REST calls) will only be tracked if it is in the context of a Business Transaction (and made through a client that is either instrumented out of the box, or via configuration)
To my knowledge, none of our agents support out of the box instrumentation for socket.io; a quick look suggests to me that is is event based, so if you were to instrument socker.emit() as an exit and socket.on() as a Business Transaction entry, I think you would see what you are expecting.
If the messages are passing between server-side components and you additionally arrange for the AppDynamics correlation header to be passed in the message payload then AppDynamics would also show you the end to end correlation.
I hope that explanation helps.
Warm regards,
Peter
... View more