Skip to content

Instantly share code, notes, and snippets.

@pnc
Last active September 9, 2023 23:32
Show Gist options
  • Save pnc/9e957e17d4f9c6c81294 to your computer and use it in GitHub Desktop.
Save pnc/9e957e17d4f9c6c81294 to your computer and use it in GitHub Desktop.
Using Erlang observer/appmon remotely

Using OTP's observer (appmon replacement) remotely

$ ssh remote-host "epmd -names"
epmd: up and running on port 4369 with data:
name some_node at port 58769

Note the running on port for epmd itself and the port of the node you're interested in debugging. Reconnect to the remote host with these ports forwarded:

$ ssh -L 4369:localhost:4369 -L 58769:localhost:58769 remote-host

On your machine, start a hidden Erlang node running the observer app:

$ erl -name debug@127.0.0.1 -setcookie if-server-has-one -hidden -run observer

N.B.: If the server is using -sname, you need to use -sname as well, because Erlang™. You'll also need to change your system's hostname to match the target host, for the same reason.

In observer, go to Nodes - Connect Node and type some_node@127.0.0.1.

You can also get a remote shell:

$ erl -name debug@127.0.0.1 -setcookie if-server-has-one -remsh some_node@127.0.0.1
@silviucpp
Copy link

@jozuas do you have an example that's working with -R ?

I have epmd running on and the app on node 4369 28327

So this is the correct forwarding ?

ssh user@host -R4369:localhost:4369 -R28327:localhost:28327 -L4369:localhost:4369 -L:28327:localhost:28327

Silviu

@jozuas
Copy link

jozuas commented Jan 10, 2023

@silviucpp I am not using -R option myself because using -R option requires sshd_config option GatewayPorts yes. This is something I did not want to immediately introduce into the production servers of my company.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment