cAdvisor0.24.1+InfluxDB0.13+Grafana4.0.2搭建Docker1.12.3 Swarm集群性能監控平台


目錄

1、基本概念

​ 既然是對Docker的容器進行監控,我們就不自己單獨搭建cAdvisor、InfluxDB、Grarana了,本文中這三個實例,主要以Docker容器方式運行。

本文中的案例會有四台機器,他們的Host和IP地址如下,四台機器的集群搭建可以參考<Centos7的安裝、Docker1.12.3的安裝,以及Docker Swarm集群的簡單實例>

c1 -> 10.0.0.31
c2 -> 10.0.0.32
c3 -> 10.0.0.33
c4 -> 10.0.0.34

1.1、什么是cAdvisor?

cAdvisor 為Docker容器用戶提供了了解運行時容器資源使用和性能特征的工具。cAdvisor的容器抽象基於Google的lmctfy容器棧,因此原生支持Docker容器並能夠“開箱即用”地支持其他的容器類型。cAdvisor部署為一個運行中的daemon,它會收集、聚集、處理並導出運行中容器的信息。這些信息能夠包含容器級別的資源隔離參數、資源的歷史使用狀況、反映資源使用和網絡統計數據完整歷史狀況的柱狀圖。

1.2、什么是InfluxDB?

InfluxDB 是一個開源分布式時序、事件和指標數據庫。使用 Go 語言編寫,無需外部依賴。其設計目標是實現分布式和水平伸縮擴展。

其主要特色功能

  • 基於時間序列,支持與時間有關的相關函數(如最大,最小,求和等)

  • 可度量性:你可以實時對大量數據進行計算

  • 基於事件:它支持任意的事件數據

    InfluxDB的主要特點

  • 無結構(無模式):可以是任意數量的列

  • 可拓展的

  • 支持min, max, sum, count, mean, median 等一系列函數,方便統計

  • 原生的HTTP支持,內置HTTP API

  • 強大的類SQL語法

  • 自帶管理界面,方便使用

1.3、什么是Grafana?

Graphite 是一款開源的監控繪圖工具。可以實時收集、存儲、顯示時間序列類型的數據(time series data),有些類似Kibana的東西。

以下是官方的說明

  • 用於可視化大型測量數據的開源程序,他提供了強大和優雅的方式去創建、共享、瀏覽數據。dashboard中顯示了你不同metric數據源中的數據。
  • 常用於因特網基礎設施和應用分析,但在其他領域也有機會用到,比如:工業傳感器、家庭自動化、過程控制等等。
  • 有熱插拔控制面板和可擴展的數據源,目前已經支持Graphite、Cloudwatch、Prometheus、InfluxDB、Elasticsearch。

2、開始安裝Docker性能監控組件

2.1、創建一個overlay網絡

​ 在docker 1.12以前, swarm集群需要一個額外的key-value存儲(consul, etcd etc). 來同步網絡配置, 保證所有容器在同一個網段中. 在docker 1.12已經內置了這個存儲, 集成了overlay networks的支持。

​ 下面我們創建一個名為logging的overlay網絡,用於后面的容器間相互通信。

➜ /Users/lion >docker network create --driver overlay logging
451negncg10ahru13hgn2k9nt
➜ /Users/lion >docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
1299968d22b6        bridge              bridge              local
60g7y3cbkdfe        docker-net          overlay             swarm
4d7292be91ca        docker_gwbridge     bridge              local
e1b111616be1        host                host                local
dxo4vcd9mig1        ingress             overlay             swarm
451negncg10a        logging             overlay             swarm
bc0a8040cae6        none                null                local

​ 在docker network ls列表中,可以看到logging網絡的SCOPEswarm,表示在整個swarm集群是生效的。如果是在多台主機的集群中,overlay網絡在沒有被使用的時候,只會在manage節點出現,使用后會自動同步到其他節點。

2.2、安裝InfluxDB 0.13

​ 我們第一個先安裝 InfluxDB,在用於收集swarm性能數據

docker service create --network logging \
-p 8083:8083 -p 8086:8086 \
--mount source=influxdb-vol,type=volume,target=/var/lib/influxdb \
--name=influxdb \
--constraint 'node.hostname==c1' \
tutum/influxdb:0.13

8086用於Influxdb數據讀寫,8083用於數據庫管理界面

--constraint 'node.hostname==c1' 對服務進行約束,指定在c1機器上運行,更多約束介紹參考<Centos7的安裝、Docker1.12.3的安裝,以及Docker Swarm集群的簡單實例>

—mount 掛載一個類型為volume的目錄到容器上,實現數據持久化。在c1上運行docker volume ls命令可以查看目錄的情況,運行docker volume inspect influxdb-vol命令,可以查看目錄的詳細信息

