查看源代码 配置指标
本指南介绍如何在 LiveDashboard 中安装和配置指标。
安装指标
要启用仪表盘中的“指标”功能,您需要执行以下三个步骤
- 添加遥测依赖项
- 定义您的遥测模块
- 配置仪表盘
添加遥测依赖项
在您的 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
请确保用您的实际应用程序名称替换 MyApp
和 my_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.Metrics | Y 轴值 |
---|---|
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
。