使用 Grafana Influxdb Telegraf 監控系統

系統運作一段時間之後,想要知道最近狀況是否正常,卻沒有紀錄可以查詢跟比較。為了解決這個情況,需要一套監控系統,這裡使用 Grafana Influxdb Telegraf 解決方案。

成果

擁有一個可以查詢系統狀態的儀表板

Grafana

Grafana 主要的 Web UI 介面,透過 Influxdb 讀取紀錄資料畫出各種視覺化圖表顯示在 Web 上。

docker run -d --name=grafana -p 3000:3000 grafana/grafana

啟動後使用 chrome 連到該主機的 3000 port,即可看到 Grafana 畫面 http://ip:3000/

第一次登入預設帳號密碼是 admin / admin,登入後會要求設定新密碼,記得存起來

Note: 這個設定缺少 Grafana 的資料保存,當容器刪除後,相關資料將會遺失

Influxdb

Influxdb 主要是時間序的資料庫,用來存放 Telegraf 收集的紀錄,提供給 Grafana 查詢。

docker run -d --name=influxdb -p 8086:8086 \
      -e INFLUXDB_DB=defaultdb \
      -e INFLUXDB_ADMIN_USER=admin \
      -e INFLUXDB_ADMIN_PASSWORD=adminpass \
      -e INFLUXDB_USER=user \
      -e INFLUXDB_USER_PASSWORD=userpass \
      -v /data/influxdb:/var/lib/influxdb \
      influxdb:latest

Telegraf

Telegraf 用來收集相關資料,傳送給 Influxdb。

如果是第一次設定,可以從 docker image 取得預設設定檔

docker run --rm telegraf telegraf config > telegraf.conf

接著修改設定檔,其中 influxdb 的 urls 跟 hostname 要修改,hostname 預設會取 VM 名稱,但是因為跑在容器內,會取到容器的名稱,識別性太低,所以記得設定。

[agent]
  ...
  hostname = "sgp1"

[[outputs.influxdb]]
  urls = ["http://127.0.0.1:8086"]
  ...

除了預設的 cpu, mem 之後,也把一些預設關閉的功能開啟

[[inputs.interrupts]]
  # no configuration
  
[[inputs.linux_sysctl_fs]]
  # no configuration

[[inputs.net]]
  # collect data only about specific interfaces
  # interfaces = ["eth0"]

[[inputs.netstat]]
  # no configuration

接著使用 docker 啟動

docker run -d --name=telegraf \
  --network host \
	-v /:/hostfs:ro \
	-v /etc:/hostfs/etc:ro \
	-v /proc:/hostfs/proc:ro \
	-v /sys:/hostfs/sys:ro \
	-v /var:/hostfs/var:ro \
	-v /run:/hostfs/run:ro \
	-e HOST_ETC=/hostfs/etc \
	-e HOST_PROC=/hostfs/proc \
	-e HOST_SYS=/hostfs/sys \
	-e HOST_VAR=/hostfs/var \
	-e HOST_RUN=/hostfs/run \
	-e HOST_MOUNT_PREFIX=/hostfs \
  -v /data/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro \
  telegraf

Note: 為了收集網路資料,使用 host mode 網路模式,需要注意相關安全性問題

新增 DataSource

DataSource 選擇 InfluxDB

HTTP 的 URL 記得設定能從容器中連的到的 InfluxDB IP

InfluxDB Details 輸入 telegraf

最後按下 Save & Test

出現綠底白字表示設定成功

新增 Dashboard

在 Dashboard 管理頁面,選擇右上角的 Import

然後使用 grafana.com 上建好的設定,輸入 928

這麼一來就有一些基本的資料可以查詢啦

Ref

grafana/grafana - Docker Hub Launching a InfluxDB container in docker with a default database name - Stack Overflow telegraf - Docker Hub telegraf/FAQ.md at master · influxdata/telegraf · GitHub

留言