​ InfluxDB容器創建成功后,可以通過http://10.0.0.31:8083/打開管理界面。點擊右上角的齒輪圖標,登錄到InfluxDB數據庫,默認用戶名是root,密碼是root,然后點擊save進行保存

idoall.org

​ 創建cadvisor數據庫,用於收集存儲Docker Swarm的性能數據,在輸入框輸入CREATE DATABASE "cadvisor"然后按回車,執行命令。

idoall.org

​ 在輸入框輸入SHOW DATABASES,可以看到我們剛才創建的數據庫

idoall.org

2.3、安裝cAdvisor 0.24.1

​ 創建cAdvisor容器,並連接到InfluxDB。​

docker service create --network logging \
--name cadvisor \
-p 8080:8080 \
--mode global \
--mount source=/var/run,type=bind,target=/var/run,readonly=false \
--mount source=/,type=bind,target=/rootfs,readonly=true \
--mount source=/sys,type=bind,target=/sys,readonly=true \
--mount source=/var/lib/docker,type=bind,target=/var/lib/docker,readonly=true \
google/cadvisor:v0.24.1 -storage_driver=influxdb -storage_driver_host=influxdb:8086 -storage_driver_db=cadvisor

--mode global 在集群中的每個節點創建一個服務,能夠收集每一台機器的docker性能數據

--mount 掛載本地docker socket用於監控docker性能

-storage_driver=influxdb 指定存儲驅動,使cadvisor將數據存儲到數據庫中,更多存儲插件,請參考這里

-storage_driver_host=influxdb:8086 InfluxDB數據庫的地址

-storage_driver_db=cadvisor 數據庫名稱

如果要指定用戶名可以用-storage_driver_user參數,默認是root

如果要指定密碼可以用-storage_driver_password參數,默認是root

cAdvisor運行以后,可以通過http://10.0.0.31:8080/查看到Docker運行的機器和容器情況。

idoall.org

​ 通過http://10.0.0.31:8080/docker/,可以看到Docker服務器的基本信息,如Host、鏡像數據、窗口數據等情況。多刷新幾次會發現,每次都是不同的Host Name,這是因為Docker Swarm會默認使用負載均衡到集群的任意一台機器上。稍后我們會介紹如何通過Grafana獲取指定機器的數據指標。 idoall.org

​ 驗證cAdvisor是否已經向InfluxDB存入數據。打開http://10.0.0.31:8083/的InfluxDB管理界面,點擊右上角Database切換到cadvisor數據庫,然后在輸入框輸入SHOW MEASUREMENTS可以看到已經創建了很多個表。

idoall.org

​ 假如我們要查詢CPU數據,可以在輸入框輸入select * from cpu_usage_system limit 100,可以看到結果集如下:

idoall.org

2.4、安裝Grafana

​ 安裝Grafana,連接到InfluxDB容器

docker service create --network logging \
-p 3000:3000 \
--name grafana \
grafana/grafana:4.0.2

默認admin的用戶名和密碼是admin/admin

也可以通過-e "GF_SECURITY_ADMIN_PASSWORD=passwd"參數來指定一個admin用戶名的密碼

2.5、登錄到Grfana,並配置數據源

​ 運行起Grfana容器后,通過瀏覽器打開http://10.0.0.31:3000,輸入用戶名admin,密碼admin進行登錄

idoall.org

​ 點擊左上角圖標, 選擇Data Sources, 然后點擊Add data source,添加完以上信息后,點擊Add,會看到提示Success Data source is working,如下圖

idoall.org

在Name輸入influxdb_source

在Type選擇InfluxDB

在Url輸入http://influxdb:8086

在Database輸入cadvisor

在User輸入root

在Password輸入root

2.6、配置Grafana的Docker監控

​ 現在是比較有趣的部分,讓我們來用Grafana繪制,cAdvisor存儲到InfluxDB的數據圖表。

2.6.1、Filesystem storage limit and usage

​ 點擊左上角的圖標,鼠標移動到Dashboard菜單,在展開的菜單中,點擊New。然后在切換的頁面中,點擊Graph

idoall.org

​ 在接下來的頁面中,點擊圖形的Panel Title,在彈出的菜單中選擇Edit

idoall.org

​ 在General面板中的Title處,輸入Filesystem storage limit and usage

idoall.org

​ 在Metrics面板的 Panel data source選擇Influxdb_source,點擊右側的Add query

idoall.org

A query:SELECT mean("value") FROM "fs_limit" WHERE "com.docker.swarm.node.id" = 'cjip6qvmbfvf4sk4wzc1a37h0' AND $timeFilter GROUP BY time($interval) fill(null)
B query:SELECT mean("value") FROM "fs_usage" WHERE "com.docker.swarm.node.id" = 'cjip6qvmbfvf4sk4wzc1a37h0' AND $timeFilter GROUP BY time($interval) fill(null)

其中cjip6qvmbfvf4sk4wzc1a37h0c1的nodeID,通過docker node ls可以獲取到

