cAdvisor+InfluxDB+Grafan 監控docker

目錄

 


容器的監控方案其實有很多,有docker自身的docker stats命令、有Scout、有Data Dog等等,本文主要和大家分享一下比較經典的容器開源監控方案組合:cAdvisor+InfluxDB+Grafan

回到頂部

一、概念

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

1). InfluxDB是什麼

        nfluxDB是用GO語言編寫的一個開源分佈式時序、事件和指標數據庫,無需外部的依賴,類似的數據庫有Elasticsearch、Graphite等等

 

        InfluxDB主要的功能:

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

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

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

 

        InfluxDB的主要特點:

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

            可拓展的

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

            原生的HTTP支持,內置HTTP API

            強大的類SQL語法

            自帶管理界面,方便使用

 

2). cAdvisor是什麼

        它是Google用來監測單節點的資源信息的監控工具。Cadvisor提供了一目瞭然的單節點多容器的資源監控功能。Google的Kubernetes中也缺省地將其作爲單節點的資源監控工具,各個節點缺省會被安裝上Cadvisor

        cAvisor是利用docker status的數據信息,瞭解運行時容器資源使用和性能特徵的一種工具

        cAdvisor的容器抽象基於Google的lmctfy容器棧,因此原生支持Docker容器並能夠“開箱即用”地支持其他的容器類型。

        cAdvisor部署爲一個運行中的daemon,它會收集、聚集、處理並導出運行中容器的信息。

        這些信息能夠包含容器級別的資源隔離參數、資源的歷史使用狀況、反映資源使用和網絡統計數據完整歷史狀況的柱狀圖。

 

        cAdvisor功能:

            展示Host和容器兩個層次的監控數據

            展示歷史變化數據

 

        溫馨提示:

            由於 cAdvisor 提供的操作界面略顯簡陋,而且需要在不同頁面之間跳轉,並且只能監控一個 host,這不免會讓人質疑它的實用性。

            但 cAdvisor 的一個亮點是它可以將監控到的數據導出給第三方工具,由這些工具進一步加工處理。

            我們可以把 cAdvisor 定位爲一個監控數據收集器,收集和導出數據是它的強項,而非展示數據

 

3). Grafana是什麼

        Grafana是一個可視化面板(Dashboard),有着非常漂亮的圖表和佈局展示,功能齊全的度量儀表盤和圖形編輯器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作爲數據源

 

        Grafana主要特性:

            靈活豐富的圖形化選項;

            可以混合多種風格;

            支持白天和夜間模式;

            支持多個數據源;

 

溫馨提示:

    在這套監控方案中:InfluxDB用於數據存儲,cAdvisor用戶數據採集,Grafana用於數據展示

回到頂部

二、單節點部署

溫馨提示:
服務器信息:
主機IP:192.168.15.129
主機名:master1
docker版本:18.06.1-ce

1. 下載鏡像(可做可不做,在創建容器的時候會如果本地沒有會自動下載)

1

2

3

4

5

6

7

8

9

10

11

# 下載鏡像

[root@master1 ~]# docker pull tutum/influxdb

[root@master1 ~]# docker pull google/cadvisor

[root@master1 ~]# docker pull grafana/grafana

 

# 查看鏡像

