kubernetes+docker監控之簡介

kubernetes+docker監控

   Docker的監控原則:根據docker官方聲明,一個容器不建議跑多個進程,因此不建議在容器中使用agent進行監控(zabbix等),agent應該運行在宿主機,經過cgroup或是docker api獲取監控數據。node

 

一、監控分類介紹:

 

①、自行開發:

  經過調用docker的api接口,獲取數據、處理、展現,這裏不作介紹。git

  例如:github

   1)、愛奇藝參照cadvisor開發的dadvisor,數據寫入graphite等同於cadvisor+influxdb,愛奇藝的dadvisor並無開源web

②、Docker——cadvisor:

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

    只需在宿主機上部署cAdvisor容器,用戶就可經過Web界面或REST服務訪問當前節點和容器的性能數據(CPU、內存、網絡、磁盤、文件系統等等),很是詳細。數據庫

    默認cAdvisor是將數據緩存在內存中,數據展現能力有限;它也提供不一樣的持久化存儲後端支持,能夠將監控數據保存、彙總到Google BigQuery、InfluxDB或者Redis之上。後端

    新的Kubernetes版本里,cadvior功能已經被集成到了kubelet組件中api

    須要注意的是,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查詢數據,並展現

 

二、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平臺, 建議一套K8s,只運行一套heapster容器(heapster1.0版本後內部分爲event和metric兩個進程)。

    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

容器啓動時間,毫秒

瞬時值

下篇,將帶來【Docker監控——Cadvisor+InfluxDB+Grafana搭建過程】,敬請期待!

    著做權歸perofu全部 ,嚴禁轉載!!!

相關文章
相關標籤/搜索