IT 정보/리눅스

🔒 실무 팁(고급): 리눅스 'cgroup v2+eBPF'로 컨테이너 리소스 실시간 모니터링

DONOT 2025. 6. 18. 21:13
cgroup v2와 eBPF로 컨테이너 성능 가시성 극대화
cgroup v2 eBPF
리눅스 cgroup v2eBPF를 조합해
컨테이너의 CPU, 메모리, 네트워크 리소스를 실시간으로 모니터링하고
성능 병목을 자동 탐지하는 고급 실전 팁입니다[1][2].

핵심 구현 예시
#!/usr/bin/env python3
import os
import time
from bcc import BPF

eBPF 프로그램으로 cgroup v2 이벤트 추적

bpf_program = """
#include <uapi/linux/ptrace.h>
#include <linux/sched.h>

BPF_HASH(cgroup_stats, u32, u64);

int trace_cgroup_switch(struct pt_regs *ctx) {
u32 pid = bpf_get_current_pid_tgid() >> 32;
u64 ts = bpf_ktime_get_ns();

cgroup_stats.update(&pid, &ts);
return 0;

}
"""

def monitor_container_resources():
b = BPF(text=bpf_program)
b.attach_kprobe(event="cgroup_switch_task", fn_name="trace_cgroup_switch")

while True:
    # cgroup v2 통계 수집
    for cgroup_path in os.listdir("/sys/fs/cgroup"):
        if cgroup_path.startswith("docker"):
            memory_usage = read_cgroup_stat(f"/sys/fs/cgroup/{cgroup_path}/memory.current")
            cpu_usage = read_cgroup_stat(f"/sys/fs/cgroup/{cgroup_path}/cpu.stat")

            # 임계값 초과 시 알림
            if memory_usage > 1024*1024*1024:  # 1GB 초과
                print(f"WARNING: High memory usage in {cgroup_path}: {memory_usage/1024/1024:.2f}MB")

    time.sleep(5)

def read_cgroup_stat(path):
try:
with open(path, 'r') as f:
return int(f.read().strip())
except:
return 0

실행

monitor_container_resources()




실무 적용 포인트

  • 컨테이너별 리소스 사용량 실시간 추적 및 알림[1]
  • 성능 병목 및 리소스 경합 상황 조기 탐지[2]
  • Prometheus, Grafana와 연동해 대시보드 시각화[3]

cgroup v2+eBPF로 컨테이너 성능 모니터링의 새로운 차원을 경험하세요!
반응형