一、搭建
1. 創建虛擬網卡(可選)
爲了網絡環境隔離,同時把後期創建的cAdvisor+InfluxDB+Grafana這三個容器都加入自己定義的網絡,便於理解和管理
注:容器啓動可以設置使用改網卡 即使用 --net 網卡名指定 若不指定則默認使用docker主機默認網卡docker0
//創建一個名爲 zcoder-monitor 的docker網絡環境
# docker network create zcoder-monitor
6e7653302309a5b80917334104250bdfc9d3a03c92f1af3d9089bf3d0e59db78
//查看 zcoder-monitor 網絡環境的信息
# docker network inspect zcoder-monitor
[
{
"Name": "zcoder-monitor",
"Id": "6e7653302309a5b80917334104250bdfc9d3a03c92f1af3d9089bf3d0e59db78",
"Created": "2019-09-26T00:26:25.88034987-04:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
2. 部署influxdb
influxdb中文文檔:https://jasper-zhang1.gitbooks.io/influxdb/content/
InfluxDB是一個用於存儲和分析時間序列數據的開源數據庫。
主要特性有:
- 內置HTTP接口,使用方便
- 數據可以打標記,查讓查詢可以很靈活
- 類SQL的查詢語句
- 安裝管理很簡單,並且讀寫數據很高效
- 能夠實時查詢,數據在寫入時被索引後就能夠被立即查出
- ……
# docker run -d --net zcoder-monitor -p 8083:8083 -p 8086:8086 --expose 8011 --expose 8012 -e PRE_CREATE_DB=cadvisor --name influxsrv tutum/influxdb:0.8.8
9cf2bcc3131722619a176be2c47f111147fbcfabcfc6484ad80fc631fa40091d
docker -p 宿主機端口:容器端口
訪問 http://docker主機的ip:映射端口8083
// 創建管理員角色 cadvisor 密碼 123456 以連接cadvisor數據庫
CREATE USER "cadvisor" WITH PASSWORD '123456' WITH ALL PRIVILEGES
// 創建數據庫 cadvisor 用於接收cadvisor的數據
CREATE DATABASE "cadvisor"
3. 部署cadvisor
# docker run -d \
--privileged=true --net zcoder-monitor \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8013:8080 \
--link=influxsrv:influxsrv \
--detach=true \
--name=cadvisor \
google/cadvisor:0.14.0 \
-storage_driver=influxdb \
-storage_driver_db=cadvisor \
-storage_driver_host=influxsrv:8086
//若啓動失敗,啓動cAdvisor報錯:/sys/fs/cgroup/cpuacct,cpu: no such file or directory
//則執行以下命令
# sudo mount -o remount,rw '/sys/fs/cgroup'
# sudo ln -s /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/cpuacct,cpu
參數解釋:
--privileged=true :設置掛載目錄權限爲最大 否則掛載出錯
--net docker-monitor :設置加入docker-monitor網絡
--volume=/:/rootfs:ro :將容器/rootfs目錄掛載到docker /
--volume=/var/run:/var/run:rw :將容器/var/run 掛載到docker /var/run
--volume=/sys:/sys:ro :rw表示讀寫 ro表示只讀
--volume=/var/lib/docker:/var/lib/docker:ro
--volume=/sys/fs/cgroup:/sys/fs/cgroup:ro
-p 8013:8080 :設置cadvisor端口映射 由於8080端口被使用 我分配8013
--detach=true :是否後臺運行容器服務
--name=cadvisor google/cadvisor :容器服務名 爲cadvisor 從docker默認倉庫 下載google/cadvisor鏡像
-storage_driver=influxdb :綁定存儲驅動 爲 influxdb
-storage_driver_db=cadvisor :數據庫爲 cadvisor 請對應
-storage_driver_host=influxdb:8086 :綁定數據庫的管理地址 容器名:容器端口
訪問 http://docker主機的ip:映射端口8013 本來爲8080 修改爲8013
初始登錄名:root 密碼:root
4. 部署grafana
grafana官方文檔 https://grafana.com/docs/
Grafana允許查詢,可視化,警報和了解指標
可視化:從熱圖到直方圖,圖形到地理地圖,Grafana有大量可視化選項,可幫助客戶精美地理解數據。
警報:在數據中時,在有意義的地方無縫定義警報。可視地定義閾值,並通過Slack,PagerDuty等獲得通知。
開源:由一個充滿活力的社區提供支持,可輕鬆安裝在任何平臺上。
延伸:在官方庫中有數百個儀表盤和插件。
# docker run -d -p 3000:3000 \
--name grafana --net zcoder-monitor \
-e HTTP_USER=admin \
-e HTTP_PASS=admin \
-e INFLUXDB_HOST=localhost \
-e INFLUXDB_PORT=8086 \
-e INFLUXDB_NAME=cadvisor \
-e INFLUXDB_USER=root \
-e INFLUXDB_PASS=123456 \
--link=influxsrv:influxsrv \
grafana/grafana:2.0.2
訪問 http://docker主機的ip:映射端口3000 默認帳號admin admin
二、簡單使用Grafana
備註:數據源有多種,influxdbd對實時時序數據有良好的存儲方案。你也可以隨業務場景切換安裝其他數據源
點擊圖標回到首頁,添加儀表盤
相關資料:
How to setup Docker Monitoring
docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana