今天準備開始研究研究當前非常流行的Grafana+Influxdb監控系統,兩者都是非常輕量級的應用但是功能卻異常強大,可以說Grafana在作圖顯示方面真的毫不遜色與Cacti。
元件介紹
cAdvisor
開源軟體cAdvisor(Container Advisor)是用於監控容器執行狀態的利器之一,該專案主頁為https://github.com/google/cadvisor,它被用於多個與docker相關的開源專案中。實際上在Kubernetes系統中,cAdvisor已經被預設整合到了kubelet元件內。cAdvisor提供了web介面可供瀏覽器訪問,在接下來的環境中我們會部署CAdvisor來收集資料資訊。
Influxdb
說到Grafana就不得不提到Influxdb資料庫,Influxdb是用Go語言編寫的一個開源的分散式時序、事件和指標資料庫,不需要外部依賴,該專案的主頁為https://www.influxdata.com。
它有三大特性:
- 時序性(Time Series):與時間相關的函式的靈活使用(諸如最大、最小、求和等)。
- 度量(Metrics):對實時大量資料進行計算。
- 事件(Event):支援任意的事件資料,換句話說,任意事件的資料我們都可以做操作。
同時,它還有以下幾大特點:
- schemaless(無結構),可以是任意數量的列;
- min, max, sum, count, mean, median 一系列函式,方便統計;
- Native HTTP API, 內建http支援,使用http讀寫;
- Powerful Query Language 類似sql;
- Built-in Explorer 自帶管理工具。
Grafana
Grafana是一個視覺化皮膚(Dashboard),有著非常漂亮的圖表和佈局展示,功能齊全的度量儀表盤和圖形編輯器,支援Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作為資料來源。Grafana主要特性:靈活豐富的圖形化選項;可以混合多種風格;支援白天和夜間模式;多個資料來源。其專案官方地址為https://grafana.com。
環境準備
建立Influxdb容器,並配置資料庫資訊。
1.下載influxdb容器。
docker search influxdb
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/influxdb InfluxDB is an open source time series dat... 481 [OK]
docker.io docker.io/tutum/influxdb InfluxDB image - listens in port 8083 (web... 219 [OK]
docker.io docker.io/telegraf Telegraf is an agent for collecting metric... 156 [OK]
docker.io docker.io/chronograf Chronograf is a visualization tool for tim... 85 [OK]
docker pull docker.io/influxdb
2.執行influxdb容器。
docker run -d -p 8086:8086 --name influxdb docker.io/influxdb
- -d:以後臺程式的形式執行容器。
- -p:進行埠對映。
Influxdb在0.13版本以後就已經關閉了web管理介面,但是目前在國內查到的文件大多是時間比較久的文件,所以配置時大多存在web介面的配置,實際上在1.2以後的版本中web管理介面就已經被刪除了,所以我們這裡做的埠對映只做了一個。
3.進入容器配置所需資料庫以及賬戶資訊。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
404c10bd3531 docker.io/influxdb "/entrypoint.sh in..." 22 minutes ago Up 21 minutes 0.0.0.0:8086->8086/tcp influxdb
docker exec -it 404 /bin/bash
influx
Connected to http://localhost:8086 version 1.5.3
InfluxDB shell version: 1.5.3
在我們登入到Influxdb中可以顯示出我們當前Influxdb資料庫的版本資訊。
create database cadvisor
use cadvisor
CREATE USER "root" WITH PASSWORD '123456' WITH ALL PRIVILEGES
4.退出資料庫在介面進行登入測試。
influx -username root -password 123456 -database cadvisor
我們首先建立了為Grafana提供資料的資料庫名稱併為此資料庫建立了一個賬戶及密碼。
建立cAdvisor容器。
1.下載cAdvisor映象。
docker pull docker.io/google/cadvisor
2.執行cAdvisor容器。
執行前首先要檢視influxdb的ip地址,或者直接使用本機對映的地址,以便我們啟動時的連線。
docker inspect --format '{{ .NetworkSettings.IPAddress }}' 404
172.17.0.2
sudo docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--privileged=true \
google/cadvisor:latest \
-storage_driver=influxdb \
-storage_driver_db=cadvisor \
-storage_driver_user=root \
-storage_driver_password=123456 \
-storage_driver_host=172.17.0.2:8086
以上建立命令可以檢視cAdvisor官網,需要注意的是,我們要為cAdvisor提供連線Influxdb的配置資訊,使用官網提供的配置方法建立cAdvisor時會有以下報錯需要注意:
F0606 02:09:21.619637 1 cadvisor.go:156] Failed to start container manager: open /sys/fs/cgroup/cpuset: permission denied
解決辦法:(建立容器時新增上此選項)
--privileged=true \
3.登入web介面,檢視cAdvisor展示資料。
4.登入influxdb檢視cAdvisor是否將資料推送到influxdb。
use cadvisor
show measurements
name: measurements
name
----
cpu_usage_per_cpu
cpu_usage_system
cpu_usage_total
cpu_usage_user
fs_limit
fs_usage
load_average
memory_usage
memory_working_set
rx_bytes
rx_errors
tx_bytes
tx_errors
至此,我們已經可以確認cAdvisor已經收集了資料並儲存至Influxdb中,接下來我們就可以建立Grafana用來展示我們當前的資料了。
建立Grafana容器並配置Grafana展示資料。
1.下載Grafana映象。
docker search grafana
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/grafana/grafana The official Grafana docker container 761
docker.io docker.io/kamon/grafana_graphite All in one image running StatsD, Graphite ... 145
docker.io docker.io/monitoringartist/grafana-xxl Dockerized Grafana 5.x/4.x/3.x with all pr... 61 [OK]
docker.io docker.io/tutum/grafana Grafana dashboard for InfluxDB. Please set... 56 [OK]
docker.io docker.io/samuelebistoletti/docker-statsd-influxdb-grafana Docker Image with Telegraf (StatsD), Influ... 50
docker pull docker.io/grafana/grafana
2.建立Grafana容器。
docker run -d --name grafana -p 3000:3000 docker.io/grafana/grafana
3.登入web介面配置Grafana。
Grafana預設的使用者名稱密碼為admin
1.修改預設使用者密碼。
2.將Influxdb資料來源新增入Grafana。
3.建立新的Dashbord。
4.接下來就是更詳細的配置項等待我們配置。
資料展示: