# `Trellis.Metrics`
[🔗](https://github.com/salesforce-misc/trellis/blob/v0.1.0-alpha/clients/elixir/lib/trellis/metrics.ex#L1)

The engine's metrics, in Prometheus text exposition format: the Rust
crate's `trellis::Metrics::render_prometheus`
(`docs/decisions/0009-observability-decisions.md`).

The registry is process-wide: one body holds the series of every Trellis
handle in this OS process, so it needs no handle and works before
`Trellis.connect/1` and after `Trellis.shutdown/1`. Every series carries a
`trellis_instance="<database>/<catalog schema>"` label, the same value as
the `trellis_instance` of the instance's log lines, so handles in one VM
stay apart. `trellis_instance_up` is 1 while an instance has a running
handle and 0 after its last one shuts down; the other gauges of a stopped
instance disappear after 60 seconds. See `docs/observability.md`.

The binding opens no port. Serve the text from a route the host already
has, for example with Plug:

    get "/metrics" do
      conn
      |> put_resp_content_type("text/plain; version=0.0.4")
      |> send_resp(200, Trellis.Metrics.render_prometheus())
    end

# `render_prometheus`

```elixir
@spec render_prometheus() :: String.t()
```

Renders the registry's current contents: `# HELP` and `# TYPE` lines, then
each series' samples.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
