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】
③、Docker——Cadvisor+InfluxDB+Grafana:
Cadvisor :将資料,寫入InfluxDB
InfluxDB :時序資料庫,提供資料的存儲,存儲在指定的目錄下
Grafana :提供了WEB控制台,自定義查詢名額,從InfluxDB查詢資料,并展示。
此組合僅是監控Docker,不含kubernetes
④、Kubernetes——Heapster+InfluxDB+Grafana:
Heapster:在k8s叢集中擷取metrics和事件資料,寫入InfluxDB,heapster收集的資料比cadvisor多,卻全,而且存儲在influxdb的也少。
InfluxDB:時序資料庫,提供資料的存儲,存儲在指定的目錄下。
Grafana:提供了WEB控制台,自定義查詢名額,從InfluxDB查詢資料,并展示。
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 |
說是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監控之簡介