如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)

這篇文章主要介紹了如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng),具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)專注于遼寧企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,成都做商城網(wǎng)站。遼寧網(wǎng)站建設(shè)公司,為遼寧等地區(qū)提供建站服務(wù)。全流程專業(yè)公司,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

隨著線上服務(wù)的全面docker化,對docker容器的監(jiān)控就很重要了。SA的監(jiān)控系統(tǒng)是物理機的監(jiān)控,在一個物理機跑多個容器的情況下,我們是沒法從一個監(jiān)控圖表里面區(qū)分各個容器的資源占用情況的。

為了更好的監(jiān)控容器運行情況,更重要的是為了后續(xù)的容器動態(tài)調(diào)度算法需要的大量運行時數(shù)據(jù)的搜集,經(jīng)過調(diào)研后,基于CAdvisor + InfluxDB + Grafana搭建了這套容器監(jiān)控系統(tǒng)。

1、容器監(jiān)控方案選擇

在調(diào)研容器監(jiān)控系統(tǒng)的時候,其實是有很多選擇的,比如docker自帶的docker stats命令,Scout,Data Dog,Sysdig Cloud,Sensu Monitoring Framework,CAdvisor等。

通過docker stats命令可以很方便的看到當(dāng)前宿主機上所有容器的CPU,內(nèi)存以及網(wǎng)絡(luò)流量等數(shù)據(jù)。但是docker stats命令的缺點就是統(tǒng)計的只是當(dāng)前宿主機的所有容器,而獲取的監(jiān)控數(shù)據(jù)是實時的,沒有地方存儲,也沒有報警功能。

如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)

而Scout(鏈接:https://scoutapp.com/)、Sysdig Cloud,Data Dog雖然都提供了較完善的服務(wù),但是它們都是托管的服務(wù)而且都收費,于是也不在考慮范圍之內(nèi)。Sensu Monitoring Framework(鏈接:https://sensu.io/)集成度較高,也免費,但是部署過于復(fù)雜。最后,我們選擇了CAdvisor做容器監(jiān)控工具。

CAdvisor谷歌出品,優(yōu)點是開源產(chǎn)品,監(jiān)控指標(biāo)齊全,部署方便,而且有官方的docker鏡像。缺點是集成度不高,默認(rèn)只在本地保存2分鐘數(shù)據(jù)。不過在調(diào)研之后發(fā)現(xiàn)可以加上InfluxDB存儲數(shù)據(jù),對接Grafana展示圖表,比較便利地搭建好了容器監(jiān)控系統(tǒng),數(shù)據(jù)收集和圖表展示效果良好,對系統(tǒng)性能也幾乎沒有什么影響。

2、容器資源監(jiān)控-CAdvisor

2.1 部署與運行

CAdvisor是一個容器資源監(jiān)控工具,包括容器的內(nèi)存,CPU,網(wǎng)絡(luò)IO,磁盤IO等監(jiān)控,同時提供了一個WEB頁面用于查看容器的實時運行狀態(tài)。CAdvisor默認(rèn)存儲2分鐘的數(shù)據(jù),而且只是針對單物理機。不過,CAdvisor提供了很多數(shù)據(jù)集成接口,支持InfluxDB,redis,Kafka,Elasticsearch等集成,可以加上對應(yīng)配置將監(jiān)控數(shù)據(jù)發(fā)往這些數(shù)據(jù)庫存儲起來。

由于CAdvisor已經(jīng)容器化,部署和運行很簡單,執(zhí)行如下命令即可:

如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)

運行之后,就可以在瀏覽器打開http://ip:8080查看宿主機的容器監(jiān)控數(shù)據(jù)了。

2.2 集成InfluxDB

如前面說到,CAdvisor默認(rèn)只在本機保存最近2分鐘的數(shù)據(jù),為了持久化存儲數(shù)據(jù)和統(tǒng)一收集展示監(jiān)控數(shù)據(jù),需要將數(shù)據(jù)存儲到InfluxDB中。InfluxDB是一個時序數(shù)據(jù)庫,專門用于存儲時序相關(guān)數(shù)據(jù),很適合存儲CAdvisor的數(shù)據(jù)。而且,CAdvisor本身已經(jīng)提供了InfluxDB的集成方法,在啟動容器時指定配置即可。

