cAdvisor+InfluxDB+Grafana 監控Docker

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

一、概念

1). InfluxDB是什么nfluxDB是用GO語言編寫的一個開源分布式時序、事件和指標數據庫,無需外部的依賴,類似的數據庫有Elasticsearch、Graphite等等InfluxDB主要的功能:基于時間序列:支持與時間有關的相關函數(如最大、最小、求和等)可度量性:可以實時對大量數據進行計算基于事件:它支持任意的事件數據InfluxDB的主要特點:無結構(無模式):可以是任意數量的列可拓展的支持min, max, sum, count, mean, median 等一系列函數,方便統計原生的HTTP支持,內置HTTP API強大的類SQL語法自帶管理界面,方便使用2). cAdvisor是什么它是Google用來監測單節點的資源信息的監控工具。Cadvisor提供了一目了然的單節點多容器的資源監控功能。Google的Kubernetes中也缺省地將其作為單節點的資源監控工具,各個節點缺省會被安裝上CadvisorcAvisor是利用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. 下載鏡像(可做可不做,在創建容器的時候會如果本地沒有會自動下載)

# 下載鏡像
[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容器

# 創建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容器

# 創建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容器

# 創建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. 準備工作

# 創建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文件

# 編寫docker-compose.yml文件
[root@master1 ~]# mkdir test
[root@master1 test]# cat docker-compose.yml 
version: '3.7'services:influx:image: tutum/influxdbports: - "8083:8083"- "8086:8086"volumes: - "/opt/influxdb:/var/lib/influxdb"deploy: replicas: 1placement: constraints: [node.role==manager]grafana: image: grafana/grafanaports: - "3000:3000"depends_on:- "influx"deploy: replicas: 1placement: constraints: [node.role==manager]cadvisor:image: google/cadvisorports:- "8080:8080"hostname: '{{.Node.Hostname}}'command: -logtostderr -docker_only -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influx:8086volumes: - /:/rootfs:ro- /var/run:/var/run:rw- /sys:/sys:ro- /var/lib/docker/:/var/lib/docker:rodepends_on: - influxdeploy: mode: globalvolumes: influx:driver: localgrafana: driver: local

3. 創建Swarm集群

# 在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:2377To 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. 創建集群容器

# 創建集群容器
[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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450380.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450380.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450380.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言return關鍵字

return 用來終止一個函數并返回其后面跟著的值。return (Val);//此括號可以省略。但一般不省略,尤其在返回一個表達式的值時。return 可以返回些什么東西呢?看下面例子:char * Func(void){char str[30];…r…

win7旗艦版怎么降級到專業版

一、操作準備及注意事項 1、UltraISO光盤制作工具9.5 2、備份C盤及桌面文件 二、win7旗艦版改成專業版的步驟 1、當前系統為Win7 SP1 64位旗艦版; 2、按WinR打開運行,輸入regedit打開注冊表編輯器,定位到HKEY_LOCAL_MACHINE\Software\Microso…

JPA criteria 查詢:類型安全與面向對象

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 JPA的標準查詢,名為:JPA criteria查詢. 相比JPQL,其優勢是類型安全,更加的面向對象.使用標準查詢,開發人員可在編譯的時候就檢查 查詢的…

Algs4-1.4.18數組的局部最小元素

1.4.18數組的局部最小元素。編寫一個程序&#xff0c;給定一個含有N個不同整數的數組&#xff0c;找到一個局部最小元素:滿足a[i]<a[i-1],且a[i]<a[i1]的索引i。程序在最壞情況下所需的比較次數為~2lgN。答&#xff1a;檢查數組的中間值a[N/2]以及和它相鄰的元素a[N/2-1]…

編程技能和做員工的技能——哪個更重要?

摘要&#xff1a;不管我們程序員如何認識這個問題&#xff0c;如果你想在給別人編程打工中獲得事業成功&#xff0c;編程技能不是第一重要的。學會如何做一個好的員工才是重要的&#xff0c;甚至是非常重要的。從最最基本的層面上講&#xff0c;每個員工都應該為最求兩種基本的…

nginx-exporter安裝使用

一、沒有vts的啟動方式 #nginx_exporter -telemetry.address:9113 -nginx.scrape_uri"http://127.0.0.1:10000/nginx_statusnginx_exporter -telemetry.address:9113 -nginx.scrape_uri"https://xx.xx.xx.xx:18443" -insecure #端口9113應該是nginx_exporter監…

spring data jpa 的 in 查詢 Specification 實現

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 只是一個簡單需求&#xff1a; 查詢所有部門id 屬于 idList 的數據 Page<WorkWeight> page workWeightRepository.findAll(new…

在移動互聯網上賺錢,行不行

移動互聯網已被證實是互聯網產業發展的大趨勢。不過&#xff0c;究竟如何賺錢&#xff0c;對海外企業與中國企業來說都是難題。本月初&#xff0c;幾位業界大佬與風投來了一番討論&#xff0c;議題還是一個“在移動互聯網上賺錢&#xff0c;行還是不行”。 百度試圖通過用戶習慣…

計算機網絡知識簡單介紹

一、網絡基礎 1.網絡指的是什么&#xff1f; 計算機與計算機之間通過物理鏈接介質&#xff08;網絡設備&#xff09;連接到一起。 計算機與計算機之間基于網絡協議通信&#xff08;網絡協議就相當于計算機界的英語&#xff09; 2.osi七層協議&#xff1a; 互聯網協議按照功能不…

Linux下安裝FFmpeg

FFmpeg官網&#xff1a;http://www.ffmpeg.org 官網介紹 FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure…

HTTP協議狀態碼詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 狀態碼含義100客戶端應當繼續發送請求。這個臨時響應是用來通知客戶端它的部分請求已經被服務器接收&#xff0c;且仍未被拒絕。客戶端應…

【Python web 開發】viewset 實現商品詳情頁的接口

我們如何來完成商品詳情頁的接口呢&#xff1f; 首先要配置一個商品詳情的url 按照我們正常的接口配法 &#xff0c;應該是后面要加一個id 的&#xff0c;為什么這里沒有加id 呢? ,應該是rooter register 的作用吧&#xff0c;等我在學習一遍基礎再來回答&#xff1f; 那么我…

Ignite中的機器學習介紹

為什么80%的碼農都做不了架構師&#xff1f;>>> 本系列共6篇文章&#xff0c;會通過一些代碼示例&#xff0c;講解如何在Ignite中使用機器學習庫&#xff0c;本文是本系列的第一篇。 從Ignite的2.4版本開始&#xff0c;機器學習就可以用于生產環境了。在這個版本中…

4G發牌或提早 電信聯通面臨艱難抉擇

曾幾何時遙不可及的4G&#xff0c;上馬的時間可能要比預期來的要早。今年3月&#xff0c;工信部部長苗圩表示&#xff0c;預計國內需要2-3年才會發放4G牌照。話音猶在耳&#xff0c;苗圩部長9月11日表示&#xff0c;“工信部已決定將于一年左右的時間發放TD-LTE牌照”。 工信部…

mysql 的 sql 執行計劃詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 引言&#xff1a; 實際項目開發中&#xff0c;由于我們不知道實際查詢的時候數據庫里發生了什么事情&#xff0c;數據庫軟件是怎樣掃描…

2018-10-28

我的博客即將入駐“云棲社區”&#xff0c;誠邀技術同仁一同入駐。

win10+vscode部署java開發環境

目錄 Java開發插件配置&#xff1a;調試&#xff1a;快捷鍵&#xff1a;啟動配置文件launch.json:啟動配置說明&#xff1a;Launch:Attach:User Setting:遇到的問題&#xff1a;參考&#xff1a;Java開發插件配置&#xff1a; Microsoft有個官方的插件Java Extension Pack&…

類的帶參方法有哪幾部分構成?

類的帶參方法有哪幾部分構成&#xff1f; 發布于2015-11-08 12:27 main函數可以不帶參數,也可以帶參數&#xff0c;這個參數可以認為是 main函數的形式參數。C語言規定main函數的參數只能有兩個&#xff0c;還規定argc(第一個形參)必須是整型變量,argv( 第二個形參)必須是指向字…

新架構讓數據中心猶如PC

摘要&#xff1a;隨著VL2網絡拓撲結構帶來了對等帶寬&#xff0c;大量數據可以存放在遠方的數據中心&#xff0c;訪問起來卻猶如它們就在本地&#xff0c;這將對數據中心的架構產生重大影響。Todd Hoff參加了Hot Interconnects大會&#xff0c;對微軟VL2架構做了詳細解讀。CSDN…

mongodb分片概念和原理-實戰分片集群

一、分片分片是一種跨多臺機器分發數據的方法。MongoDB使用分片來支持具有非常大的數據集和高吞吐量操作的部署。問題&#xff1a;具有大型數據集或高吞吐量應用程序的數據庫系統可能會挑戰單個服務器的容量。例如&#xff0c;高查詢率會耗盡服務器的CPU容量。工作集大小大于系…