使用 Grafana+collectd+InfluxDB 打造現代監控系統
想打造 New Relic 那樣漂亮的實時監控系統我們只需要 InfluxDB/collectd/Grafana 這三個工具,這三個工具的關係是這樣的:
採集資料(collectd)-> 儲存資料(InfluxDB) -> 顯示資料(Grafana)。
InfluxDB是 Go 語言開發的一個開源分散式時序資料庫,非常適合儲存指標、事件、分析等資料,看版本號(v0.8.8)就知道這個專案還很年輕;
collectd就不用介紹了吧,C 語言寫的一個系統性能採集工具;
Grafana是純 Javascript 開發的前端工具,用於訪問 InfluxDB,自定義報表、顯示圖表等。
下面的安裝和配置步驟在 Ubuntu 14.04 Server 64bit 版上完成。升級整個系統後重啟:
$sudoapt-getupdate $sudoapt-getupgrade $sudoreboot
安裝 InfluxDB
InfluxDB 是 Go 寫的,不依賴任何其他包或庫,很乾淨。安裝很容易:
$wgethttps://s3.amazonaws.com/influxdb/influxdb_latest_amd64.deb $sudodpkg-iinfluxdb_latest_amd64.deb
啟動 InfluxDB:
$sudo/etc/init.d/influxdbstart Settingulimit-n65536 Startingtheprocessinfluxdb[OK] influxdbprocesswasstarted[OK]
啟動後開啟 web 管理介面 http://192.168.2.183:8083/ 預設使用者名稱和密碼是 root 和 root. InfluxDB 的 Web 管理介面埠是 8083,HTTP API 監聽埠是 8086,如果需要更改這些預設設定,修改 InfluxDB 的配置檔案重啟就可以了。
在剛安裝好的 InfluxDB 上建立一個名為 collectd 的資料庫,可以用命令列建立,也可以用 Web 管理介面操作:
$curl"http://192.168.2.183:8086/db?u=root&p=root"-d"{\"name\":\"collectd\"}"
安裝 collectd
安裝 collectd:
$sudoapt-getinstallcollectd
配置 collectd 為客戶端,收集到資料後直接發給 InfluxDB:
$sudovi/etc/collectd/collectd.conf ... LoadPluginnetwork ... <Pluginnetwork> Server"192.168.2.183""25826" </Plugin> ...
重啟 collectd:
$sudo/etc/init.d/collectdrestart
InfluxDB 現在自帶一個 collectd 外掛來獲取 collectd 客戶端發來的資料,以前可沒這麼方便哦,0.8.4 版本以前只能通過 influxdb-collectd-proxy 這樣的第三方程式來連線 collectd 和 InfluxDB. 如果你檢查一下伺服器上開啟的埠就會發現 influxdb 外掛啟動了一個 25826 埠,如果發現 InfluxDB 資料庫裡沒有(收集到)資料,務必檢查這個 25826 埠是否正常啟動了:
$sudonetstat-tupln ActiveInternetconnections(onlyservers) ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programname tcp000.0.0.0:220.0.0.0:*LISTEN622/sshd tcp600:::8086:::*LISTEN668/influxdb tcp600:::22:::*LISTEN622/sshd tcp600:::8090:::*LISTEN668/influxdb tcp600:::8099:::*LISTEN668/influxdb tcp600:::8083:::*LISTEN668/influxdb udp600:::25826:::*668/influxdb
InfluxDB 自帶的 collectd 外掛預設是關閉的,需要手動配置開啟 enabled = true,並填上 database = “collectd” 這一行,這裡的 “collectd” 就是我們上面建立的那個資料庫,更改配置後記得重啟 InfluxDB:
$sudovi/opt/influxdb/current/config.toml $sudovi/opt/influxdb/shared/config.toml ... #Configurethecollectdapi [input_plugins.collectd] enabled=true #address="0.0.0.0"#Ifnotset,isactuallysettobind-address. #port=25826 database="collectd" #types.dbcanbefoundinacollectdinstallationorongithub: #https://github.com/collectd/collectd/blob/master/src/types.db #typesdb="/usr/share/collectd/types.db"#Thepathtothecollectdtypes.dbfile ... $sudo/etc/init.d/influxdbrestart Settingulimit-n65536 Settingulimit-n65536 influxdbprocesswasstopped[OK] Settingulimit-n65536 Startingtheprocessinfluxdb[OK] influxdbprocesswasstarted[OK]
現在 InfluxDB 已經準備好接受和處理 collectd 傳來的資料了。用命令列或者 Web 管理介面驗證一下資料庫裡是否有資料:
$curl-G'http://192.168.2.183:8086/db/collectd/series?u=root&p=root&q=list+series&pretty=true' [ { "name":"list_series_result", "columns":[ "time", "name" ], "points":[ [ 0, "192.168.2.183/cpu-0/cpu-idle" ], ... ] } ]
安裝 Grafana
下載 grafana 後解壓發到 web 伺服器上就可用。這裡省去配置 Nginx/Apache 之類的麻煩,直接用最簡單的 Web 伺服器 python -m SimpleHTTPServer 驅動:
$wgethttp://grafanarel.s3.amazonaws.com/grafana-1.9.1.tar.gz $tarxzvfgrafana-1.9.1.tar.gz $cdgrafana-1.9.1.tar.gz $cpconfig.sample.jsconfig.js $viconfig.js ... //InfluxDBexamplesetup(theInfluxDBdatabasesspecifiedneedtoexist) datasources:{ influxdb:{ type:'influxdb', url:"http://192.168.2.183:8086/db/collectd", username:'root', password:'root', }, ... }, ... $sudopython-mSimpleHTTPServer
用瀏覽器訪問 Grafana,這裡的預設埠是 8000:
Troubleshooting
下面有多個網友評論提到修改配置檔案後端口 25826 也無法起來的問題,和 influxdb 啟動時候使用的是哪個配置檔案有關,用 ps aux | grep influxdb 可以看到當前 influxdb 使用的是哪個配置檔案:
$sudovi/opt/influxdb/current/config.toml $sudovi/opt/influxdb/shared/config.toml $psaux|grepinfluxdb influxdb66819.18.1265596482336?SlMar316375:52/usr/bin/influxdb-pidfile/opt/influxdb/shared/influxdb.pid-config/opt/influxdb/shared/config.toml ...
文章出處:http://www.vpsee.com/tag/grafana/
轉載於:https://blog.51cto.com/enlighten/1956958