檢視原始碼 設定指標

此指南說明如何安裝與設定您的 LiveDashboard 指標。

安裝指標

若要在您的儀表板中啟用「指標」功能,您需要執行以下三個步驟

  1. 加入遙測相依項目
  2. 定義您的遙測模組
  3. 設定儀表板

加入遙測相依項目

在您的 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

請務必用您的實際應用程式名稱取代 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 模組說明文件含有更多關於以下內容的資訊:

    • 指標類型
    • 用標籤來分解指標
    • 虛擬機器指標
    • 自訂週期性輪詢
  • 如要更深入地了解 Phoenix 和 Ecto 指標,請參閱我們的 指標演練

  • 如要查看更多使用 :telemetry 的 Elixir 程式庫,請參閱 使用 Telemetry 的程示庫

組態指標

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

指標記錄

也可以透過自訂組態啟用指標時間記錄.