我們使用了管理容器來管理CAdvisor,修改后的啟動配置如下。主要指定了存儲引擎為InfluxDB,以及指定InfluxDB的HTTP API的地址(這里用到了自建DNS的域名 influxdb.service.consul以避免暴露外部端口),還有對應(yīng)的數(shù)據(jù)庫和用戶名密碼。

{  "binds": [  "/:/rootfs:ro",  "/var/run:/var/run:rw",  "/sys:/sys:ro",  "/home/docker/var/lib/docker/:/var/lib/docker:ro"  ],  "image": "forum-cadvisor",  "labels": {  "type": "cadvisor"  },  "command": " -docker_only=true -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb.service.consul:8086 -storage_driver_user=testuser -storage_driver_password=testpwd",  "tag": "latest",  "hostname": "cadvisor-{{lan_ip}}"  }

注意到我們使用了一個自己的forum-cadvisor鏡像來代替官方的cadvisor鏡像,這是為了修復(fù)cadvisor一些問題以及基于管理方便性的考慮。

2.3 CAdvisor存在的問題

1)運行報錯問題

運行最新的CAdvisor容器的時候,發(fā)現(xiàn)容器有如下的錯誤日志:

如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)

這個問題是因為沒有安裝 findutils 工具導(dǎo)致的。

2)統(tǒng)計不到容器內(nèi)存數(shù)據(jù)

Debian默認(rèn)沒有開啟 CGroup Memory的支持,CAdvisor默認(rèn)情況下無法統(tǒng)計到容器內(nèi)存數(shù)據(jù),需要修改GRUB啟動參數(shù),修改文件/etc/default/grub,加入下面這行:

GRUB_CMDLINE_LINUX=" cgroup_enable=memory"

然后更新grub2重啟即可。

如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)

3)網(wǎng)絡(luò)流量監(jiān)控數(shù)據(jù)錯誤問題

在CAdvisor上線一段時間后,順安發(fā)現(xiàn)容器的網(wǎng)絡(luò)數(shù)據(jù)跟實際情況不符,并查找資料后發(fā)現(xiàn)問題是因為CAdvisor默認(rèn)只統(tǒng)計第一個網(wǎng)卡的流量,而在我們的容器中是有多個overlay網(wǎng)絡(luò)的,需要統(tǒng)計容器中所有的網(wǎng)卡流量。于是我修改了CAdvisor統(tǒng)計網(wǎng)絡(luò)流量部分的代碼并重新編譯了一個版本在線上使用,修改的代碼在這里。

最后,我們自定義的鏡像文件 forum-cadvisor.Dockerfile 是這樣的(src/cadvisor是修改后重新編譯的cadvisor可執(zhí)行文件):

如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)

2.4 CAdvisor原理簡介

CAdvisor運行時掛載了宿主機根目錄,docker根目錄等多個目錄,由此可以從中讀取容器的運行時信息。docker基礎(chǔ)技術(shù)有Linux namespace,Control Group(CGroup),AUFS等,其中CGroup用于系統(tǒng)資源限制和優(yōu)先級控制的。

宿主機的/sys/fs/cgroup/目錄下面存儲的就是CGroup的內(nèi)容了,CGroup包括多個子系統(tǒng),如對塊設(shè)備的blkio,cpu,內(nèi)存,網(wǎng)絡(luò)IO等限制。Docker在CGroup里面的各個子系統(tǒng)中創(chuàng)建了docker目錄,而CAdvisor運行時掛載了宿主機根目錄和 /sys目錄,從而CAdvisor可以讀取到容器的資源使用記錄。

