首页 > 解决方案 > Elixir:仅为普罗米修斯指标启动 http 服务器

问题描述

我有以下代码:

defmodule MyApp.Http do
  use Application

  require Logger

  def start(_type, _args) do
    import Supervisor.Spec, warn: false

    MyApp.PlugPipelineInstrumenter.setup()
    MyApp.MetricsExporter.setup()

    opts = [strategy: :one_for_one, name: MyApp.Http.Supervisor]
    Supervisor.start_link([], opts)
  end
end

defmodule MyApp.MetricsExporter do
  use Prometheus.PlugExporter
end

defmodule MyApp.PlugPipelineInstrumenter do
  use Prometheus.PlugPipelineInstrumenter
end

但它什么也没做。当我添加:

plug MyApp.MetricsExporter
plug MyApp.PlugPipelineInstrumenter

我得到编译错误:undefined function plug/1. 我使用长生不老药 1.10.3。我在这里做错了什么?

标签: httpserverelixirprometheusmetrics

解决方案


我制作了一个名为prometheus_sidecar的十六进制包,它创建了一个专用于 prometheus 的牧场服务器(因此您可以在任何 elixir 应用程序中运行它)并为您连接prometheus_plugs

它利用了 erlang 的应用程序启动生命周期,因此除了将其作为库添加到您的应用程序之外,无需进行任何配置。

如果您觉得它有用,请告诉我。


推荐阅读