摘要:它也給它們帶來了內(nèi)核維護(hù)的每個(gè)的計(jì)數(shù)器。管理員期望每個(gè)容器的資源計(jì)數(shù)器也在里面。在的最新版本,工程師已經(jīng)開始構(gòu)建并發(fā)布一個(gè)名為的二進(jìn)制包,它目前是的一部分,它是的。因此,像這樣做這些文件時(shí)可讀的文本格式,盡管不是人類可讀的。
應(yīng)用資源計(jì)數(shù)實(shí)例注:該文作者是 Jeremy Eder,原文地址為 nsinit: per-container resource monitoring of Docker containers on RHEL/Fedora
基于 *NIX 系統(tǒng)的管理員習(xí)慣于查看系統(tǒng)各處的資源計(jì)數(shù)器,在某些地方,像 /proc, /sys 以及最近的 /cgroup 或是 /sys/fs/cgroup。RHEL6 版本廣泛的采用了 Control Groups (cgroups),cgroups 已經(jīng)連續(xù)穩(wěn)定的運(yùn)行了幾年,并且通過審查在 Fedora 版本中也是一樣穩(wěn)定的。
實(shí)現(xiàn) cgroups 不僅僅是讓系統(tǒng)管理員在多個(gè)邏輯分區(qū)中劃分一個(gè)獨(dú)立的 OS。它也給它們帶來了內(nèi)核維護(hù)的每個(gè) cgroup 的計(jì)數(shù)器。除了常用的用例,比如服務(wù)質(zhì)量保障或是收費(fèi)。
Docker 的獨(dú)特轉(zhuǎn)折隨著采用 Linux 容器技術(shù)的數(shù)據(jù)提升(Docker 是把一些成熟技術(shù)封裝進(jìn)一個(gè)令人欽佩的可用性包中)。管理員期望每個(gè)容器的資源計(jì)數(shù)器也在里面。非常幸運(yùn)的是,因?yàn)?Docker 嚴(yán)重依賴 Cgroups,很多系統(tǒng)管理員熟悉的計(jì)數(shù)器是可以使用的。他們可能受益于一些可用性改進(jìn)。但是如果你通過 cgroup VFS 來探索,你可以非常容易的挖掘出它們。
我應(yīng)該注意到某些層次結(jié)構(gòu)和命令在 RHEL 和 Fedora 是特定的。因此你或許需要為你的系統(tǒng)定制某些路徑或包名。
在 Fedora 的最新版本,工程師已經(jīng)開始構(gòu)建并發(fā)布一個(gè)名為 “nsinit” 的二進(jìn)制包,它目前是 libcontainer 的一部分,它是 Docker 的 execution driver。 nsinit 是一個(gè)非常強(qiáng)大的 debugging 工具,系統(tǒng)管理員不僅僅可以看到每個(gè)容器的資源計(jì)數(shù)器,還可以看到容器的運(yùn)行期配置和“跳進(jìn)”容器。
怎樣使用 nsinit 的功能首先你應(yīng)該從 Fedora 獲取一個(gè)副本,或者構(gòu)建一個(gè)你自己的。自己構(gòu)建是一項(xiàng)沒有必要復(fù)雜操作。因此我們非常高興他們開始為 Fedora 構(gòu)建它以至于你可以這樣做:
# yum install --enablerepo=updates-testing golang-github-docker-libcontainer $ rpm -qf `which nsinit` golang-github-docker-libcontainer-1.1.0-7.git29363e2.fc20.x86_64 # nsinit NAME: nsinit - A new cli application USAGE: nsinit [global options] command [command options] [arguments...] VERSION: 0.1 COMMANDS: exec 在一個(gè)容器中執(zhí)行一個(gè)新命令 init 在命名空間運(yùn)行初始化進(jìn)程 stats 顯示容器的統(tǒng)計(jì)信息 config 顯示容器的配置信息 nsenter 初始化進(jìn)程用于進(jìn)入一個(gè)已經(jīng)存在的命名空間 pause 暫停容器的進(jìn)程 unpause 解除暫停的容器進(jìn)程 help, h 顯示命令列表或是一個(gè)命令的幫助信息
我覆蓋測試了 nsinit 的大部分有用的功能;config, stats 和 exec。
注意:nsinit 當(dāng)前要求你在容器的狀態(tài)目錄運(yùn)行,因此到目前為止,我們假設(shè)你的所有運(yùn)行的命令都在那里。
因此,像這樣做:
# docker ps -q 4caad549289 # CID=`docker ps -q` # cd /var/lib/docker/execdriver/native/$CID* # ll total 8 -rw-r-xr-x. 1 root root 3826 Sep 1 20:11 container.json -rw-r--r--. 1 root root 114 Sep 1 20:11 state.json
這些文件時(shí)可讀的文本格式,盡管不是人類可讀的。nsinit 可以完美的打印這些文件。比如,一個(gè) nsinit 配置文件的刪減版本輸出(完整的版本在這里)。注意,你可以通過使用 docker inspect 獲取更多的這些信息(但不是全部)。
# nsinit config { "mount_config": { "mounts": [ { "type": "bind", "source": "/var/lib/docker/init/dockerinit-1.1.1", "destination": "/.dockerinit", "private": true }, { "type": "bind", "source": "/etc/resolv.conf", "destination": "/etc/resolv.conf", "private": true },"mount_label": "system_u:object_r:svirt_sandbox_file_t:s0:c631,c744" }, "hostname": "4caad5492898", "environment": [ "HOME=/", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/goroot/bin:/gopath/bin", "HOSTNAME=4caad5492898", "DEBIAN_FRONTEND=noninteractive", "GOROOT=/goroot", "GOPATH=/gopath" ], "namespaces": { "NEWIPC": true, "NEWNET": true, "NEWNS": true, "NEWPID": true, "NEWUTS": true }, "capabilities": [ "CHOWN", "DAC_OVERRIDE", "FOWNER", "MKNOD", "NET_RAW", "SETGID", "SETUID", "SETFCAP", "SETPCAP", "NET_BIND_SERVICE", "SYS_CHROOT", "KILL" ], "networks": [ { "type": "loopback", "address": "127.0.0.1/0", "gateway": "localhost", "mtu": 1500 }, { "type": "veth", "bridge": "docker0", "veth_prefix": "veth", "address": "172.17.0.6/16", "gateway": "172.17.42.1", "mtu": 1500 } ], "cgroups": { "name": "4caad5492898f1a4230353de15e2acfc05809c69d05ec7289c6a14ef6d57b195", "parent": "docker", "allowed_devices": [ "process_label": "system_u:system_r:svirt_lxc_net_t:s0:c631,c744", "restrict_sys": true }
統(tǒng)計(jì)模式更有趣,nsinit 讀取 cgroup 中 CPU 和 memory 使用計(jì)數(shù)器。網(wǎng)絡(luò)統(tǒng)計(jì)信息來自于 /sys/class/net/
{ "network_stats": { "rx_bytes": 180568, "rx_packets": 89, "tx_bytes": 28316, "tx_packets": 92 }, "cgroup_stats": { "cpu_stats": { "cpu_usage": { "total_usage": 985559718, "percpu_usage": [ 43613750, 79789656, 132486590, 78759739, 49063680, 60703059, 36277458, 35919550, 36329424, 20096103, 8148695, 25279255, 0, 0, 0, 6144761, 14814784, 2612915, 95162480, 33853872, 114861235, 71115914, 6533416, 33993382 ], "usage_in_kernelmode": 510000000, "usage_in_usermode": 440000000 }, "throlling_data": {} }, "memory_stats": { "usage": 27992064, "max_usage": 29020160, "stats": { "active_anon": 4411392, "active_file": 3149824, "cache": 22278144, "hierarchical_memory_limit": 9223372036854775807, "hierarchical_memsw_limit": 9223372036854775807, "inactive_anon": 0, "inactive_file": 19128320, "mapped_file": 3723264, "pgfault": 94783, "pgmajfault": 25, "pgpgin": 19919, "pgpgout": 13902, "rss": 4460544, "rss_huge": 2097152, "swap": 0, "total_active_anon": 4411392, "total_active_file": 3149824, "total_cache": 22278144, "total_inactive_anon": 0, "total_inactive_file": 19128320, "total_mapped_file": 3723264, "total_pgfault": 94783, "total_pgmajfault": 25, "total_pgpgin": 19919, "total_pgpgout": 13902, "total_rss": 4460544, "total_rss_huge": 2097152, "total_swap": 0, "total_unevictable": 0, "unevictable": 0 }, "failcnt": 0 }, "blkio_stats": {} } }
nsenter 通常用于在一個(gè)已經(jīng)存在的容器中運(yùn)行一個(gè)命令,像這樣:
# nsenter -m -u -n -i -p -t 19119 bash
19119 是容器中一個(gè)進(jìn)程的 PID。丑陋啊,nsinit 使得這個(gè)稍微容易些(恕我直言)。
# nsinit exec cat /etc/hostname 4caad549289 # nsinit exec bash bash-4.2# exit
當(dāng)你在調(diào)試每個(gè)容器的 QoS 實(shí)現(xiàn)時(shí),nsinit 的功能和統(tǒng)計(jì)信息報(bào)告是非常有用的。實(shí)現(xiàn)/校驗(yàn) 資源天花板/保障,對(duì)你的容器正在做的事情有一個(gè)完全的了解。
這個(gè)區(qū)域是在快速移動(dòng)的。。。我想介紹另外兩個(gè)工具,最后應(yīng)該比 nsinit 有更廣闊的適用性。
Google 已經(jīng)發(fā)布了一個(gè)叫做 cAdvisor 的項(xiàng)目,提供了一個(gè)基本的 web 接口,但是更重要的 API 是給上一層(比如 Kubernetes)使用了。
Red Hat 提議容器支持 Performance Co-Pilot,一個(gè)在 RHEL7 中系統(tǒng)級(jí)別的性能監(jiān)控工具。隨著這個(gè)目標(biāo)教授了很多其他關(guān)于容器的工具。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/26336.html
摘要:在我們列舉的幾個(gè)監(jiān)控的服務(wù)或平臺(tái)中,這是唯一一款國內(nèi)產(chǎn)品。也是一款付費(fèi)監(jiān)控解決方案,計(jì)劃收費(fèi)方案是美分小時(shí)。同樣也支持監(jiān)控,還包括對(duì)容器級(jí)事件的監(jiān)測停止開始等等和管理容器產(chǎn)生的日志。由于是一個(gè)監(jiān)控方案,相對(duì)來說它的安裝和部署都比較簡單。 輕量級(jí)虛擬化容器 Docker,自發(fā)布以來便廣受業(yè)界關(guān)注,在開源界和企業(yè)界掀起了一陣風(fēng)。Docker 容器相對(duì)于 VM 有以下幾個(gè)優(yōu)勢:啟動(dòng)速度快;資...
摘要:監(jiān)控告警是運(yùn)營系統(tǒng)最核心的功能之一,騰訊內(nèi)部有一套很成熟的監(jiān)控告警平臺(tái),而且開發(fā)運(yùn)維同學(xué)已經(jīng)習(xí)慣這套平臺(tái),如果我們針對(duì)容器再開發(fā)一個(gè)監(jiān)控告警平臺(tái),會(huì)花費(fèi)很多精力,而且沒有太大的意義。也是一款付費(fèi)監(jiān)控解決方案,計(jì)劃收費(fèi)方案是美分小時(shí)。 如今,越來越多的公司開始使用 Docker 了,現(xiàn)在來給大家看幾組數(shù)據(jù): 2 / 3 的公司在嘗試了 Docker 后最終使用了它 也就是說 Docker...
摘要:阿里云的容器服務(wù)采用的是的模式,集成了阿里云的一些基礎(chǔ)服務(wù)日志監(jiān)控存儲(chǔ)等,在調(diào)度等方面做了很多優(yōu)化,你也可以使用看看。容器服務(wù)提供了針對(duì)阿里云的的插件,容器之間的數(shù)據(jù)包不需要封裝操作,性能幾乎和內(nèi)兩臺(tái)通信性能一樣。 Docker 引起了交付方式的變革,從交付代碼和文檔變成交付Docker鏡像乃至交付編排模板。容器服務(wù)讓我們可以專注應(yīng)用本身功能的開發(fā),而無需關(guān)注基礎(chǔ)設(shè)施、應(yīng)用部署、管理等...
摘要:阿里云的容器服務(wù)采用的是的模式,集成了阿里云的一些基礎(chǔ)服務(wù)日志監(jiān)控存儲(chǔ)等,在調(diào)度等方面做了很多優(yōu)化,你也可以使用看看。容器服務(wù)提供了針對(duì)阿里云的的插件,容器之間的數(shù)據(jù)包不需要封裝操作,性能幾乎和內(nèi)兩臺(tái)通信性能一樣。 Docker 引起了交付方式的變革,從交付代碼和文檔變成交付Docker鏡像乃至交付編排模板。容器服務(wù)讓我們可以專注應(yīng)用本身功能的開發(fā),而無需關(guān)注基礎(chǔ)設(shè)施、應(yīng)用部署、管理等...
摘要:系統(tǒng)監(jiān)控容器數(shù)量容器監(jiān)控應(yīng)用監(jiān)控每個(gè)主機(jī)監(jiān)控?cái)?shù)量主機(jī)監(jiān)控項(xiàng)以主機(jī)為中心的監(jiān)控體系容器作為主機(jī),以主機(jī)為中心將有兩個(gè)問題無法解決容器作為主機(jī),因?yàn)槿萜魃芷诜浅6虝海员O(jiān)控系統(tǒng)會(huì)認(rèn)為一半主機(jī)在頻發(fā)故障。 導(dǎo)讀:容器對(duì)于物理機(jī)和虛擬機(jī),單從監(jiān)控上看就不是一個(gè)數(shù)量級(jí)的,但監(jiān)控又是至關(guān)重要的,沒有監(jiān)控如同閉眼開車。 本次分享邀請(qǐng)數(shù)人云運(yùn)維總監(jiān)龐錚,本文將從以下幾個(gè)方面聊聊容器監(jiān)控的相關(guān)思考...
閱讀 2953·2021-09-26 10:18
閱讀 5280·2021-09-22 15:02
閱讀 2796·2019-08-30 15:53
閱讀 1841·2019-08-29 18:41
閱讀 2692·2019-08-27 10:58
閱讀 2623·2019-08-26 13:49
閱讀 2750·2019-08-26 12:17
閱讀 901·2019-08-26 11:49