比如下面可以看到容器b1f257當(dāng)前時刻的CPU的使用統(tǒng)計。CGroup詳細(xì)介紹可以參見DOCKER基礎(chǔ)技術(shù):LINUX CGROUP(鏈接https://coolshell.cn/articles/17049.html)

# cat /sys/fs/cgroup/cpu/docker/b1f25723c5c3a17df5026cb60e1d1e1600feb293911362328bd17f671802dd31/cpuacct.stat user 95191 system 5028

而容器網(wǎng)絡(luò)流量CAdvisor是從/proc/PID/net/dev中讀取的,如上面的容器b1f257進(jìn)程在宿主機的PID為6748,可以看到容器所有網(wǎng)卡的接收和發(fā)送流量以及錯誤數(shù)等。CAdvisor定期讀取對應(yīng)目錄下面的數(shù)據(jù)并定期發(fā)送到指定的存儲引擎存儲,而本地會默認(rèn)存儲最近2分鐘的數(shù)據(jù)并提供UI界面查看。

# cat /proc/6748/net/dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed eth0: 6266314 512 0 0 0 0 0 0 22787 292 0 0 0 0 0 0 eth2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 lo: 5926805 5601 0 0 0 0 0 0 5926805 5601 0 0 0 0 0 0

3、容器監(jiān)控數(shù)據(jù)存儲-InfluxDB

InfluxDB(鏈接:https://docs.influxdata.com/influxdb/v1.3/)是一個開源的分布式時序數(shù)據(jù)庫,使用GO語言開發(fā)。特別適合用于時序類型數(shù)據(jù)存儲,CAdvisor搜集的容器監(jiān)控數(shù)據(jù)用InfluxDB存儲就很合適,而且CAdvisor本身就提供了InfluxDB的支持,集成起來非常方便。

由于線上服務(wù)都docker化了,所以InfluxDB我們也是選擇用容器來跑,通過容器管理系統(tǒng)統(tǒng)一管理。容器運行時的核心配置如下,主要掛載了數(shù)據(jù)庫目錄,以及配置了consul的服務(wù)注冊,這樣,CAdvisor由于和InfluxDB處于同一個overlay子網(wǎng)中,不需要再開放端口給外部訪問,CAdvisor直接通過influxdb.service.consul:8086即可連接到InfluxDB。

如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)

為了存儲CAdvisor的數(shù)據(jù),需要預(yù)先創(chuàng)建好數(shù)據(jù)庫并配置用戶名密碼以及相關(guān)權(quán)限。InfluxDB提供了一套influx的CLI,跟MySQL client很相似。另外,InfluxDB的數(shù)據(jù)庫操作語言InfluxQL跟SQL語法也基本一致。進(jìn)入InfluxDB容器,運行下面命令創(chuàng)建數(shù)據(jù)庫和用戶密碼并授權(quán)。

# influx Connected to http://localhost:8086 version 1.3.5 InfluxDB shell version: 1.3.5 > create database cadvisor ## 創(chuàng)建數(shù)據(jù)庫cadvisor > show databases name: databases name ---- _internal cadvisor > CREATE USER testuser WITH PASSWORD 'testpwd' ## 創(chuàng)建用戶和設(shè)置密碼 > GRANT ALL PRIVILEGES ON cadvisor TO testuser ## 授權(quán)數(shù)據(jù)庫給指定用戶 > CREATE RETENTION POLICY "cadvisor_retention" ON "cadvisor" DURATION 30d REPLICATION 1 DEFAULT ## 創(chuàng)建默認(rèn)的數(shù)據(jù)保留策略,設(shè)置保存時間30天,副本為1

配置成功后,可以看到CAdvisor會通過InfluxDB的HTTP API自動創(chuàng)建好數(shù)據(jù)表,并將數(shù)據(jù)發(fā)送到InfluxDB存儲起來。

如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)

3.2 InfluxDB重要概念

influxdb有一些重要概念:database,timestamp,field key, field value, field set,tag key,tag value,tag set,measurement, retention policy ,series,point,下面簡要說明一下:

  • database:數(shù)據(jù)庫,如之前創(chuàng)建的數(shù)據(jù)庫 cadvisor。InfluxDB不是CRUD數(shù)據(jù)庫,更像是一個CR-ud數(shù)據(jù)庫,它優(yōu)先考慮的是增加和讀取數(shù)據(jù)而不是更新刪除數(shù)據(jù)的性能。

  • timestamp:時間戳,因為InfluxDB是時序數(shù)據(jù)庫,它的數(shù)據(jù)里面都有一列名為time的列,存儲記錄生成時間。如 rx_bytes 中的 time 列,存儲的就是時間戳。

  • fields: 包括field key,field value和field set幾個概念。field key是字段名,在rx_bytes表中,字段名為 value。field value是字段值,如 17858781633,1359398等。而field set是字段集合,由field key和field value構(gòu)成,如rx_bytes中的字段集合如下:

