sar 를 이용한 리눅스 시스템 모니터링

sar 를 이용한 리눅스 시스템 모니터링

2021, Apr 25    

시스템이 행업 상태에 빠질 때가 있다.
콘솔에 응답이 없는 상황이라 재부팅 외에는 방법이 없기 때문에 장애 발생 시점의 현장보존(?)을 할 수 없다.
중요한 건 부팅이 되고 터미널이 다시 연결되어도 막상 수집할 수 있는 정보가 많지 않다는 거(아니 많긴 한데.. 알 수 없는 정보가 너무 많다.)
“Kernel Crash dump”가 설정되어 있다면 혹시 모르지만 그것도 안되어 있는 경우가 많다.

그래서 정리해본다.

시스템 상태 정보 를 얻을 수 있는 시스템 명령어는 대략 아래와 같다.

$ netstat -anpo | grep PROCESS_NMAE 

$ ss -anpo | grep ESTAB 

sar 명령어

  • sar 명령어로는 특정시점의 시스템자원 사용률에 대한 정보를 얻을 수 있다.
  • sar 정보는 crontab 에 보통 10분간격으로 통계값을 sar일자 파일로 저장되고 저장된 파일에서 특정 시간범위의 값을 얻을 수 있다.
  • 보통 리눅스를 설치하면 기본으로 설정되어 있으며 보관기간은 한달 정도. ※ /etc/cron.d/sysstat 파일을 참고
  • sar 명령시 제일 앞에 시간이 보이지 않으면 “export LANG=C” 후 실행.

    LANG 변수가 euc-kr이면 앞의 시간이 안보이는 경우가 있다.
    아래의 awk 인자의 순서는 모두 제일 앞에 시간 필드(HHYYSS PM)가 있는 경우로 가정한다.

개별 CPU Usage

분석 일자의 09시 ~ 14시 까지의 CPU 사용율 중 %user 값이 10이 넘는 줄만 출력한다.

$ sar -P ALL  -u -f /var/log/sa/sa16 -s 09:00:00 -e 14:00:00 | awk '{if ( $4 > 10 ) print $0}' 

06:20:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
06:30:01 PM      44     52.25      0.00     47.75      0.00      0.00      0.00
06:40:01 PM       5     99.29      0.00      0.70      0.00      0.00      0.00
06:40:01 PM      44     52.27      0.00     47.73      0.00      0.00      0.00
06:50:01 PM       1     19.69      0.01      0.28      0.12      0.00     79.91
06:50:01 PM       5     73.75      0.00      0.55      0.00      0.00     25.70
06:50:01 PM      44     52.22      0.00     47.78      0.00      0.00      0.00

개별 CPU Usage (Top 10)

awk를 이용해서 특정값 보다 큰 row만 출력 하고 sort를 이용해서 CPU Usage top10을 출력한다.

$ sar -P ALL -u -f /var/log/sa/sa16 -s 09:00:00 -e 12:00:00 | awk '{if ( $4 > 1 ) print $0}' | sort -k4 | tail -n 10

MEM Usage

“sar”로 특정 시간대의 메모리 사용량을 출력하고 awk를 이용하여 GB단위로 표시한다.

리눅스의 실제 메모리 사용량은 “used - ( buffer + cache )”로 계산할 수 있다.

리눅스에서 buffer와 Cache는 디스크 오퍼레이션의 속도를 높이기 위해 파일시스템이나 블럭디바이스의 정보를 유지하며 응용프로그램의 메모리가 부족하면 해제하여 사용한다.

$ sar -P ALL -r -f /var/log/sa/sa16 -s 09:00:00 -e 12:00:00 | awk '{print $0" "($3-$5-$6)/1024/1024 GB}' 

09:00:01 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit 0
09:10:01 AM  77599712  54518952     41.27    352728  25548668  88329836     53.32 27.2918
09:20:01 AM  77521932  54596732     41.32    353064  25556716  96151668     58.04 27.358
09:30:01 AM  77512192  54606472     41.33    353368  25564336  96153916     58.04 27.3597
09:40:01 AM  77572824  54545840     41.29    353680  25573688  88333104     53.32 27.2927
09:50:01 AM  77695988  54422676     41.19    353968  25597760  70013052     42.26 27.152
10:00:01 AM  77694280  54424384     41.19    354000  25598284  70012988     42.26 27.1531

