天天看點

kubernetes+docker監控之簡介kubernetes+docker監控

Docker的監控原則:根據docker官方聲明,一個容器不建議跑多個程序,是以不建議在容器中使用agent進行監控(zabbix等),agent應該運作在主控端,通過cgroup或是docker api擷取監控資料。

kubernetes+docker監控

Docker的監控原則:根據docker官方聲明,一個容器不建議跑多個 程序,是以不建議在容器中使用agent進行監控(zabbix等),agent應該運作在主控端,通過cgroup或是docker api擷取監控資料。

1、監控分類介紹:

①、自行開發:

通過調用docker的api接口,擷取資料、處理、展示,這裡不做介紹。

例如:

1)、愛奇藝參照cadvisor開發的dadvisor,資料寫入graphite,等同于cadvisor+influxdb,愛奇藝的dadvisor并沒有開源

②、Docker——cadvisor:

Google的 cAdvisor 是另一個知名的開源容器監控工具。

隻需在主控端上部署cAdvisor容器,使用者就可通過Web界面或REST服務通路目前節點和容器的性能資料(CPU、記憶體、網絡、磁盤、檔案系統等等),非常詳細。

預設cAdvisor是将資料緩存在記憶體中,資料展示能力有限;它也提供不同的持久化存儲後端支援,可以将監控資料儲存、彙總到Google BigQuery、InfluxDB或者Redis之上。

新的Kubernetes版本裡,cadvior功能已經被內建到了kubelet元件中

需要注意的是,cadvisor的web界面,隻能看到單前實體機上容器的資訊,其他機器是需要通路對應ip的url,數量少時,很有效果,當數量多時,比較麻煩,是以需要把cadvisor的資料進行彙總、展示,就看【cadvisor+influxdb+grafana】

kubernetes+docker監控之簡介kubernetes+docker監控

③、Docker——Cadvisor+InfluxDB+Grafana:

Cadvisor :将資料,寫入InfluxDB

InfluxDB :時序資料庫,提供資料的存儲,存儲在指定的目錄下

Grafana :提供了WEB控制台,自定義查詢名額,從InfluxDB查詢資料,并展示。

此組合僅是監控Docker,不含kubernetes

kubernetes+docker監控之簡介kubernetes+docker監控

④、Kubernetes——Heapster+InfluxDB+Grafana:

Heapster:在k8s叢集中擷取metrics和事件資料,寫入InfluxDB,heapster收集的資料比cadvisor多,卻全,而且存儲在influxdb的也少。

InfluxDB:時序資料庫,提供資料的存儲,存儲在指定的目錄下。

Grafana:提供了WEB控制台,自定義查詢名額,從InfluxDB查詢資料,并展示。

kubernetes+docker監控之簡介kubernetes+docker監控

2、Cadvisor+Heapster+InfluxDB+Grafana的注意事項:

①、Cadvisor注意事項:

Cadvisor,隻需要在kubelet指令中,啟用Cadvisor,和配置相關資訊,即可。

不需要作為pod或是指令啟動

--cadvisor-port=4194 --storage-driver-db="cadvisor" --storage-driver-host="localhost:8086"

②、InfluxDB注意事項:

1)、Influxdb必須是0.8.8版本的,否則,Cadvisor的日志會出現:

E0704 14:29:14.163238 05655 memory.go:94] failed to write stats to influxDb - Server returned (404): 404 page not found
http://blog.csdn.net/llqkk/article/details/50555442

說是Cadvisor不支援Influxdb的0.9版本,是以這裡使用0.8.8的,【ok了】

不同版本的Cadvisor和Influxdb對照表(測試ok):

Cadvisor版本 Influxdb版本
0.7.1 0.8.8
0.23.2 0.9.6(以上)

【Cadvisor和Influxdb的版本不對應,就可以在Cadvisor看到404的報錯】

2)、influxdb的資料,需要定期清理,單台Cadvisor,半天的資料就有600M

#機關:【小時:h】、【天:d】

#删除一小時内:

delete from /^stats.*/ where time > now() - 1h

#删除一小時外:

delete from /^stats.*/ where time < now() - 1h

3)、關于influxdb可用性的問題,可以寫腳本,定期檢查是否有相關的資料庫和表,沒有就出現建立

#檢查是否有某個庫

curl -G 'http://192.168.16.100:8086/db?u=root&p=root&q=list+databases&pretty=true'

curl -G 'http://192.168.16.100:8086/db?u=root&p=root&q=show+databases&pretty=true'

#檢查某庫中的表【points部分】

curl -G 'http://192.168.16.100:8086/db/cadvisor/series?u=root&p=root&q=list+series&pretty=true'

#建立庫:

庫名:cadvisor

curl "http://www.perofu.com:8086/db?u=root&p=root" -d "{\"name\": \"cadvisor\"}"

③、Grafana注意事項:

Grafana的資料檢索,很需要花功夫,可以檢視官網相關的語句,也可以直接借用其他人的模闆

Influxdb查詢語句:

https://docs.influxdata.com/influxdb/v0.8/api/query_language/

④、Heapster注意事項:

對于較大規模的k8s叢集,heapster目前的cache方式會吃掉大量記憶體。

因為要定時擷取整個叢集的容器資訊,資訊存儲在記憶體會成為問題,再加上heaspter要支援api擷取臨時metrics。

如果将heapster以pod方式運作,很容易出現OOM。是以目前建議關掉cache,并以standalone的方式獨立出k8s平台,建議每個node都單獨運作容器

heapster最大的好處是其抓取的監控資料可以按pod,container,namespace等方式分組,

這樣就能進行監控資訊的隐私化,即每個k8s的使用者隻能看到自己的應用的資源使用情況。

heapster收集的資料比cadvisor多,卻全,而且存儲在influxdb的也少,雖是Google的,但是作用卻不盡相同

Heapster容器單獨啟動時,會連接配接influxdb,并建立k8s資料庫

heapster收集的資料metric的分類有兩種,【grafana搜尋時,要注意】

1)、cumulative :聚合的是【累計值】,包括cpu使用時間、網絡流入流出量,

2)、gauge :聚合的是【瞬時值】,包括記憶體使用量

參考:

https://github.com/kubernetes/heapster/blob/master/docs/storage-schema.md
描述 分類
cpu/limit cpu預設值,yaml檔案可設定 瞬時值
cpu/node_reservation kube節點的cpu預設值,類似cpu/limit
cpu/node_utilization cpu使用率
cpu/request cpu請求資源,yaml檔案可設定
cpu/usage cpu使用 累計值
cpu/usage_rate cpu使用速率
filesystem/limit 檔案系統限制
filesystem/usage 檔案系統使用
memory/limit 記憶體限制,yaml檔案可設定
memory/major_page_faults 記憶體主分頁錯誤
memory/major_page_faults_rate 記憶體主分頁錯誤速率
memory/node_reservation 節點記憶體預設值
memory/node_utilization 節點記憶體使用率
memory/page_faults 記憶體分頁錯誤
memory/page_faults_rate 記憶體分頁錯誤速率
memory/request 記憶體申請,yaml檔案可設定
memory/usage 記憶體使用
memory/working_set 記憶體工作使用
network/rx 網絡接收總流量
network/rx_errors 網絡接收錯誤數 不确定
network/rx_errors_rate 網絡接收錯誤數速率
network/rx_rate 網絡接收速率
network/tx 網絡發送總流量
network/tx_errors 網絡發送錯誤數
network/tx_errors_rate 網絡發送錯誤數速率
network/tx_rate 網絡發送速率
uptime 容器啟動時間,毫秒

本文轉自開源中國-

kubernetes+docker監控之簡介