value = 17858781633 value
  • tag key和tag value構(gòu)成。InfluxDB中標(biāo)簽是可選的,不過標(biāo)簽是有索引的。如果查詢中經(jīng)常用的字段,建議設(shè)置為標(biāo)簽而不是字段。標(biāo)簽相當(dāng)于傳統(tǒng)數(shù)據(jù)庫中有索引的列。

  • retention policy: 數(shù)據(jù)保留策略,cadvisor的保留策略為cadvisor_retention,存儲30天,副本為1。一個數(shù)據(jù)庫可以有多個保留策略。

  • measurement:類似傳統(tǒng)數(shù)據(jù)看的表,是字段,標(biāo)簽以及time列的集合。

  • series:共享同一個retention policy,measurement以及tag set的數(shù)據(jù)集合。

3.3 InfluxDB的特色功能

InfluxDB作為時序數(shù)據(jù)庫,相比傳統(tǒng)數(shù)據(jù)庫它有很多特色功能,比如獨有的一些特色函數(shù)和連續(xù)查詢功能。關(guān)于InfluxDB的更多詳細(xì)內(nèi)容可以參見官方文檔。

  1. 特色函數(shù):有一些聚合類函數(shù)如FILL()用于填充數(shù)據(jù), INTEGRAL()計算字段所覆蓋的曲面面積,SPREAD()計算表中最大與最小值的差值, STDDEV()計算字段標(biāo)準(zhǔn)差,MEAN()計算平均值, MEDIAN()計算中位數(shù),SAMPLE()函數(shù)用于隨機取樣以及DERIVATIVE()計算數(shù)據(jù)變化比等。

  2. 連續(xù)查詢:InfluxDB獨有的連續(xù)查詢功能可以定期的縮小取樣,就原數(shù)據(jù)庫的數(shù)據(jù)縮小取樣后存儲到指定的新的數(shù)據(jù)庫或者新的數(shù)據(jù)表中,在歷史數(shù)據(jù)統(tǒng)計整理時特別有用。

4、容器監(jiān)控數(shù)據(jù)可視化-Grafana

通過CAdvisor搜集容器的監(jiān)控數(shù)據(jù),存儲到InfluxDB中,接下來就剩數(shù)據(jù)可視化的問題了。畢竟,一個可視化的圖表可以很方便快速的看到容器的一些問題。圖表展示我選擇的是Grafana。

Grafana是一個開源的數(shù)據(jù)監(jiān)控分析可視化平臺,支持多種數(shù)據(jù)源配置(支持的數(shù)據(jù)源包括InfluxDB,MySQL,Elasticsearch,OpenTSDB,Graphite等)和豐富的插件及模板功能,支持圖表權(quán)限控制和報警。

Grafana同樣也是以容器方式運行,容器啟動配置如下,主要是掛載了grafana的數(shù)據(jù)和日志目錄,設(shè)置了管理員的密碼,并開放了8888端口作為grafana的訪問端口:

如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)

啟動之后就可以在http://IP:8888/頁面去配置數(shù)據(jù)源了,一個示例如下:

如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)

配置完數(shù)據(jù)源,就可以添加Panel來實現(xiàn)數(shù)據(jù)可視化了。Grafana的圖表功能十分強大,在配置數(shù)據(jù)查詢語句的時候也是十分智能,會對數(shù)據(jù)源,數(shù)據(jù)表,數(shù)據(jù)字段自動提示,而且對InfluxDB的所有函數(shù)都有分類可以直接選取配置。需要注意的一點就是在配置字節(jié)類數(shù)據(jù)(比如網(wǎng)卡接收流量 rx_bytes 和 內(nèi)存使用量 memory_usage)的時候單位要選 data(IEC)這個類別。

如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)

使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng),是可行而且是較為簡便的方式。這三個組件全部以容器的方式運行,也符合我們線上服務(wù)皆為容器的理念。目前已經(jīng)全面上線該監(jiān)控系統(tǒng),運行正常,數(shù)據(jù)可視化效果良好。除了用于可視化監(jiān)控之外,這些數(shù)據(jù)后續(xù)還會用于系統(tǒng)異常檢測算法和容器智能調(diào)度算法中。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

文章題目:如何使用CAdvisor+InfluxDB+Grafana構(gòu)建容器資源監(jiān)控系統(tǒng)
轉(zhuǎn)載注明:http://bm7419.com/article26/pscjjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、定制開發(fā)、域名注冊企業(yè)建站、外貿(mào)網(wǎng)站建設(shè)商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)