kubernetes+docker監控之簡介
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
ofollow,noindex" target="_blank"> 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 |
容器啟動時間,毫秒 |
本文轉自開源中國- kubernetes+docker監控之簡介