SWAP Usage

SWAP 사용량 조회 및 1초 단위 실시간 모니터링

$ sar -P ALL -S -f /var/log/sa/sa16 -s 09:00:00 -e 12:00:00 

09:00:01 AM kbswpfree kbswpused  %swpused  kbswpcad   %swpcad
09:10:01 AM  33554428         0      0.00         0      0.00
09:20:01 AM  33554428         0      0.00         0      0.00
09:30:01 AM  33554428         0      0.00         0      0.00
09:40:01 AM  33554428         0      0.00         0      0.00

$ sar -P ALL -S 1  

Network device Usage

bond0 인터페이스의 사용량을 출력하고 Mbps 단위로 바꿔서 출력해본다.

mbps = kilobytes * 8 / 1024

$ sar -n DEV -f /var/log/sa/sa16 -s 09:00:00 -e 12:00:00 | egrep 'IFACE|bond0' | awk '{print $0" "$6*8/1024" Mbps"}' 

05:00:01 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s 0 Mbps
05:10:01 PM       em2    260.68     70.86    325.09     55.86      0.00      0.00      3.79 2.53977 Mbps
05:20:01 PM       em2    293.26    224.44    327.45    217.86      0.00      0.00      2.90 2.5582 Mbps
05:30:01 PM       em2    255.16     26.82    326.75      5.61      0.00      0.00      3.16 2.55273 Mbps
05:40:01 PM       em2    275.89     85.13    334.88     66.88      0.00      0.00      3.00 2.61625 Mbps

네트워크 디바이스 에러 조회

$ sar -n EDEV -f /var/log/sa/sa16 -s 09:00:00 -e 12:00:00 | egrep 'IFACE|bond0' 

05:00:01 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s 0 Mbps
05:10:01 PM       em2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 0 Mbps
05:20:01 PM       em2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 0 Mbps
05:30:01 PM       em2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 0 Mbps
05:40:01 PM       em2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 0 Mbps

$ sar -n SOCK -f /var/log/sa/sa16 -s 09:00:00 -e 12:00:00 

05:00:01 PM    totsck    tcpsck    udpsck    rawsck   ip-frag    tcp-tw
05:10:01 PM       825        20        14         0         0         0
05:20:01 PM       825        20        14         0         0         0
05:30:01 PM       825        20        14         0         0         0
05:40:01 PM       825        20        14         0         0         0

실시간 모니터링

sar로 디바이스별 트래픽 정보를 초단위 간격으로 모니터링할 수 있다.

$ sar -n DEV 1 
Linux 2.6.32-573.el6.x86_64 (HOSTNAME)       06/11/2019      _x86_64_        (56 CPU)

05:08:27 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
05:08:28 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:08:28 PM       em1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:08:28 PM       em2    273.00     14.00    360.77      1.09      0.00      0.00      7.00
05:08:28 PM       em3      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:08:28 PM       em4      0.00      0.00      0.00      0.00      0.00      0.00      0.00

em2 인터페이스의 정보를 1초 단위로 표시하고 awk를 이용하여 rx 트랙픽($6)을 Mbps로 표시 한다.

$ sar -n DEV 1 | egrep --line-buffered 'em2|IFACE' | awk '{print $0" "$6*8/1024" Mbps"}' 

07:23:32 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
07:23:32 PM       em2    254.55     16.16    339.36      1.49      0.00      0.00      1.01 2.65125 Mbps
07:23:33 PM       em2    222.77     12.87    299.01      1.35      0.00      0.00      0.99 2.33602 Mbps
07:23:34 PM       em2    247.47     12.12    335.28      1.32      0.00      0.00      0.00 2.61937 Mbps
07:23:35 PM       em2    333.00    170.00    336.45     73.09      0.00      0.00     10.00 2.62852 Mbps

참고