溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

docker-monitor-injector工具算法的示例分析

發(fā)布時(shí)間:2021-12-14 09:46:32 來(lái)源:億速云 閱讀:124 作者:小新 欄目:云計(jì)算

這篇文章給大家分享的是有關(guān)docker-monitor-injector工具算法的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

工具介紹 docker-monitor-injector是攜程開(kāi)源的一個(gè)修正docker容器內(nèi)監(jiān)控?cái)?shù)據(jù)的工具,通過(guò)劫持open,fopen等linux庫(kù)函數(shù),重算/proc/meminfo,/proc/stat等度量指標(biāo),使得容器內(nèi)free,top等系統(tǒng)工具能正確統(tǒng)計(jì)容器性能指標(biāo)。下面將對(duì)其進(jìn)行源碼分析,并整理出各個(gè)數(shù)據(jù)的監(jiān)控修正算法。

算法(偽碼)

  1. /proc/uptime

reaperage:  time(NULL) - lstat("/proc/1").st_ctime
idletime:   (reaperage - cpuacct.usage)/1000000000
  1. /proc/meminfo

MemTotal:   memory.limit_in_bytes
memfree:    memlimit - memusage
swaptotal:  memswlimit > 0 ? memswlimit - memlimit : 0
SwapFree:   (memswlimit > 0 && memswusage > 0)  ? (memswlimit - memlimit) - (memswusage - memusage):0
cached:     memory.stat.total_cache
Buffers:    0
SwapCached: 0
Slab:       0
  1. /proc/stat

a.proc_stat_by_shares
user_sum:   cpuacct.stat.user
system_sum: cpuacct.stat.system
nice_sum:   (_self*cpu.shares/1024)/sysconf(_SC_NPROCESSORS_ONLN)
idle_sum:   (_self*cpu.shares/1024)/sysconf(_SC_NPROCESSORS_ONLN)
iowait_sum: (_self*cpu.shares/1024)/sysconf(_SC_NPROCESSORS_ONLN)
irq_sum:    (_self*cpu.shares/1024)/sysconf(_SC_NPROCESSORS_ONLN)
softirq_sum:(_self*cpu.shares/1024)/sysconf(_SC_NPROCESSORS_ONLN)
steal_sum:  (_self*cpu.shares/1024)/sysconf(_SC_NPROCESSORS_ONLN)
guest_sum:  (_self*cpu.shares/1024)/sysconf(_SC_NPROCESSORS_ONLN)
 
任一cpu stat值算法如下:
x           = x_sum/sysconf(_SC_NPROCESSORS_ONLN),x_sum為上述任一指標(biāo)

b.flush_proc_stat_by_cpusets

btime:      stat("/proc/1").st_ctime
user_sum, nice_sum, system_sum, idle_sum, iowait_sum, irq_sum, softirq_sum, steal_sum, guest_sum
            = 容器所擁有cpu id在/proc/stat中對(duì)應(yīng)值之和。
  1. /proc/cpuinfo

若容器綁定cpu,只輸出綁定cpu id對(duì)應(yīng)cpu info信息
否則,全部輸出
  1. /sys/devices/system/cpu/online

//經(jīng)過(guò)驗(yàn)證,該算法應(yīng)該是有缺陷的,不作分析。

  1. /proc/diskstats

read        = blkio.io_serviced:major:minor:Read
write       = blkio.io_serviced:major:minor:Write
read_merged = blkio.io_merged:major:minor:Read
write_merged=blkio.io_merged:major:minor:Write
read_sectors= blkio.io_service_bytes:major:minor:Read/512
write_sectors= blkio.io_service_bytes:major:minor:Write)/512
rd_svctm    = blkio.io_service_time:major:minor:Read/1000000
rd_wait     = get_blkio_io_value(blkio.io_wait_time:major:minor:Read)/1000000
read_ticks  = rd_svctm + rd_wait
wr_svctm    = blkio.io_service_time:major:minor:Write/1000000
wr_wait     = blkio.io_wait_time:major:minor:Write/1000000;
write_ticks = wr_svctm + wr_wait
tot_ticks   = blkio.io_service_time:major:minor:Total/1000000
 
...
if (read || write || read_merged || write_merged || read_sectors || write_sectors || read_ticks || write_ticks) {
snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
major, minor, dev_name, read, read_merged, read_sectors, read_ticks,
write, write_merged, write_sectors, write_ticks, ios_pgr, tot_ticks, rq_ticks);

感謝各位的閱讀!關(guān)于“docker-monitor-injector工具算法的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI