Elixir/Erlang offers Observer a GUI tool for observing the Elixir/Erlang system

In this article, we will setup the Observer for remotely connecting to the mix release deployed Elixir app.

Let's start, in your Elixir app, run.

mix release.init

You will notice, it generates three files in rel folder as
env.bat.eex, env.sh.eex and vm.args.eex

Uncomment following lines in env.sh.eex file

export RELEASE_NODE=<%= @release.name %>@

We need to add release name and cookie. Cookie is used to remotely connect to the app's node with a distributed feature of Elixir

export RELEASE_NAME="your_app"
export RELEASE_COOKIE="pa55word"

Alternatively, for release name and cookie, you can add :releases key in mix.exs in project function as below

deps: deps(),
releases: [
  your_app: [
    version: "0.0.1",
    include_executables_for: [:unix],
    applications: [runtime_tools: :permanent],
    cookie: "pa55word"

Now go and deploy the app to your production/staging instance with commands provided by mix release.

Now to connect with the remote app, we need to know the port attached by epmd for attaching to our Phoenix application deployed on the server.

On your server, go to erts/bin directory and run epmd -names

prod/rel/your_app/erts-11.0/bin$ epmd -names
epmd: up and running on port 4369 with data:
name your_app at port 40573

Let's call 40573 as PORT; we will need it to set up an ssh tunnel from our local machine terminal.

Once the app runs on production/staging, you deploy it with mix release, run below command in a local terminal

ssh -N -L PORT:localhost:PORT -L 4369:localhost:4369 ubuntu@your_server_ip

Now run this in another terminal.

erl -name debug@ -setcookie 'pa55word' -run observer

Observer window will open, and you go to menu item 'Nodes,' and there you will find out your_app@,

Click it, and you will see the Observer showing your app's processes and other data.