1. 程式人生 > >InfluxDB + Grafana 快速搭建自己的 NewRelic,分析應用執行情況

InfluxDB + Grafana 快速搭建自己的 NewRelic,分析應用執行情況

NewRelic 估計很多人都用過,但是這貨非常貴,貴的一般人買不起,尤其是個人專案。

可咱也要效能指標分析啊!那來自己搭建一個

你需要三個工具:

  • InfluxDB - Go 寫的一個 Time series (不知道怎麼翻譯) 資料庫,用於儲存指標、事件、分析等資料;
  • Grafana - 一個純靜態的專案,用於訪問 InfluxDB,自定義報表,也就是上面那個圖的內容,可以自由編輯;
  • influxdb-ruby - InfluxDB 的 Ruby 客戶端庫,用來寫資料

安裝 InfluxDB

InfluxDB 安裝非常簡單

Mac

Homebrew 就可以安裝

$ 
brew update $ brew install influxdb

Ubuntu

# for 64-bit systems
wget http://s3.amazonaws.com/influxdb/influxdb_latest_amd64.deb
sudo dpkg -i influxdb_latest_amd64.deb

# for 32-bit systems
wget http://s3.amazonaws.com/influxdb/influxdb_latest_i386.deb
sudo dpkg -i influxdb_latest_i386.deb

然後啟動就可以了,帳號預設 root 密碼 root
你可以開啟它的 Web Admin 介面: 

http://127.0.0.1:8083/ 並建立一個數據庫 rails_app

Grafana 安裝

由於 Grafana 是存靜態的,你只需要下載原始碼解壓,將它部署在 Nginx 上面就可以了,或者可以用 Python 的 SimpleHTTPServer 來跑

$ wget http://grafanarel.s3.amazonaws.com/grafana-1.9.1.tar.gz
$ tar zxf grafana-1.9.1.tar.gz
$ cd grafana-1.9.1
$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

資料埋點

gem install influxdb

或 Gemfile 加入 influxdb

Rails 專案 config/initializers/influxdb.rb

require 'influxdb'
influx_config  = YAML.load_file("#{Rails.root}/config/influxdb.yml")[Rails.env]
$influxdb = InfluxDB::Client.new("rails_app", hosts: ["127.0.0.1"], port: 8086, username: "root", password: "root")

# 關注 ActionController 的 process_action 通知,會收到所有的請求
ActiveSupport::Notifications.subscribe('process_action.action_controller') do |*args|
  event = ActiveSupport::Notifications::Event.new(*args)

  info = {
    action: "#{event.payload[:controller]}##{event.payload[:action]}", 
    runtime: event.duration,
    db_runtime: event.payload[:db_runtime],
    server: Socket.gethostname,
    status: event.payload[:status] 
  }

  $influxdb.write_point("process_action.action_controller", info)
end

然後資料就會慢慢的寫入到 InfluxDB 的 rails_app 會有新表 process_action.action_controller 你可以回到 InfluxDb Admin 裡面查詢看看

select * from process_action.action_controller;

或者用 list series 檢視所有的表

list series;

其它的選擇

除了用 Grafana 來展示統計的資料外,你還可以用 facette,它也是支援 InfluxDB 的,也是一個 Go 寫的 Web Server,包含 Web 介面,可以自由配置(目前看起來可用性沒有 Grafana 好)。

2016 更新,用了 Grafana 3.0.0

原文地址:https://ruby-china.org/topics/23470?page=2#replies