If they can see you, you can see them
Add a layer to your (external) apps that sends asynchronous "pings" out in some form. Could be a messaging, topic-like middleware tool.
If you don't have control over the external systems, possibly add a sep-A-RAT-e "facade" app that does the diagnostics (eg calling a http connection with a timeout) and then send out pings on the external apps behalf.
Add a listener to your central app with a configurable list of remote apps (message types) that are expected to ping in and raise an alert if one of them fails to do so.
Just make sure, to run all of this in separate threads and asynchronously. You don't want blocking UI threads or too many open network connections that wait for a timeout.
This way your central app has very little overhead. It doesn't need to do the polling itself, just sits there with a queue listener and a map of apps and when they last called in. If one of them reaches a threshold for not having called in lately, you have a problem and your app has some way to let you know.