​ 在Axes面板,Left Y->Unit->data(Metric)->bytes, Right Y->Unit->data(Metric),最后點擊Graph右側的X進行關閉,就可以看到狀態了。

idoall.org

2.6.2、CPU Usage

​ 鼠標移到屏幕左側的三個小點,點擊Add Panel,創建一個Graph繪圖,點擊圖形的Panel Title,在彈出的菜單中選擇Edit,在General面板的Title輸入CPU Usage

​ 在Metrics面板選擇influxdb_source數據源。

idoall.org

​ query的內容如下:

A query:SELECT mean("value") FROM "cpu_usage_system" WHERE "com.docker.swarm.node.id" = 'cjip6qvmbfvf4sk4wzc1a37h0' AND "com.docker.swarm.task.name" = 'cadvisor.0' AND $timeFilter GROUP BY time($interval) fill(null)
B query:SELECT mean("value") FROM "cpu_usage_system" WHERE "com.docker.swarm.node.id" = 'cjip6qvmbfvf4sk4wzc1a37h0' AND "com.docker.swarm.task.name" = 'influxdb.1' AND $timeFilter GROUP BY time($interval) fill(null)

注意替換node.id

com.docker.swarm.task.name是選擇監控的容器名稱,示例中只監控運行在c1機器上的cadvisorinfluxdb服務

​ 在Axes面板,Left Y->Unit->time->Hertz(1/s), Right Y->time->Hertz(1/s),最后點擊Graph右側的X進行關閉,就可以看到狀態了,到現在我們已經產生兩個給圖如下:

idoall.org

2.6.3、Memory Usage

​ 點擊屏幕上的ADD ROW,繼續創建一個Graph繪圖,點擊圖形的Panel Title,在彈出的菜單中選擇Edit,在General面板的Title輸入Memory Usage

​ 在Metrics面板選擇influxdb_source數據源,query如下:

A query:SELECT mean("value") FROM "memory_usage" WHERE "com.docker.swarm.node.id" = 'cjip6qvmbfvf4sk4wzc1a37h0' AND "container_name" = 'cadvisor.0.4go1l7pbtq7gcgfxjcxhpzbtu' AND $timeFilter GROUP BY time($interval) fill(null)
B query:SELECT mean("value") FROM "memory_usage" WHERE "com.docker.swarm.node.id" = 'cjip6qvmbfvf4sk4wzc1a37h0' AND "container_name" = 'influxdb.1.5mfb5qoownsfms9vkfgowlsaq' AND $timeFilter GROUP BY time($interval) fill(null)

​ 在Axes面板,Left Y->Unit->data(Metric)->bytes, Right Y->Unit->data(Metric),最后點擊Graph右側的X進行關閉。

2.6.4、Network Traffic

​ 鼠標移到新創建這一行屏幕左側的三個小點,點擊Add Panel,創建一個Graph繪圖,點擊圖形的Panel Title,在彈出的菜單中選擇Edit,在General面板的Title輸入Network Traffic

​ 在Metrics面板選擇influxdb_source數據源,query如下:

A query:SELECT mean("value") FROM "rx_bytes" WHERE "com.docker.swarm.node.id" = 'cjip6qvmbfvf4sk4wzc1a37h0' AND $timeFilter GROUP BY time($interval) fill(null)
B query:SELECT mean("value") FROM "tx_bytes" WHERE "com.docker.swarm.node.id" = 'cjip6qvmbfvf4sk4wzc1a37h0' AND $timeFilter GROUP BY time($interval) fill(null)

​ 在Axes面板, Left Y->Unit->data rate->bytes/sec, Right Y->Unit->time->bytes/sec,最后點擊Graph右側的X進行關閉。

2.6.7、最終實現的監控效果圖

​ 最終效果圖如下:

idoall.org

​ 其他更多想法,可以根據上面的實例,在where條件中,選擇不同的主機,不同的容器進行特定指標的監控。

參考資料

https://github.com/google/cadvisor

https://www.brianchristner.io/how-to-setup-docker-monitoring/

https://github.com/vegasbrianc/docker-monitoring

http://docs.grafana.org/reference/graph/




博文作者:迦壹 博客地址:[cAdvisor0.24.1+InfluxDB0.13+Grafana4.0.2搭建Docker1.12.3 Swarm集群性能監控平台](http://idoall.org/blog/post/lion/cAdvisor0.24.1-InfluxDB0.13-Grafana4.0.2%E6%90%AD%E5%BB%BADocker1.12.3-Swarm%E9%9B%86%E7%BE%A4%E6%80%A7%E8%83%BD%E7%9B%91%E6%8E%A7%E5%B9%B3%E5%8F%B0) 轉載聲明:可以轉載, 但必須以超鏈接形式標明文章原始出處和作者信息及版權聲明,謝謝合作!



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM