容器監(jiān)控實踐—cAdvisor

概述

為了解決docker stats的問題(存儲、展示)疲恢,谷歌開源的cadvisor誕生了瓷胧,cadvisor不僅可以搜集一臺機器上所有運行的容器信息,還提供基礎(chǔ)查詢界面和http接口杂数,方便其他組件如Prometheus進行數(shù)據(jù)抓取瘸洛,或者cadvisor + influxdb + grafna搭配使用。

cAdvisor可以對節(jié)點機器上的資源及容器進行實時監(jiān)控和性能數(shù)據(jù)采集那伐,包括CPU使用情況囚玫、內(nèi)存使用情況读规、網(wǎng)絡(luò)吞吐量及文件系統(tǒng)使用情況

Cadvisor使用Go語言開發(fā),利用Linux的cgroups獲取容器的資源使用信息铃在,在K8S中集成在Kubelet里作為默認啟動項,官方標配阳液。

安裝

  • 1.使用二進制部署
下載二進制:https://github.com/google/cadvisor/releases/latest
本地運行:./cadvisor  -port=8080 &>>/var/log/cadvisor.log
  • 2.使用docker部署
docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest
注意:

在Ret Hat,CentOS, Fedora 等發(fā)行版上需要傳遞如下參數(shù)揣炕,因為 SELinux 加強了安全策略:

--privileged=true
  
啟動后訪問:http://127.0.0.1:8080查看頁面,/metric查看指標
image
* 常見指標:http://yjph83.iteye.com/blog/2394091
* 指標分析:https://luoji.live/cadvisor/cadvisor-source-code-metrics-20160927.html`
  • 3.kubernetes中使用
* Daemonset部署: https://github.com/google/cadvisor/tree/master/deploy/kubernetes
* kubelet自帶cadvisor監(jiān)控所有節(jié)點鹰溜,可以設(shè)置--cadvisor-port=8080指定端口(默認為4194)
* kubernetes 在2015-03-10 這個提交(Run cAdvisor inside the Kubelet. Victor Marmol 2015/3/10 13:39)中cAdvisor開始集成在kubelet中丁恭,目前的1.6及以后均存在

注意:

從 v1.7 開始牲览,Kubelet metrics API 不再包含 cadvisor metrics,而是提供了一個獨立的 API 接口:

* Kubelet metrics: http://127.0.0.1:8001/api/v1/proxy/nodes/<node-name>/metrics

* Cadvisor metrics: http://127.0.0.1:8001/api/v1/proxy/nodes/<node-name>/metrics/cadvisor

cadvisor 監(jiān)聽的端口將在 v1.12 中刪除第献,建議所有外部工具使用 Kubelet Metrics API 替代庸毫。

常用搭配

1.cAdvisor+Heapster+influxdb

image

Heapster:在k8s集群中獲取metrics和事件數(shù)據(jù),寫入InfluxDB理逊,heapster收集的數(shù)據(jù)比cadvisor多盒揉,卻全,而且存儲在influxdb的也少刚盈。

Heapster將每個Node上的cAdvisor的數(shù)據(jù)進行匯總藕漱,然后導(dǎo)到InfluxDB。

Heapster的前提是使用cAdvisor采集每個node上主機和容器資源的使用情況肋联,
再將所有node上的數(shù)據(jù)進行聚合。

這樣不僅可以看到Kubernetes集群的資源情況韧涨,
還可以分別查看每個node/namespace及每個node/namespace下pod的資源情況。
可以從cluster如孝,node娩贷,pod的各個層面提供詳細的資源使用情況。
  • InfluxDB:時序數(shù)據(jù)庫但荤,提供數(shù)據(jù)的存儲涧至,存儲在指定的目錄下。

  • Grafana:提供了WEB控制臺南蓬,自定義查詢指標赘方,從InfluxDB查詢數(shù)據(jù)并展示。

cAdvisor+Prometheus+Grafana

訪問http://localhost:8080/metrics窄陡,可以拿到cAdvisor暴露給 Prometheus的數(shù)據(jù)

image

其他內(nèi)容參考后續(xù)的prometheus文章

深入解析

cAdvisor結(jié)構(gòu)圖


image

cadvisor地址:https://github.com/google/cadvisor

主函數(shù)邏輯:(cadvisor/cadvisor.go)


image.png

通過new出來的memoryStorage以及sysfs實例涂圆,創(chuàng)建一個manager實例币叹,manager的interface中定義了許多用于獲取容器和machine信息的函數(shù)

核心函數(shù):


image.png

生成manager實例的時候,還需要傳遞兩個額外的參數(shù)踩衩,分別是

  • maxHousekeepingInterval:存在內(nèi)存的時間贩汉,默認60s
  • allowDynamicHousekeeping:是否允許動態(tài)配置housekeeping,也就是下一次開始搜集容器信息的時間褐鸥,默認true

因為需要暴露服務(wù)策菜,所以在handler文件中酒贬,將上面生成的containerManager注冊進去(cadvisor/http/handler.go)翠霍,之后就是啟動manager蠢莺,運行其Start方法,開始搜集信息锄弱,存儲信息的循環(huán)操作祸憋。

以memory采集為例:


image

具體的信息還是通過runc/libcontainer獲得,libcontainer是對cgroup的封裝掸鹅。在/sys/fs/cgroup/memory中包含大量的了memory相關(guān)的信息(參考docker原生監(jiān)控文章)

image

Prometheus的收集器(cadvisor/metrics/prometheus.go)


image

更多源碼參考文章:https://luoji.live/categories/cadvisor/

總結(jié)

優(yōu)缺點:

  • 優(yōu)點:谷歌開源產(chǎn)品巍沙,監(jiān)控指標齊全荷鼠,部署方便,而且有官方的docker鏡像允乐。
  • 缺點:是集成度不高牍疏,默認只在本地保存1分鐘數(shù)據(jù),但可以集成InfluxDB等存儲

備注:

愛奇藝參照cadvisor開發(fā)的dadvisor麸澜,數(shù)據(jù)寫入graphite,
等同于cadvisor+influxdb编矾,但dadvisor并沒有開源

本文為容器監(jiān)控實踐系列文章馁害,完整內(nèi)容見:container-monitor-book

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市凹蜈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌履植,老刑警劉巖悄晃,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異庶近,居然都是意外死亡眷蚓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門叉钥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來校读,“玉大人,你說我怎么就攤上這事蛾洛⊙丬剑” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵谎碍,是天一觀的道長洞焙。 經(jīng)常有香客問我,道長澡匪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任疑苔,我火速辦了婚禮惦费,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘薪贫。我一直安慰自己,他們只是感情好季惯,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布臀突。 她就那樣靜靜地躺著贾漏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梳码。 梳的紋絲不亂的頭發(fā)上伍掀,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音濒蒋,去河邊找鬼把兔。 笑死,一個胖子當著我的面吹牛围橡,可吹牛的內(nèi)容都是我干的缕贡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼收擦,長吁一口氣:“原來是場噩夢啊……” “哼禀酱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剂跟,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辽剧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怕轿,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡辟拷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年衫冻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邻奠。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡为居,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贰镣,到底是詐尸還是另有隱情忍抽,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布鸠项,位于F島的核電站,受9級特大地震影響祟绊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嘉熊,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一扬舒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孕惜,春花似錦、人聲如沸衫画。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弥激。三九已至,卻和暖如春四濒,著一層夾襖步出監(jiān)牢的瞬間职辨,已是汗流浹背戈二。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腾供,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓伴鳖,卻偏偏與公主長得像徙硅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子须肆,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容