Collectd & InfluxDb & Grafana 之三: 應用程序運行指標統計

經過Elixometer蒐集Elixir的運行時統計信息, 並存儲到InfluxDB中, 提供給Grafana進行可視化.git

clipboard.png

應用程序統計

添加依賴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

相關文章
相關標籤/搜索