# `PromEx.Plugins.Beam`
[🔗](https://github.com/akoutmos/prom_ex/blob/master/lib/prom_ex/plugins/beam.ex#L1)

Telemetry metrics for the BEAM.

This plugin captures metrics regarding the Erlang Virtual Machine (i.e the BEAM). Specifically, it captures metrics
regarding the CPU topology, system limits, VM feature support, scheduler information, memory utilization, distribution
traffic, and other internal metrics.

This plugin supports the following options:
- `poll_rate`: This is option is OPTIONAL and is the rate at which poll metrics are refreshed (default is 5 seconds).

- `metric_prefix`: This option is OPTIONAL and is used to override the default metric prefix of
  `[otp_app, :prom_ex, :beam]`. If this changes you will also want to set `beam_metric_prefix`
  in your `dashboard_assigns` to the snakecase version of your prefix, the default
  `beam_metric_prefix` is `{otp_app}_prom_ex_beam`.

- `duration_unit`: This is an OPTIONAL option and is a `Telemetry.Metrics.time_unit()`. It can be one of:
  `:second | :millisecond | :microsecond | :nanosecond`. It is `:millisecond` by default.

This plugin exposes the following metric groups:
- `:beam_memory_polling_metrics`
- `:beam_internal_polling_metrics`
- `:beam_cpu_topology_manual_metrics`
- `:beam_system_limits_manual_metrics`
- `:beam_system_info_manual_metrics`
- `:beam_scheduler_manual_metrics`

To use plugin in your application, add the following to your PromEx module:
```
defmodule MyApp.PromEx do
  use PromEx, otp_app: :web_app

  @impl true
  def plugins do
    [
      ...
      PromEx.Plugins.Beam
    ]
  end

  @impl true
  def dashboards do
    [
      ...
      {:prom_ex, "beam.json"}
    ]
  end
end
```

This plugin exposes manual metrics so be sure to configure the PromEx `:delay_manual_start` as necessary.

---

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