摘要:目前項目內部署了,于是涉及到關于監控的事情,參考一些經典實例以及一些自己的想法,總結一下思路。監控方便,只能通過在宿主機本身查看對應容器的。
目前項目內部署了docker,于是涉及到關于監控的事情,參考一些經典實例以及一些自己的想法,總結一下思路。
1、關于監控的內容 監控宿主機本身監控宿主機本身還是比較簡單的,同其他服務器監控類似,對cpu、network、io、disk等做通用的檢查,這里不再細說。
額外的,因為是docker的宿主機,還應該監控 容器本身的一些指標,如 :
擁有的全部的容器數量;
正在運行的容器的數量;
dead容器的數量(如果此數量變化應該報警);
docker 本身的信息,如Storage Driver、Data Space Used、Data Space Total、Metadata Space Total、Metadata Space Used、client version、client api version、server version、servier api version 等;
監控容器docker容器通過namespace做資源隔離,通過cgroup來做資源限制。監控方便,只能通過在宿主機本身查看對應容器的cgroup stats。
具體大項有:
容器的本身信息,如名稱,ip、使用的鏡像、啟動時間、啟動命令等;
容器的狀態,如可先監控兩個量值,running or not running (當狀態變化時報警);
容器使用cpu的資源信息;
容器使用memory的資源信息;
容器的network io信息;
容器的disk信息;
2、關于監控項的獲取 宿主機本身宿主機的一般信息獲取 見zabbix監控項,不重復。
擁有的全部容器的數量:
docker ps -a -q | wc -l
正在運行的容器的數量:
docker ps -q | wc -l
非運行狀態的容器的數量:
docker ps -a | grep -v "Up " | grep -v "CONTAINER" | wc -l
docker本身信息,可從命令 docker version & docker info中獲取
監控容器1、容器本身信息 & 狀態:
從docker inspect 中獲取,簡單腳本如下:
#!/usr/bin/env python import commands import sys import types import json def get_container_info( container ): msg = commands.getoutput("docker inspect "+container) #return msg data = json.loads( msg ) return data[0] container = sys.argv[1] msg = get_container_info( container ) containerid = msg["Id"] image = msg["Image"] name = msg["Name"] ip = msg["NetworkSettings"]["IPAddress"] status = msg["State"]["Running"] startedat = msg["State"]["StartedAt"] print containerid, image, name, ip, status, startedat
2、 容器使用cpu情況:
從cpuacct中獲取相應的值,首先要獲取一個cpu周期的時間值,getconf CLK_TCK,默認為100,即100Hz,一個周期即為 1/100s = 10ms = 10^7 ns;
可以獲取cpuacct.usage、 cpuacct.stat ,但是具體怎么做對比,還得觀察。
理論上的計算方法為,在單位時間內,docker 容器對應的cpu使用的變化值 除以 總系統cpu時間的變化值 乘以 100%;其中,docker容器對應的cpu值可以從cgroup.cpuacct中的cpuacct.usage值得到,他的單位是納秒,10^9個納秒為1秒;系統的cpu總時間可以從/proc/stat中獲取,第一行中。以“cpu ”開頭那行,數值累加就是當前系統cpu總時間,需要注意的是,他的數值單位為 “cpu周期”,就是剛才獲取到的 1/CLK_TCK ,關于/proc/stat 的說明文檔:http://www.linuxhowtos.org/System/procstat.htm
從docker源碼中獲知,docker的stats計算方法和這個有點出入,它在此計算的基礎上,又乘以 cpu核數 得到最終結果,這個讓我有點不理解,和官方確認中。。。。。
已經和官方確認,只是雙方對“cpu利用率如何定義”的問題,我認為應該是平均利用率,官方認為應該是total cpu 利用率,好吧。。。。。 地址為: #issues 13626
相關源碼地址為:https://github.com/docker/docker/blob/0d445685b8d628a938790e50517f3fb9...
以下是用shell完成的模擬docker計算cpu利用率方法的小腳本:
#!/bin/sh ##echo user nice system idle iowait irq softirq CPULOG_1=$(cat /proc/stat | grep "cpu " | awk "{print $2" "$3" "$4" "$5" "$6" "$7" "$8}") Total_1=$(echo $CPULOG_1 | awk "{print $1+$2+$3+$4+$5+$6+$7}") CGROUP_USAGE_1=$(cat /cgroup/cpuacct/docker/55dec85d2e93c487fbeb1e85c9677e64dd1b4bdcc5be0e5f2539e52c87641d4e/cpuacct.usage) sleep 1 CPULOG_2=$(cat /proc/stat | grep "cpu " | awk "{print $2" "$3" "$4" "$5" "$6" "$7" "$8}") Total_2=$(echo $CPULOG_2 | awk "{print $1+$2+$3+$4+$5+$6+$7}") CGROUP_USAGE_2=$(cat /cgroup/cpuacct/docker/55dec85d2e93c487fbeb1e85c9677e64dd1b4bdcc5be0e5f2539e52c87641d4e/cpuacct.usage) CGROUP_USAGE=`expr $CGROUP_USAGE_2 - $CGROUP_USAGE_1` Total=`expr $Total_2 - $Total_1` CGROUP_RATE=`expr $CGROUP_USAGE*24/$Total/10000000*100|bc -l` echo $CGROUP_USAGE_1 , $CGROUP_USAGE_2 , $CGROUP_USAGE , $Total, $CGROUP_RATE
3、 容器使用memory情況:
從容器所在cgroup組中查看memory.stats信息,具體值 的信息如下
統計 描述 cache 頁緩存,包括 tmpfs(shmem),單位為字節 Rss 匿名和 swap 緩存,不包括 tmpfs(shmem),單位為字節 Mapped_file memory-mapped 映射的文件大小,包括 tmpfs(shmem),單位為字節 pgpgin 存入內存中的頁數 pgpgout 從內存中讀出的頁數 swap swap 用量,單位為字節 Active_anon 在活躍的最近最少使用(least-recently-used,LRU)列表中的匿名和 swap 緩存,包括 tmpfs(shmem),單位為字節 Inactive_anon 不活躍的 LRU 列表中的匿名和 swap 緩存,包括tmpfs(shmem),單位為字節 Active_file 活躍 LRU 列表中的 file-backed 內存,以字節為單位 Inactive_file 不活躍 LRU 列表中的 file-backed 內存,以字節為單位 unevictable 無法再生的內存,以字節為單位 hierarchical_memory_limit(重點) 包含 memory cgroup 的層級的內存限制,單位為字節 hierarchical_memsw_limit 包含 memory cgroup 的層級的內存加 swap 限制,單位為字節
4、容器網絡io情況: 可以執行命令: docker exec ifconfig eth0 看 Rx和Tx的值。
5、磁盤io情況 從blkio 中獲取,相關參考:
blkio.time:統計cgroup對設備的訪問時間,按格式device_types:node_numbers milliseconds讀取信息即可,以下類似。
blkio.io_serviced:統計cgroup對特定設備的IO操作(包括read、write、sync及async)次數,格式device_types:node_numbers operation number
blkio.sectors:統計cgroup對設備扇區訪問次數,格式device_types:node_numbers sector_count
blkio.io_service_bytes:統計cgroup對特定設備IO操作(包括read、write、sync及async)的數據量,格式device_types:node_numbers operation bytes
blkio.io_queued:統計cgroup的隊列中對IO操作(包括read、write、sync及async)的請求次數,格式number operation
blkio.io_service_time:統計cgroup對特定設備的IO操作(包括read、write、sync及async)時間(單位為ns),格式device_types:node_numbers operation time
blkio.io_merged:統計cgroup 將 BIOS 請求合并到IO操作(包括read、write、sync及async)請求的次數,格式number operation
blkio.io_wait_time:統計cgroup在各設備中各類型IO操作(包括read、write、sync及async)在隊列中的等待時間(單位ns),格式device_types:node_numbers operation time
6、磁盤使用情況,我以為只需要監控docker pool space的狀況即可,默認建立100G的空間供docker使用,可通過docker info來查看,一個典型的輸出如下:
Containers: 11 Images: 181 Storage Driver: devicemapper Pool Name: docker-8:5-7471107-pool Pool Blocksize: 65.54 kB Backing Filesystem: extfs Data file: Metadata file: Data Space Used: 7.846 GB Data Space Total: 107.4 GB Metadata Space Used: 15.92 MB Metadata Space Total: 2.147 GB Udev Sync Supported: true Library Version: 1.02.89-RHEL6 (2014-09-01) Execution Driver: native-0.2 Kernel Version: 2.6.32-431.el6.x86_64 Operating System:CPUs: 24 Total Memory: 62.87 GiB Name: jx-lj-opweb01.lianjia.com ID: QTML:RSSS:IKAX:FRIP:4YEQ:IXWX:ROMV:APZD:RV4M:ISY2:QW2D:VMXW
7、在前期可以先重點監控 宿主機情況 & 容器的memory狀態,其他狀態可記錄,監控值可稍后商榷。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26404.html
摘要:健康監控檢查,可以說是集群中最重要的一部分了。我們在這里沒有使用推薦的方式,我們自己將其與內部的系統做了結合,通過來對整個集群進行監控報警自動化操作。 在公司內部,基于kubernetes實現了簡單的docker應用集群系統,拿出來和大家分享下,在這個系統中,實現了應用的自動部署、動態擴容、節點切換、健康檢查、AB式版本更新等功能,也歡迎大家將各自的實現也分享給我。 整體架構 整體架構...
摘要:健康監控檢查,可以說是集群中最重要的一部分了。我們在這里沒有使用推薦的方式,我們自己將其與內部的系統做了結合,通過來對整個集群進行監控報警自動化操作。 在公司內部,基于kubernetes實現了簡單的docker應用集群系統,拿出來和大家分享下,在這個系統中,實現了應用的自動部署、動態擴容、節點切換、健康檢查、AB式版本更新等功能,也歡迎大家將各自的實現也分享給我。 整體架構 整體架構...
摘要:是一個用這種很谷歌的完美方式來運行大規模分布式系統的工具。我們正在采用這種谷歌方式來運行軟件,加上現代化的架構,令更加穩定,更加易于管理?,F目前,不足的工作運行在公有云上。 showImg(https://segmentfault.com/img/bVAcRD); Mirantis, Intel和Google結成聯盟,準備在Google鏡像中重做OpenStack,將OpenStack...
摘要:今天為大家介紹的容器管理工具是數人云基于最新技術的一個開源項目。今天從技術角度分享一下數人云從設計到開發的實踐之路。從控制面板說起數人云是一家開源技術的公司,最初希望做一個開源項目,相當于做了一次內部創新。數人云的技術棧是,正好與十分密切。 小數表示最近霧鎖京城真是有些可怕,迷迷蒙蒙讓人看不清遠處,大家外出也要注意防霾哦! 容器管理面板Crane,是 數人云的第一個開源項目,那...
摘要:說起,必須要介紹是什么東西,為什么中小企業私有云適合使用??匆幌卢F在的架構圖開個玩笑。上面這四點導致我們必須要統一架構,最終把整個業務系統遷移到基于的類似于的私有云的平臺。 本文系 ArchSummit 大會 CODING 工程師王振威演講實錄。 showImg(https://dn-coding-net-production-pp.qbox.me/c2f81423-54b9-4a7b...
閱讀 1310·2021-11-16 11:45
閱讀 2233·2021-11-02 14:40
閱讀 3872·2021-09-24 10:25
閱讀 3029·2019-08-30 12:45
閱讀 1255·2019-08-29 18:39
閱讀 2468·2019-08-29 12:32
閱讀 1588·2019-08-26 10:45
閱讀 1917·2019-08-23 17:01