[root@master1 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

grafana/grafana     latest              7038dbc9a50c        7 days ago          223MB

google/cadvisor     latest              75f88e3ec333        10 months ago       62.2MB

tutum/influxdb      latest              c061e5808198        2 years ago         290MB

2. 創建InfluxDB容器

1

2

3

4

5

6

7

8

9

10

11

12

13

# 創建InfluxDB容器

[root@master1 ~]# docker run -itd -p 8083:8083 -p 8086:8086 --name influxdb tutum/influxdb

 

參數詳解:

-itd:已交互模式運行容器,並分配僞終端,並在後臺啓動容器

-p:端口映射 8083端口爲influxdb後臺控制端口,8086端口是influxdb的數據端口

--name:給容器起個名字

tutum/influxdb:以這個鏡像運行容器(本地有使用本地,沒有先去下載然後啓動容器)

 

# 查看容器

[root@master1 ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES

f01c5e754bc0        tutum/influxdb      "/run.sh"           3 seconds ago       Up 2 seconds        0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb

配置InfluxDB

登錄InfluxDB的8083端口,也是管理平臺設置管理員用戶名密碼,並添加數據庫

登錄URL:http://192.168.15.129:8083

設置管理員用戶名密碼,並添加數據庫

3. 創建cadvisor容器

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

# 創建cadvisor容器

[root@master1 ~]# docker run -itd --name cadvisor -p 8080:8080 --mount type=bind,src=/,dst=/rootfs,ro --mount type=bind,src=/var/run,dst=/var/run --mount type=bind,src=/sys,dst=/sys,ro --mount type=bind,src=/var/lib/docker/,dst=/var/lib/docker,ro google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_user=root -storage_driver_password=root -storage_driver_host=192.168.15.129:8086

 

參數詳解:

-itd:已交互模式運行容器,並分配僞終端,並在後臺啓動容器

-p: 端口映射 8080爲cadvisor的管理平臺端口

--name:給容器起個名字

--mout:把宿主機的相文目錄綁定到容器中,這些目錄都是cadvisor需要採集的目錄文件和監控內容

google/cadvisor:以這個鏡像運行容器(本地有使用本地,沒有先去下載然後啓動容器)

-storage_driver:需要指定cadvisor的存儲驅動這裏是influxdb

-storage_driver_db:需要指定存儲的數據庫

-storage_driver_user:influxdb數據庫的用戶名(測試可以加可以不加)

-storage_driver_password:influxdb數據庫的密碼(測試可以加可以不加)

-storage_driver_host:influxdb數據庫的地址和端口

 

# 查看容器

[root@master1 ~]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES

7c2005bb79d1        google/cadvisor     "/usr/bin/cadvisor -…"   3 seconds ago       Up 2 seconds        0.0.0.0:8080->8080/tcp                           cadvisor

2fa150d3c52b        tutum/influxdb      "/run.sh"                10 minutes ago      Up 10 minutes       0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb

查看cadvisor管理平臺
登錄URL:http://192.168.15.129:8080

登錄數據庫查看有沒有把採集的數據寫入(SHOW MEASUREMENTS執行這個命令)

得到上面的結果說明已經採集到數據並且寫入到數據庫了

4. 創建grafana容器

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# 創建grafana容器

[root@master1 ~]# docker run -itd --name grafana  -p 3000:3000 grafana/grafana

 

參數詳解:

-itd:已交互模式運行容器,並分配僞終端,並在後臺啓動容器

-p: 端口映射 3000爲grafana的管理平臺端口

--name:給容器起個名字

grafana/grafana:以這個鏡像運行容器(本地有使用本地,沒有先去下載然後啓動容器)

 

# 查看容器

[root@master1 ~]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES

57f335665902        grafana/grafana     "/run.sh"                2 seconds ago       Up 1 second         0.0.0.0:3000->3000/tcp                           grafana

7c2005bb79d1        google/cadvisor     "/usr/bin/cadvisor -…"   15 minutes ago      Up 15 minutes       0.0.0.0:8080->8080/tcp                           cadvisor

2fa150d3c52b        tutum/influxdb      "/run.sh"                25 minutes ago      Up 25 minutes       0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb

配置granfana
登錄URL:http://192.168.15.129:3000
默認用戶名:admin
默認密碼:admin
溫馨提示:
首次登錄會提示修改密碼纔可以登錄,我這裏修改密碼爲admin

 得到上面的結果表示整個監控已經部署完成並可以對基礎監控進行實施監控,具體需要監控什麼,grafana怎麼樣排版,怎樣起名字,根據個人的業務需求來進行設置即可 

回到頂部

三、Swarm多節點部署

剛剛上面的例子是在一臺主機上監控一臺主機的容器信息,這裏我們要使用Swarm的集羣部署多臺主機容器之間的監控
溫馨提示:
主機IP:192.168.15.129 主機名:master1 角色:Swarm的主 granfana容器 influxdb容器 cadvisor容器
主機IP:192.168.15.130 主機名:node1 角色:Swarm的node節點 cadvisor容器
主機IP:192.168.15.131 主機名:node2 角色:Swarm的node節點 cadvisor容器

1. 準備工作

1

2

3

4

5

6

7

8

9

10

11

12

13

14

# 創建InfluxDB的宿主機目錄掛載到容器

[root@master1 ~]# mkdir -p /opt/influxdb

 

# 下載鏡像(可做可不做,在創建容器的時候會如果本地沒有會自動下載)

[root@master1 ~]# docker pull tutum/influxdb

[root@master1 ~]# docker pull google/cadvisor

[root@master1 ~]# docker pull grafana/grafana

 

# 查看鏡像

[root@master1 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

grafana/grafana     latest              7038dbc9a50c        7 days ago          223MB

google/cadvisor     latest              75f88e3ec333        10 months ago       62.2MB

tutum/influxdb      latest              c061e5808198        2 years ago         290MB

2. 編寫創建容器的yml文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

# 編寫docker-compose.yml文件

[root@master1 ~]# mkdir test

[root@master1 test]# cat docker-compose.yml

version: '3.7'

 

services:

  influx:

    image: tutum/influxdb

    ports:

      "8083:8083"

      "8086:8086"

    volumes:

      "/opt/influxdb:/var/lib/influxdb"

    deploy:

      replicas: 1

      placement:

        constraints: [node.role==manager]

 

  grafana:

    image: grafana/grafana

    ports:

      "3000:3000"

    depends_on:

      "influx"

    deploy:

      replicas: 1

      placement:

        constraints: [node.role==manager]

 

  cadvisor:

    image: google/cadvisor

    ports:

      "8080:8080"

    hostname'{{.Node.Hostname}}'

    command: -logtostderr -docker_only -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influx:8086

    volumes:

      - /:/rootfs:ro

      /var/run:/var/run:rw

      /sys:/sys:ro

      /var/lib/docker/:/var/lib/docker:ro

    depends_on:

      - influx

    deploy:

      mode: global

 

volumes:

  influx:

    driver: local

  grafana:

    driver: local

3. 創建Swarm集羣

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

# 在master1上執行

[root@master1 test]# docker swarm init --advertise-addr 192.168.15.129

Swarm initialized: current node (xtooqr30af6fdcu51jzdv79wh) is now a manager.

 

To add a worker to this swarm, run the following command:

    # 這裏已經提示使用下面的命令在node節點上執行就可以加入集羣(前提docker服務一定是啓動的)

    docker swarm join --token SWMTKN-1-3yyjydabd8v340kptius215s29rbsq8tviy00s08g6md1y25k2-81tp7lpv114a393g4wlgx4a30 192.168.15.129:2377

 

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

 

 

# 在node1和node2上執行

[root@node1 ~]# docker swarm join --token SWMTKN-1-3yyjydabd8v340kptius215s29rbsq8tviy00s08g6md1y25k2-81tp7lpv114a393g4wlgx4a30 192.168.15.129:2377

This node joined a swarm as a worker

 

[root@node2 ~]# docker swarm join --token SWMTKN-1-3yyjydabd8v340kptius215s29rbsq8tviy00s08g6md1y25k2-81tp7lpv114a393g4wlgx4a30 192.168.15.129:2377

This node joined a swarm as a worker.

 

# 在master1上查看集羣主機

[root@master1 test]# docker node ls

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION

xtooqr30af6fdcu51jzdv79wh *   master1             Ready               Active              Leader              18.06.1-ce

y24c6sfs3smv5sd5h7k66x8zv     node1               Ready               Active                                  18.06.1-ce

k554xe59lcaeu1suaguvxdnel     node2               Ready               Active                                  18.06.1-ce

4. 創建集羣容器

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

# 創建集羣容器

[root@master1 test]# docker stack deploy -c docker-compose.yml swarm-monitor

Creating network swarm-monitor_default

Creating service swarm-monitor_cadvisor

Creating service swarm-monitor_influx

Creating service swarm-monitor_grafana

 

 

# 查看創建的容器

[root@master1 test]# docker service  ls

ID                  NAME                     MODE                REPLICAS            IMAGE                    PORTS

wn36f7be6i5a        swarm-monitor_cadvisor   global              3/3                 google/cadvisor:latest   *:8080->8080/tcp

ufn3lqbhbww3        swarm-monitor_grafana    replicated          1/1                 grafana/grafana:latest   *:3000->3000/tcp

lf0z6dp1u8sn        swarm-monitor_influx     replicated          1/1                 tutum/influxdb:latest    *:8083->8083/tcp, *:8086->8086/tcp

 

# 查看容器的服務

[root@master1 test]# docker service ps swarm-monitor_cadvisor

ID                  NAME                                               IMAGE                    NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS

vy1kqg5u8x3f        swarm-monitor_cadvisor.k554xe59lcaeu1suaguvxdnel   google/cadvisor:latest   node2               Running             Running about a minute ago                      

a08b5bysra3d        swarm-monitor_cadvisor.y24c6sfs3smv5sd5h7k66x8zv   google/cadvisor:latest   node1               Running             Running about a minute ago                      

kkca4kyojgr2        swarm-monitor_cadvisor.xtooqr30af6fdcu51jzdv79wh   google/cadvisor:latest   master1             Running             Running 59 seconds ago  

 

[root@master1 test]# docker service ps swarm-monitor_grafana

ID                  NAME                      IMAGE                    NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS

klyjl7rxzmoz        swarm-monitor_grafana.1   grafana/grafana:latest   master1             Running             Running about a minute ago       

 

[root@master1 test]# docker service ps swarm-monitor_influx

ID                  NAME                     IMAGE                   NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS

pan5yvwq7b79        swarm-monitor_influx.1   tutum/influxdb:latest   master1             Running             Running about a minute ago    

5. 訪問web測試
1) 訪問influxdb並創建數據庫
登錄InfluxDB的8083端口,並添加數據庫
登錄URL:http://192.168.15.129:8083

2) 訪問cadvisor
登錄URL:http://192.168.15.129:8080
登錄數據庫查看有沒有把採集的數據寫入

 

3) 訪問grafana並配置
登錄URL:http://192.168.15.129:3000
默認用戶名:admin
默認密碼:admin
溫馨提示:
首次登錄會提示修改密碼纔可以登錄,我這裏修改密碼爲admin

這個動圖比較長 主要是對grafana的配置操作,注意裏面的alpine_test容器不是和集羣一塊創建的是我單獨創建的  

做到以上的效果,說明已經部署成功了,具體的配置方案就是因需求而異了

轉自:https://www.cnblogs.com/zhujingzhi/p/9844558.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章