經過
Elixometer
蒐集Elixir的運行時統計信息, 並存儲到InfluxDB中, 提供給Grafana進行可視化.git
添加依賴github
defp deps do [ {:quantum, ">= 1.8.0"}, {:exometer_influxdb, github: "travelping/exometer_influxdb"}, {:exometer_core, "~> 1.4", override: true}, {:elixometer, "~> 1.2"}, {:lager, "~> 3.2", override: true}, {:hackney, "~> 1.6", override: true}, ] end
配置 config/config.exs
, 內容以下:數據庫
use Mix.Config config :logger, :console, level: :debug, format: "$date $time $metadata[$level] $message\n", handle_sasl_reports: true, handle_otp_reports: true, utc_log: true import_config "#{Mix.env}.exs"
配置 config/dev.exs
, 內容以下:segmentfault
use Mix.Config config :elixometer, reporter: :exometer_report_influxdb, update_frequency: 5_000, # 報告間隔, 每5秒向InfluxDb寫入一次數據 env: Mix.env, metric_prefix: "elixir" # 統計項前綴 # InfluxDb 報告器, 把測量測數據寫入到InfluxDb時序數據庫中 config :exometer_core, report: [ reporters: [ exometer_report_influxdb: [ protocol: :http, # 使用的協議 host: "", # InfluxDb 服務器IP地址或域名 port: 8086, # InfluxDb 服務器端口 db: "collectdb" # InfluxDb 數據庫名稱 ] ] ]
編寫一個模塊服務器
require Logger defmodule TgMeasure.Collector do use Elixometer def run do Logger.debug "INCREMENT COUNTER" n = :rand.uniform(100) for _t <- 1..n do update_counter("signup_user_count", 1) end end end
運行它tcp
iex -S mix iex(1)> TgMeasure.Collector.run
到此, 你的應用程序會每隔5秒向你的InfluxDB數據庫的8086端口提交一次數據. 能夠經過ide
tcpdump -i eth1 'port 8086'
驗證是否有數據包到達 8086
端口ui