[Production Safe] Phoenix Liveview Dashboard for Observability including Ports and Processes details, Tracing/Profiling with erlang debugger, Beam VM metrics and much more
See the codeObserver Web is an easy-to-use tool that integrates into your application, providing enhanced observability. Leveraging OTP distribution, it offers tracing and profiling through the Erlang debugger, along with detailed insights into process/port statuses and Beam VM statistics.
Powered by Phoenix LiveView, it is distributed, lightweight, fully real-time and safe to use in production. This library is part of the DeployEx project.












See the installation guide for details on installing and Configuring.
mix deps.get
mkdir -p priv/static && touch priv/static/app.css && touch priv/static/app.js
cd assets/
npm install
cd ..
mix assets.build
Since Observer Web uses the OTP distribution, it is required to have a name when running.
elixir --sname observer -S mix run --no-halt dev.exs
Now you can visit localhost:4000/observer from your browser.
Open a new terminal (Terminal 1) and run the application in observer mode:
export PORT=4000
export OBSERVER_WEB_TELEMETRY_MODE=observer
elixir --sname observer --cookie cookie -S mix run --no-halt dev.exs
Open a new terminal (Terminal 2) and run the application in broadcast mode:
export PORT=4001
export OBSERVER_WEB_TELEMETRY_MODE=broadcast
elixir --sname broadcast --cookie cookie -S mix run --no-halt dev.exs
Open a new terminal (Terminal 3) and run:
iex --sname hub --cookie cookie -S mix phx.server
After the Phoenix server starts, you'll see the Elixir interactive shell prompt. Connect the nodes by executing these commands:
# Connect to the observer node
{:ok, hostname} = :inet.gethostname()
Node.connect(:"observer@#{hostname}")
# Should return: true
# Connect to the broadcast node
{:ok, hostname} = :inet.gethostname()
Node.connect(:"broadcast@#{hostname}")
# Should return: true
You can close the Terminal 3 if you want, this terminal is only for supporting the node connection.
To verify everything is working properly:
localhost:4000/observer/metrics in your browser to confirm
the application is running in observer mode.localhost:4001/observer/metrics to confirm the application
is running in broadcast mode.You can now explore the observer mode, checking that the data is persisted even if the other app in
broadcast mode restarts.
To observe any remote node - a Nerves device, a server, or another machine on the network -
rather than another local dev instance, set OBSERVER_WEB_DEV_CONNECT_NODE to that node's full
name before starting the dev server.
dev.exs connects to it automatically on boot, so no interactive shell is needed:
OBSERVER_WEB_DEV_CONNECT_NODE=<remote-node>@<remote-hostname> elixir --name observer@<your-hostname> --cookie cookie -S mix run --no-halt dev.exs
A few things this depends on:
--name (not --sname) is required whenever either side has a dotted hostname, since Erlang
distribution requires both nodes to use the same short-name/long-name mode.--cookie must match the cookie the remote node is actually running with; check it there via
Node.get_cookie().epmd (port 4369 by default).ObserverWeb is free and open source. If it's useful to you, consider supporting its development:
bc1q3f5eyg2qlun6dc4l597yuyygmkh2qvklwecw8r0x151C3A7AE305b3fF385c7EEce72C6c4E23dE05FaElixir
98.1%
JavaScript
1.5%
[Production Safe] Phoenix Liveview Dashboard for Observability including Ports and Processes details, Tracing/Profiling with erlang debugger, Beam VM metrics and much more
See the codeObserver Web is an easy-to-use tool that integrates into your application, providing enhanced observability. Leveraging OTP distribution, it offers tracing and profiling through the Erlang debugger, along with detailed insights into process/port statuses and Beam VM statistics.
Powered by Phoenix LiveView, it is distributed, lightweight, fully real-time and safe to use in production. This library is part of the DeployEx project.












See the installation guide for details on installing and Configuring.
mix deps.get
mkdir -p priv/static && touch priv/static/app.css && touch priv/static/app.js
cd assets/
npm install
cd ..
mix assets.build
Since Observer Web uses the OTP distribution, it is required to have a name when running.
elixir --sname observer -S mix run --no-halt dev.exs
Now you can visit localhost:4000/observer from your browser.
Open a new terminal (Terminal 1) and run the application in observer mode:
export PORT=4000
export OBSERVER_WEB_TELEMETRY_MODE=observer
elixir --sname observer --cookie cookie -S mix run --no-halt dev.exs
Open a new terminal (Terminal 2) and run the application in broadcast mode:
export PORT=4001
export OBSERVER_WEB_TELEMETRY_MODE=broadcast
elixir --sname broadcast --cookie cookie -S mix run --no-halt dev.exs
Open a new terminal (Terminal 3) and run:
iex --sname hub --cookie cookie -S mix phx.server
After the Phoenix server starts, you'll see the Elixir interactive shell prompt. Connect the nodes by executing these commands:
# Connect to the observer node
{:ok, hostname} = :inet.gethostname()
Node.connect(:"observer@#{hostname}")
# Should return: true
# Connect to the broadcast node
{:ok, hostname} = :inet.gethostname()
Node.connect(:"broadcast@#{hostname}")
# Should return: true
You can close the Terminal 3 if you want, this terminal is only for supporting the node connection.
To verify everything is working properly:
localhost:4000/observer/metrics in your browser to confirm
the application is running in observer mode.localhost:4001/observer/metrics to confirm the application
is running in broadcast mode.You can now explore the observer mode, checking that the data is persisted even if the other app in
broadcast mode restarts.
To observe any remote node - a Nerves device, a server, or another machine on the network -
rather than another local dev instance, set OBSERVER_WEB_DEV_CONNECT_NODE to that node's full
name before starting the dev server.
dev.exs connects to it automatically on boot, so no interactive shell is needed:
OBSERVER_WEB_DEV_CONNECT_NODE=<remote-node>@<remote-hostname> elixir --name observer@<your-hostname> --cookie cookie -S mix run --no-halt dev.exs
A few things this depends on:
--name (not --sname) is required whenever either side has a dotted hostname, since Erlang
distribution requires both nodes to use the same short-name/long-name mode.--cookie must match the cookie the remote node is actually running with; check it there via
Node.get_cookie().epmd (port 4369 by default).ObserverWeb is free and open source. If it's useful to you, consider supporting its development:
bc1q3f5eyg2qlun6dc4l597yuyygmkh2qvklwecw8r0x151C3A7AE305b3fF385c7EEce72C6c4E23dE05FaElixir
98.1%
JavaScript
1.5%