查看源代码 配置指标

本指南介绍如何在 LiveDashboard 中安装和配置指标。

安装指标

要启用仪表盘中的“指标”功能,您需要执行以下三个步骤

  1. 添加遥测依赖项
  2. 定义您的遥测模块
  3. 配置仪表盘

添加遥测依赖项

在您的 mix.exs 中,将以下内容添加到您的 deps

  {:telemetry_poller, "~> 0.4"},
  {:telemetry_metrics, "~> 0.4"},

如果您在 v1.5+ 版本中生成了 Phoenix 应用程序,这些依赖项将已安装。您也可以跳过下一节。

定义您的遥测模块

在您的 Phoenix 应用程序中,我们建议您创建一个模块充当您的遥测监督树。在这个监督器中,您可以定义应用程序的指标并启动您的报告器。

以下示例包含 LiveDashboard 报告器的子规范,以及由 Phoenix、Ecto 和 VM(通过 :telemetry_poller 包)发出的遥测事件的一些指标定义。

lib/my_app_web/telemetry.ex 中创建您的遥测模块

defmodule MyAppWeb.Telemetry do
  use Supervisor
  import Telemetry.Metrics

  def start_link(arg) do
    Supervisor.start_link(__MODULE__, arg, name: __MODULE__)
  end

  @impl true
  def init(_arg) do
    children = [
      # Telemetry poller will execute the given period measurements
      # every 10_000ms. Learn more here: https://hexdocs.erlang.ac.cn/telemetry_metrics
      {:telemetry_poller, measurements: periodic_measurements(), period: 10_000}
      # Add reporters as children of your supervision tree.
      # {Telemetry.Metrics.ConsoleReporter, metrics: metrics()}
    ]

    Supervisor.init(children, strategy: :one_for_one)
  end

  def metrics do
    [
      # Phoenix Metrics
      summary("phoenix.endpoint.stop.duration",
        unit: {:native, :millisecond}
      ),
      summary("phoenix.router_dispatch.stop.duration",
        tags: [:route],
        unit: {:native, :millisecond}
      ),

      # Database Time Metrics
      summary("my_app.repo.query.total_time", unit: {:native, :millisecond}),
      summary("my_app.repo.query.decode_time", unit: {:native, :millisecond}),
      summary("my_app.repo.query.query_time", unit: {:native, :millisecond}),
      summary("my_app.repo.query.queue_time", unit: {:native, :millisecond}),
      summary("my_app.repo.query.idle_time", unit: {:native, :millisecond}),

      # VM Metrics
      summary("vm.memory.total", unit: {:byte, :kilobyte}),
      summary("vm.total_run_queue_lengths.total"),
      summary("vm.total_run_queue_lengths.cpu"),
      summary("vm.total_run_queue_lengths.io")
    ]
  end

  defp periodic_measurements do
    []
  end
end

请确保用您的实际应用程序名称替换 MyAppmy_app

然后添加到您的主应用程序的监督树(通常在 lib/my_app/application.ex 中)

children = [
  MyApp.Repo,
  MyAppWeb.Telemetry,
  MyAppWeb.Endpoint,
  ...
]

配置仪表盘

现在最后一步是配置仪表盘。转到路由器中的 live_dashboard 调用并添加以下选项

live_dashboard "/dashboard", metrics: MyAppWeb.Telemetry

现在刷新“/dashboard”页面,指标功能应该被启用。每个指标根据指标名称本身进入不同的组。

更多关于遥测

现在您已经运行了指标,您可以开始探索遥测生态系统的其他部分!以下是一些入门链接

  • Telemetry.Metrics 模块文档包含有关以下内容的更多信息

    • 指标类型
    • 按标签细分指标
    • VM 指标
    • 自定义周期性轮询
  • 有关 Phoenix 和 Ecto 指标的更深入研究,请参阅我们的 遥测演练

  • 有关使用 :telemetry 的更多 Elixir 库,请参阅 使用遥测的库

配置指标

LiveDashboard 集成了 :telemetry,将每个 Telemetry.Metrics 转换为一个漂亮的实时图表。

下表显示了 Telemetry.Metrics 指标如何映射到 LiveDashboard 图表

Telemetry.MetricsY 轴值
last_value始终设置为绝对值
counter始终增加 1
sum始终增加/减少绝对值
summary值/最小值/最大值/平均值
distribution各个桶中的事件总数

报告器选项

报告器选项可以作为选项提供给每个指标。例如

counter("my_app.counter", reporter_options: [...])

以下报告器选项可用于仪表盘

  • :nav - 配置指标所属的组。默认情况下,该组是名称的第一部分。例如,counter("my_app.counter") 默认情况下为组“my_app”

  • :prune_threshold - 数据点的最大数量。当达到阈值时,图表数据将被缩减一半。默认值为 1_000

  • :bucket_size - 每个桶的单位宽度。此选项仅适用于 distribution 直方图。默认值为 20

指标历史记录

指标历史记录也可以通过自定义配置启用.