檢視原始碼 設定指標
此指南說明如何安裝與設定您的 LiveDashboard 指標。
安裝指標
若要在您的儀表板中啟用「指標」功能,您需要執行以下三個步驟
- 加入遙測相依項目
- 定義您的遙測模組
- 設定儀表板
加入遙測相依項目
在您的 mix.exs
中,將以下內容加入您的 deps
{:telemetry_poller, "~> 0.4"},
{:telemetry_metrics, "~> 0.4"},
如果您在 v1.5+ 版本中產生 Phoenix 應用程式,這些相依項目將已安裝。您也可以略過下一段。
定義您的遙測模組
在您的 Phoenix 應用程式中,我們建議您建立一個模組,作為您的遙測監督樹狀結構。在這個監督程式中,您可以定義應用程式的指標,並啟動您的記者。
以下範例含有 LiveDashboard 報告程式的 child 規格,以及 Phoenix、Ecto 和虛擬機器(透過 :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.dev.org.tw/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
模組說明文件含有更多關於以下內容的資訊:- 指標類型
- 用標籤來分解指標
- 虛擬機器指標
- 自訂週期性輪詢
如要更深入地了解 Phoenix 和 Ecto 指標,請參閱我們的 指標演練。
如要查看更多使用
:telemetry
的 Elixir 程式庫,請參閱 使用 Telemetry 的程示庫。
組態指標
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
。