溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux中Docker容器內的監控命令數據修正思路

發布時間:2021-11-08 15:26:38 來源:億速云 閱讀:226 作者:小新 欄目:云計算

這篇文章主要介紹了linux中Docker容器內的監控命令數據修正思路,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

思路概述:編寫linux c代碼,生成對應的動態鏈接庫(so文件),通過LDPRELOAD實現對/proc文件系統訪問的劫持。劫持之后,實現容器內正確的數據計算邏輯,并生成對應的/proc文件放到容器內/tmp/proc目錄,劫持后對應的命令的數據來源就從/tmp/proc/*中獲取。

下文以劫持/proc/meminfo為例進行說明:

###編寫hijack_meminfo.c,用于劫持/proc/meminfo的open操作,從而劫持free命令的輸出。

#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <stdarg.h>
 
int open( const char * pathname, int flags)
{
    typeof(open) *old_open;
 
    old_open = dlsym(RTLD_NEXT, "open");
 
    //printf("in my hijack open!");
 
    // 劫持/proc/meminfo的open
    char *s_meminfo = strstr(pathname, "/proc/meminfo");
     
    if (s != NULL) {
        /*
        TODO:調用自己開發的容器meminfo信息收集函數,生成meminfo到容器目錄/tmp/proc/meminfo
        */
        (*old_open)("/tmp/proc/meminfo", flags);
 
    }
    else {
 
        (*old_open)(pathname, flags);
 
    }
}

###編譯hijack_meminfo.c,生成動態鏈接庫libhijack_meminfo.so。

$ gcc -shared -fPIC hijack_meminfo.c -o libhijack_meminfo.so -ldl

###將libhijack_meminfo.so的全路徑配置到環境變量LD_PRELOAD,系統會進行open函數的劫持。

$ export LD_PRELOAD=pwd/libhijack_meminfo.so

###為了測試和便于觀察,我們將手動生成文件/tmp/proc/meminfo。

MemTotal:        999 kB
MemFree:           999 kB
MemAvailable:     999 kB
Buffers:          999 kB
Cached:           999 kB
SwapCached:            0 kB
Active:           999 kB
Inactive:         999 kB
Active(anon):     999 kB
Inactive(anon):      999 kB
Active(file):     999 kB
Inactive(file):   999 kB
Unevictable:           999 kB
Mlocked:               999 kB
SwapTotal:             999 kB
SwapFree:              999 kB
Dirty:                999 kB
Writeback:             999 kB
AnonPages:        999 kB
Mapped:           999 kB
Shmem:               999 kB
Slab:              999 kB
SReclaimable:      999 kB
SUnreclaim:        999 kB
KernelStack:        999 kB
PageTables:         999 kB
NFS_Unstable:          999 kB
Bounce:                999 kB
WritebackTmp:          999 kB
CommitLimit:      999 kB
Committed_AS:    999 kB
VmallocTotal:   999 kB
VmallocUsed:        999 kB
VmallocChunk:   999 kB
HardwareCorrupted:     999 kB
AnonHugePages:    999 kB
CmaTotal:              999 kB
CmaFree:               999 kB
HugePages_Total:       999
HugePages_Free:        999
HugePages_Rsvd:        999
HugePages_Surp:        999
Hugepagesize:       999 kB
DirectMap4k:       999 kB
DirectMap2M:      999 kB

###執行free/top命令, 觀察是否劫持/proc/meminfo成功。 

根據這個思路,我們分析了常用的監控命令(free, top, iostat, vmstat, sar, df, uptime等)數據計算方法,對相關/proc文件進行了open/fopen 的劫持,并重新根據容器內對應的cgroup fs 數據重新計算的這些監控命令的監控數據。

因為我們有些場景是胖容器的場景,運維需要像監控VM/PM一樣的監控docker容器,因此才會需要我們去對容器內的監控命令進行修正。

在這里,我要推薦一個攜程的一個開源項目docker-monitor-injector,我們也是參考它的思路進行開發的。為什么沒有直接使用它呢?因為docker-monitor-injector修正的監控命令還不夠多,不能滿足我們的需求,于是我們就在這基礎進行了增量開發。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“linux中Docker容器內的監控命令數據修正思路”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女