collectd+influxdb+grafana打造圖形化監控系統

weixin_33762321發表於2017-08-15

想打造 New Relic 那樣漂亮的實時監控系統我們只需要 InfluxDB/collectd/Grafana 這三個工具,這三個工具的關係是這樣的:

採集資料(collectd)-> 儲存資料(InfluxDB) -> 顯示資料(Grafana)。

InfluxDB 是 Go 語言開發的一個開源分散式時序資料庫,非常適合儲存指標、事件、分析等資料,看版本號(v0.8.8)就知道這個專案還很年輕;
collectd 就不用介紹了吧,C 語言寫的一個系統效能採集工具;
Grafana 是純 Javascript 開發的前端工具,用於訪問 InfluxDB,自定義報表、顯示圖表等。

collectd

  • 安裝
sudo apt-get update
sudo apt-get upgrade
sudo reboot
  • 配置
    配置 collectd 為客戶端,收集到資料後直接發給 InfluxDB:
sudo vi /etc/collectd/collectd.conf
...
LoadPlugin network
...
<Plugin network>
        Server "192.168.2.183" "25826"
</Plugin>
...

inluxdb

安裝

sudo apt-get install influxdb
# 0.9.2版本 目前grafana只支援0.9版本
wget http://influxdb.s3.amazonaws.com/influxdb_0.9.2_amd64.deb 

0.9版本無法在ubuntu16.04上直接安裝,只能安裝在14.04上,所以我們只能用docker映象來執行influxdb

docker run -d -p 8083:8083 -p 8086:8086 -p 25826:25826/udp\
 -e ADMIN_USER="root" -e INFLUXDB_INIT_PWD="root"\
 -e PRE_CREATE_DB=collectd -e COLLECTD_DB="collectd" -e COLLECTD_BINDING=':25826'\
 -e COLLECTD_RETENTION_POLICY="" tutum/influxdb:0.9

配置

預設的配置檔案儲存在:/etc/opt/influxdb/influxdb.conf

修改配置後要重啟

重啟

/etc/init.d/influxdb restart

預設埠: http://localhost:8083/

  • 身份認證

身份認證 預設情況下,身份認證是關閉的。也就是說,不使用賬號和密碼就可以訪問資料庫。需要使用配置檔案才能進行配置

Grafana

安裝

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.3.2_amd64.deb 
sudo dpkg -i grafana_4.3.2_amd64.deb 

預設埠3000,預設賬號admin/admin

注意:不要使用apt-get install grafana來安裝,可能版本問題,圖示顯示不出來,版本也比較老。

配置

網路流量統計

-- 傳輸
SELECT derivative("value") AS "value" FROM "interface_rx" WHERE "host" = 'localhost' AND "type" = 'if_octets' AND "instance" = 'eno1'

函式 derivative 意為導數, 微積分中的概念. value 為傳輸總量(位元組), derivative("value") 為 value 在時間上的增量.

其中

host = localhost
type = if_octets
instance = eno1

cpu


-- 系統負載
SELECT mean("value") FROM "load_longterm" WHERE "host" = 'localhost' AND $timeFilter GROUP BY time($interval) fill(null)

SELECT mean("value") FROM "load_midterm" WHERE "host" = 'localhost' AND $timeFilter GROUP BY time($interval) fill(null)

SELECT mean("value") FROM "load_shortterm" WHERE "host" = 'localhost' AND $timeFilter GROUP BY time($interval) fill(null)

-- 記憶體用量
SELECT mean("value") FROM "memory_value" WHERE "type_instance" = 'used' AND $timeFilter GROUP BY time($interval) fill(null)

參考資料

相關文章