Ch. 4 관측 가능성 도구 ( 모니터링 S/W의 본질 ? )

Manx·2026년 3월 25일

DevOps

목록 보기
10/14
post-thumbnail

고정 카운터

  • 커널은 시스템 통계를 제공하기 위해 다양한 카운터를 관리한다.
  • 주로 이벤트가 발생할 때마다 증가하는 정수 값으로 구현된다.
  • Ex. 네트워크 패킷, 처리된 디스크I/O, 발생된 인터럽트의 수를 세는 카운터
  • 모니터링 S/W는 이러한 카운터를 Metric으로 노출한다.
  • 이 값들은 누적된다. 두 카운터를 읽어 그 차이를 계산하면, 초당 이벤트 수와 평균 지연시간을 구할 수 있다.
  • 커널이 지속적으로 관리하기 때문에 공짜 지표이다.
  • 유일한 오버헤드는 값을 사용자 공간으로 읽어오는 것 뿐 ( 무시해도 될 정도 )

시스템 전반

vmstat

  • 시스템 전반의 가상 메모리 및 물리적 메모리 통계
  • 부팅 이후의 평균값과 현재 값을 혼합해서 보여줌
vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0 1134592 252772    816 2093552    1    3    30    75    3    4 11  4 83  0  2
 0  0 1134592 297128    816 2085824    0    0     0    61 3050 5350  8  4 88  0  0
 0  0 1134592 294608    816 2085828    0    0     0  1062  855  897  4  2 93  0  0

mpstat : CPU별 사용률

mpstat
07:31:41 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:31:41 PM  all   10.72    0.02    2.94    0.15    0.44    0.45    1.95    0.00    0.00   83.33

iostat : 디스크별 I/O 사용률 (블록 장치 인터페이스 기준)

iostat
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          10.72    0.02    3.83    0.15    1.95   83.33

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
nvme0n1          14.55        46.74       150.61         0.00  193655488  623936546          0
nvme1n1           0.23        13.32         1.13         0.00   55163620    4670311          0

sar : 다양한 통계 제공, 과거 기록을 저장하여 보고할 수도 있음


프로세스 별

PS : 프로세스 상태
top : cpu 사용률, 다른 통계 기준으로 정렬된 프로세스 목록
pmap : 프로세스 메모리 세그먼트와 각 사용 통계 표시


에이전트

  • Exporter를 실행하여 커널과 애플리케이션의 지표를 기록한다.
  • MySQL, 웹서버 등 특정 애플리케이션을 모니터링하는 에이전트가 포함된다.
  • 시스템 카운터만으로는 알 수 없는 상세한 애플리케이션 요청 지표를 제공한다.
  • Prometheus
  • 본질은 vmstat, iostat 과 같은 시스템 도구들이 제공하는 정보와 동일하다.

/proc

  • 커널 통계를 제공하는 파일 시스템 인터페이스
  • 각 프로세스 ID에 해당하는 디렉토리가 있으며, 이 안에는 프로세스별 정보와 통계가 담긴 여러 파일이 있다.
$ ls -al /proc/
total 4
dr-xr-xr-x. 301 root    root                   0 Feb  5 20:43 .
drwxr-xr-x.  21 root    root                4096 Mar 10 16:10 ..
dr-xr-xr-x.   9 root    root                   0 Feb  5 20:43 1
dr-xr-xr-x.   9 root    root                   0 Mar 20 14:02 11
dr-xr-xr-x.   9 root    root                   0 Mar 20 14:02 13
dr-xr-xr-x.   9 root    root                   0 Feb  5 21:29 13724
dr-xr-xr-x.   9 root    root                   0 Feb  5 21:29 13818
dr-xr-xr-x.   9 root    root                   0 Feb  5 21:29 13820
dr-xr-xr-x.   9 root    root                   0 Feb  5 21:29 13936
  • 리눅스 시스템 전반에 대한 정보를 제공하는 추가 파일들도 있다.
  • 커널에 의해 동적으로 생성되며, 저장 장치에 영구적으로 보관되지 않고 시스템 메모리에만 존재한다.
    • 파일로 관리되는데 ? 라는 궁금증이 생길 수 있다.
    • 파일처럼 보이지만 실제 파일이 아니다.
    • 디스크 파일이 아니라 커널이 만든 가상 파일 시스템 (procfs)
  • 대부분은 Read-Only, 통계를 수집하는데 사용

limit : 해당 프로세스에 부과된 자원 제한
cgroup : Cgroup 멤버십 정보 (어떤 Cgroup에 속해있는지)를 보여준다.

cat 13724/limits 
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        unlimited            unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             29935                29935                processes 
Max open files            524288               524288               files     
Max locked memory         8388608              8388608              bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       29935                29935                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us 

top이 프로세스별 통계를 /proc에서 읽는 방식을 strace로 트레이싱한 결과

$ stat("/proc/14704", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
$ open("/proc/14704/stat", 0_RDONLY) = 4
$ read(4, "14704 (sshd) S 1 ~)
$ close(4)

top 명령어는 시스템에 있는 모든 활성 프로세스에 대해 이런 작업을 반복하므로 많은 오버헤드가 발생한다.

CPU 통계 정확도

  • 시스템 전반의 CPU 사용률 통계는 /proc/stat 파일을 통해 확인 가능하다.
  • 정확도는 커널 설정에 따라 다른데, CONFIG_TICK_CPU_ACCOUNTING ( 클럭 틱) 시간 단위로 측정
    - 보통 CONFIG_HZ = 50이 사용되며, 커널이 1초에 250번의 타이머 인터럽트를 발생한다.
    - 1초를 250으로 나누면 각 클럭 틱의 길이는 4밀리초이다.

/sys

  • /sys에 마운트된 sysfs 파일 시스템을 제공한다.
  • 원래 장치 드라이버 통계를 제공하기 위해 설계되었으며, 이후 다양한 통계 유형을 포함하도록 확장되었다.
  • 커널 객체(device, driver, bus 등)를 계층 구조로 노출하는 인터페이스
  • 하드웨어 + 커널 객체 구조 중심

CPU가 얼만큼의 캐시 용량을 가지고 있는지.

  • CPU 0의 1단계 캐시가 32K size 이다.
[root@ip-10-0-3-225 index0]# cat /sys/devices/system/cpu/cpu0/cache/index0/size
32K

0개의 댓글