经过
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