Prometheus.io Plugs Instrumenter/Exporter

Hex.pmBuild StatusDocumentation

Elixir Plug integration for prometheus.ex

TL;DRExample app

Instrumentation

To instrument whole plug pipeline use Prometheus.PlugPipelineInstrumenter:

defmodule MyApp.Endpoint.PipelineInstrumenter do
  use Prometheus.PlugPipelineInstrumenter
end

To instrument just a single plug use Prometheus.PlugInstrumenter:

defmodule MyApp.CoolPlugInstrumenter do
  use Prometheus.PlugInstrumenter, [plug: Guardian.Plug.EnsureAuthenticated,
                                    counter: :guardian_ensure_authenticated_total,
                                    histogram: :guardian_ensure_authenticated_duration_microseconds,
                                    labels: [:authenticated]]
end

Both modules implement plug interface and Prometheus.PlugInstrumenter generates proxy for specified plug so you'll need to replace instrumented plug with your instrumenter in pipeline.

Instrumenters configured via :prometheus app environment. Please consult respective modules documentation on what options are available.

Exporting

To export metric we first have to create a plug that will serve scraping requests.

defmodule MyApp.MetricsExporter do
  use Prometheus.PlugExporter
end

Then we add exporter to MyApp pipeline:

plug MyApp.MetricsExporter

You can configure path, export format and Prometheus registry via :prometheus app environment. For more information please see Prometheus.PlugExporter module documenataion.

Integrations / Collectors / Instrumenters

Installation

The package can be installed as:

  1. Add prometheus_plug to your list of dependencies in mix.exs:

    def deps do

     [{:prometheus_plugs, "~> 1.0.0-alpha4"}]

    end

  2. Ensure prometheus is started before your application:

    def application do

     [applications: [:prometheus]]

    end

License

MIT