1

通过Elixometer搜集Elixir的运行时统计信息, 并存储到InfluxDB中, 提供给Grafana进行可视化.

clipboard.png

应用程序统计

添加依赖

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, 内容如下:

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

运行它

iex -S mix
iex(1)> TgMeasure.Collector.run

到此, 你的应用程序会每隔5秒向你的InfluxDB数据库的8086端口提交一次数据. 可以通过

tcpdump -i eth1 'port 8086'

验证是否有数据包到达 8086 端口


developerworks
1.7k 声望266 粉丝