Recent Posts
Recent Comments
Link
160x600
반응형
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

일상과 여행 사이, 작은 발견들을 기록합니다

Linux sar 완전 가이드: 시스템 성능 모니터링의 모든 것 📊 본문

Linux

Linux sar 완전 가이드: 시스템 성능 모니터링의 모든 것 📊

kerasi 2025. 6. 16. 16:09
728x90
반응형

sar

Linux sar 완전 가이드: 시스템 성능 모니터링의 모든 것 📊

🚀 서론

현대의 IT 환경에서 시스템 성능 모니터링은 안정적인 서비스 운영을 위한 필수 요소입니다. 서버가 갑자기 느려졌을 때, 메모리 부족으로 애플리케이션이 종료될 때, 또는 디스크 I/O 병목으로 인해 사용자 경험이 저하될 때 - 이 모든 상황에서 우리에게는 정확한 진단 도구가 필요합니다. 바로 이때 **sar(System Activity Reporter)**가 진가를 발휘합니다.

Linux 시스템 관리자라면 반드시 마스터해야 할 sar는 단순한 모니터링 도구를 넘어, 시스템의 과거와 현재를 관통하는 통찰력을 제공하는 강력한 분석 도구입니다.

📈 sar란 무엇인가?

**sar(System Activity Reporter)**는 Linux/Unix 시스템에서 시스템 성능과 활동을 모니터링하고 보고하는 명령행 도구입니다. sysstat 패키지의 핵심 구성요소로, 실시간 데이터 수집과 과거 데이터 분석을 모두 지원합니다.

🎯 주요 특징

📊 다양한 메트릭 지원: CPU, 메모리, 디스크, 네트워크 등 20개 이상의 시스템 메트릭을 모니터링할 수 있습니다.

⏰ 시계열 데이터 분석: 과거 데이터를 저장하고 분석하여 시간에 따른 성능 변화 추이를 파악할 수 있습니다.

🤖 자동 수집 기능: cron을 통해 정기적으로 시스템 데이터를 자동 수집하고 저장합니다.

📈 실시간 모니터링: 지정된 간격으로 실시간 시스템 상태를 모니터링할 수 있습니다.

💡 sar의 중요성

시스템 관리에서 sar가 중요한 이유는 사후 분석(Post-mortem Analysis) 능력에 있습니다. 문제가 발생한 시점의 정확한 시스템 상태를 재현할 수 있어, 근본 원인 분석과 재발 방지 대책 수립에 핵심적인 역할을 합니다.

🛠️ 설치 및 기본 설정

📦 패키지 설치

# RHEL/CentOS/Fedora
sudo yum install sysstat
# 또는 최신 버전
sudo dnf install sysstat

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install sysstat

# SUSE/openSUSE
sudo zypper install sysstat

⚙️ 서비스 활성화

# sysstat 서비스 활성화 및 시작
sudo systemctl enable sysstat
sudo systemctl start sysstat

# 상태 확인
sudo systemctl status sysstat

📝 기본 문법

# 실시간 모니터링
sar [옵션] [간격(초)] [횟수]

# 과거 데이터 분석
sar [옵션] -f [로그파일]

# 예시
sar -u 3 5          # CPU 사용률을 3초 간격으로 5회 출력
sar -r -f /var/log/sa/sa15    # 15일 메모리 사용률 데이터 출력

🔧 주요 옵션 완전 가이드

1. 💻 CPU 관련 모니터링

-u (CPU 사용률)

가장 기본적이면서도 중요한 옵션으로, 전체 시스템의 CPU 사용률을 보여줍니다.

# 기본 CPU 사용률 모니터링
sar -u 3 5

# 출력 예시:
# Time        CPU     %user     %nice   %system   %iowait    %steal     %idle
# 02:35:01    all      23.50      0.00      8.75      2.25      0.00     65.50

주요 메트릭 해석:

  • %user: 사용자 영역에서 실행되는 프로세스의 CPU 사용률
  • %nice: nice 값이 조정된 프로세스의 CPU 사용률
  • %system: 커널 영역에서 실행되는 시스템 프로세스의 CPU 사용률
  • %iowait: I/O 대기로 인한 CPU 유휴 시간
  • %steal: 하이퍼바이저가 다른 가상 머신에 할당한 시간
  • %idle: 완전 유휴 상태의 CPU 시간

-P (개별 CPU 코어 모니터링)

멀티코어 시스템에서 각 CPU 코어의 개별 사용률을 확인할 수 있습니다.

# 모든 CPU 코어 모니터링
sar -P ALL 2 10

# 특정 CPU 코어 모니터링 (0번 코어)
sar -P 0 2 10

# CPU 0, 1, 2번 코어만 모니터링
sar -P 0,1,2 2 10

2. 🧠 메모리 관련 모니터링

-r (메모리 사용률)

시스템의 전반적인 메모리 사용 현황을 보여줍니다.

sar -r 2 5

# 출력 예시:
# Time      kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
# 14:30:01    1048576   7340032     87.50    524288   2097152   8388608     75.25

주요 메트릭 해석:

  • kbmemfree: 사용 가능한 메모리 용량 (KB)
  • kbmemused: 사용 중인 메모리 용량 (KB)
  • %memused: 메모리 사용률 (%)
  • kbbuffers: 버퍼로 사용되는 메모리 (KB)
  • kbcached: 캐시로 사용되는 메모리 (KB)
  • kbcommit: 커밋된 메모리 (KB)
  • %commit: 커밋 메모리 비율 (%)

-S (스왑 사용률)

스왑 공간의 사용 현황을 모니터링합니다.

sar -S 2 5

# 출력 예시:
# Time      kbswpfree kbswpused  %swpused  kbswpcad   %swpcad
# 14:30:01    2097152     0        0.00        0      0.00

-W (스왑 활동 모니터링)

스왑 활동의 빈도를 확인하여 메모리 부족 상황을 진단할 수 있습니다.

sar -W 2 5

# 출력 예시:
# Time     pswpin/s pswpout/s
# 14:30:01     0.00      0.00
  • pswpin/s: 초당 스왑인된 페이지 수
  • pswpout/s: 초당 스왑아웃된 페이지 수

3. 💾 디스크 I/O 모니터링

-b (전체 디스크 I/O)

시스템 전체의 디스크 I/O 활동을 보여줍니다.

sar -b 2 5

# 출력 예시:
# Time          tps      rtps      wtps   bread/s   bwrtn/s
# 14:30:01    150.25     75.50     74.75   1024.00    896.50

주요 메트릭 해석:

  • tps: 초당 총 전송(Transfer) 횟수
  • rtps: 초당 읽기 요청 횟수
  • wtps: 초당 쓰기 요청 횟수
  • bread/s: 초당 읽은 블록 수
  • bwrtn/s: 초당 쓴 블록 수

-d (개별 디스크 성능)

각 디스크 장치의 상세한 성능 메트릭을 제공합니다.

sar -d 2 5

# 출력 예시:
# Time       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz   await  svctm  %util
# 14:30:01   sda     125.50    512.00    448.00      7.65      0.25    2.00   1.50  18.75

주요 메트릭 해석:

  • DEV: 디바이스 이름
  • tps: 초당 전송 횟수
  • rd_sec/s: 초당 읽은 섹터 수
  • wr_sec/s: 초당 쓴 섹터 수
  • avgrq-sz: 평균 요청 크기 (섹터)
  • avgqu-sz: 평균 큐 길이
  • await: 평균 대기 시간 (ms)
  • svctm: 평균 서비스 시간 (ms)
  • %util: 디스크 사용률 (%)

4. 🌐 네트워크 모니터링

-n DEV (네트워크 인터페이스)

각 네트워크 인터페이스의 트래픽을 모니터링합니다.

sar -n DEV 2 5

# 출력 예시:
# Time     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
# 14:30:01   eth0    125.50    98.25    512.75    256.50      0.00      0.00      2.25

주요 메트릭 해석:

  • IFACE: 네트워크 인터페이스 이름
  • rxpck/s: 초당 수신 패킷 수
  • txpck/s: 초당 송신 패킷 수
  • rxkB/s: 초당 수신 데이터량 (KB)
  • txkB/s: 초당 송신 데이터량 (KB)
  • rxcmp/s: 초당 수신 압축 패킷 수
  • txcmp/s: 초당 송신 압축 패킷 수
  • rxmcst/s: 초당 수신 멀티캐스트 패킷 수

-n EDEV (네트워크 에러)

네트워크 에러 통계를 확인합니다.

sar -n EDEV 2 5

# 출력 예시:
# Time     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
# 14:30:01   eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

-n TCP (TCP 통계)

TCP 연결 상태와 관련된 통계를 제공합니다.

sar -n TCP 2 5

# 출력 예시:
# Time     active/s passive/s    iseg/s    oseg/s
# 14:30:01     2.50      5.25   1024.75    896.50

5. ⚡ 시스템 로드 및 프로세스

-q (로드 평균과 실행 큐)

시스템의 전반적인 부하 상태를 파악할 수 있습니다.

sar -q 2 5

# 출력 예시:
# Time      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
# 14:30:01        2       156      1.25      1.50      1.75         0

주요 메트릭 해석:

  • runq-sz: 실행 가능한 프로세스 수
  • plist-sz: 전체 프로세스 수
  • ldavg-1/5/15: 1분/5분/15분 로드 평균
  • blocked: 블록된 프로세스 수

-v (파일 시스템 통계)

파일 시스템과 관련된 커널 통계를 제공합니다.

sar -v 2 5

# 출력 예시:
# Time    dentunusd   file-nr  inode-nr    pty-nr
# 14:30:01    45678     12345     23456        12

📂 로그 파일 분석 및 활용

🗂️ sar 로그 파일 위치

sar는 수집한 데이터를 다음 위치에 저장합니다:

# 일별 바이너리 로그 파일
/var/log/sa/saDD    # DD는 날짜 (예: sa15는 15일)

# 일별 텍스트 리포트 파일  
/var/log/sa/sarDD   # DD는 날짜 (예: sar15는 15일)

📊 과거 데이터 조회

# 오늘 데이터 조회
sar -u -f /var/log/sa/sa$(date +%d)

# 특정 날짜 데이터 조회 (예: 15일)
sar -u -f /var/log/sa/sa15

# 특정 시간대 조회 (오전 9시~오후 6시)
sar -u -s 09:00:00 -e 18:00:00 -f /var/log/sa/sa15

# 시간 범위와 함께 여러 메트릭 조회
sar -u -r -b -s 14:00:00 -e 16:00:00 -f /var/log/sa/sa15

📈 리포트 생성

sadf를 이용한 데이터 변환

# CSV 형식으로 출력
sadf -d /var/log/sa/sa15 -- -u -r > performance_report.csv

# JSON 형식으로 출력
sadf -j /var/log/sa/sa15 -- -u -r -b > performance_report.json

# XML 형식으로 출력
sadf -x /var/log/sa/sa15 -- -u -r > performance_report.xml

# 데이터베이스 형식으로 출력
sadf -d /var/log/sa/sa15 -- -A > all_metrics.csv

🔍 실전 사용 예제

📊 종합 시스템 모니터링

# CPU, 메모리, 디스크, 네트워크를 동시에 모니터링 (3초 간격, 20회)
sar -u -r -b -n DEV 3 20

# 시스템 부하와 함께 모니터링
sar -u -r -q -n DEV 5 12

🚨 성능 문제 진단 시나리오

CPU 성능 문제 진단

# CPU 사용률이 높은 경우 - 모든 코어 상세 분석
sar -u -P ALL 1 60

# CPU 사용률과 로드 평균 함께 분석
sar -u -q 2 30

메모리 부족 문제 진단

# 메모리 사용률과 스왑 활동 동시 모니터링
sar -r -S -W 2 30

# 메모리 상세 분석
sar -r -R -B 3 20

디스크 I/O 병목 문제 진단

# 디스크 I/O 상세 분석
sar -d -b 2 30

# 특정 디스크만 모니터링
sar -d -p 2 30 | grep sda

네트워크 성능 문제 진단

# 네트워크 트래픽과 에러 분석
sar -n DEV,EDEV 5 12

# TCP 연결 상태 분석
sar -n TCP,ETCP 5 12

# 모든 네트워크 통계
sar -n ALL 10 6

📈 장기간 성능 추이 분석

# 최근 7일간 CPU 사용률 평균
for i in {1..7}; do
    DAY=$(date -d "${i} days ago" +%d)
    echo "=== $(date -d "${i} days ago" +%Y-%m-%d) ==="
    sar -u -f /var/log/sa/sa${DAY} | grep Average
done

# 특정 기간 메모리 사용률 추이
for day in {10..15}; do
    echo "Day ${day}:"
    sar -r -s 09:00:00 -e 18:00:00 -f /var/log/sa/sa${day} | grep Average
done

🤖 자동 모니터링 및 알림 설정

⏰ cron 기반 자동 수집

sar의 데이터 수집은 일반적으로 다음 위치에서 관리됩니다:

# /etc/cron.d/sysstat 파일 내용
# 10분마다 시스템 활동 데이터 수집
*/10 * * * * root /usr/lib64/sa/sa1 1 1

# 매일 23:53에 일일 리포트 생성
53 23 * * * root /usr/lib64/sa/sa2 -A

📊 사용자 정의 모니터링 스크립트

#!/bin/bash
# 시스템 상태 모니터링 스크립트

LOGFILE="/var/log/system_monitor.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
THRESHOLD_CPU=80
THRESHOLD_MEM=85
THRESHOLD_DISK=90

echo "=== System Check: $DATE ===" >> $LOGFILE

# CPU 사용률 체크
CPU_USAGE=$(sar -u 1 1 | tail -1 | awk '{print 100-$NF}' | cut -d. -f1)
echo "CPU Usage: ${CPU_USAGE}%" >> $LOGFILE

if [ $CPU_USAGE -gt $THRESHOLD_CPU ]; then
    echo "WARNING: High CPU usage detected!" >> $LOGFILE
    # 알림 발송 로직 추가
fi

# 메모리 사용률 체크
MEM_USAGE=$(sar -r 1 1 | tail -1 | awk '{print $4}' | cut -d. -f1)
echo "Memory Usage: ${MEM_USAGE}%" >> $LOGFILE

if [ $MEM_USAGE -gt $THRESHOLD_MEM ]; then
    echo "WARNING: High memory usage detected!" >> $LOGFILE
    # 알림 발송 로직 추가
fi

# 디스크 사용률 체크 (가장 높은 사용률)
MAX_DISK_UTIL=$(sar -d 1 1 | grep -v "^$\|Average\|Linux\|^[0-9]" | \
                awk '{print $NF}' | sort -nr | head -1 | cut -d. -f1)
echo "Max Disk Utilization: ${MAX_DISK_UTIL}%" >> $LOGFILE

if [ $MAX_DISK_UTIL -gt $THRESHOLD_DISK ]; then
    echo "WARNING: High disk utilization detected!" >> $LOGFILE
    # 알림 발송 로직 추가
fi

echo "" >> $LOGFILE

📧 이메일 알림 스크립트

#!/bin/bash
# 임계값 초과 시 이메일 알림

ADMIN_EMAIL="admin@company.com"
HOSTNAME=$(hostname)

# CPU 임계값 체크
check_cpu() {
    CPU_USAGE=$(sar -u 1 3 | grep Average | awk '{print 100-$NF}' | cut -d. -f1)
    if [ $CPU_USAGE -gt 85 ]; then
        echo "High CPU usage detected on $HOSTNAME: ${CPU_USAGE}%" | \
        mail -s "ALERT: High CPU Usage - $HOSTNAME" $ADMIN_EMAIL
    fi
}

# 메모리 임계값 체크
check_memory() {
    MEM_USAGE=$(sar -r 1 3 | grep Average | awk '{print $4}' | cut -d. -f1)
    if [ $MEM_USAGE -gt 90 ]; then
        echo "High memory usage detected on $HOSTNAME: ${MEM_USAGE}%" | \
        mail -s "ALERT: High Memory Usage - $HOSTNAME" $ADMIN_EMAIL
    fi
}

# 디스크 I/O 임계값 체크
check_disk_io() {
    MAX_UTIL=$(sar -d 1 3 | grep Average | awk '{print $NF}' | \
               sort -nr | head -1 | cut -d. -f1)
    if [ $MAX_UTIL -gt 95 ]; then
        echo "High disk utilization detected on $HOSTNAME: ${MAX_UTIL}%" | \
        mail -s "ALERT: High Disk Utilization - $HOSTNAME" $ADMIN_EMAIL
    fi
}

# 함수 실행
check_cpu
check_memory
check_disk_io

📊 성능 분석 및 해석 가이드

🎯 CPU 성능 분석

정상 상태 기준값

  • %user < 70%: 일반적인 애플리케이션 부하
  • %system < 30%: 정상적인 시스템 호출 수준
  • %iowait < 10%: 양호한 I/O 응답성
  • %steal < 5%: 가상화 환경에서 정상 수준

문제 상황 진단

# CPU 사용률이 지속적으로 높은 경우
sar -u -P ALL 1 300  # 5분간 모든 코어 모니터링

# %iowait가 높은 경우 디스크 I/O 확인
sar -u -d 2 60

# %steal이 높은 경우 (가상화 환경)
sar -u 1 60 | grep -v "^$\|Average\|Linux"

🧠 메모리 성능 분석

정상 상태 기준값

  • %memused < 80%: 여유로운 메모리 상태
  • kbswpused = 0: 스왑 미사용 (이상적)
  • pswpin/s = 0, pswpout/s = 0: 스왑 활동 없음

메모리 부족 징후

# 메모리 사용률과 스왑 활동 동시 확인
sar -r -S -W 3 20

# 메모리 부족으로 인한 성능 저하 확인
sar -r -B 2 30  # 페이징 활동 포함

💾 디스크 I/O 성능 분석

정상 상태 기준값

  • %util < 80%: 디스크가 포화 상태가 아님
  • await < 10ms: 양호한 응답 시간
  • avgqu-sz < 2: 큐 대기 없음

디스크 병목 진단

# 디스크별 상세 성능 분석
sar -d 1 60

# I/O 패턴 분석 (읽기/쓰기 비율)
sar -d 2 30 | awk 'NR>3 && !/^$/ {print $2, $4, $5, $4+$5}'

🌐 네트워크 성능 분석

대역폭 사용률 계산

# 네트워크 인터페이스별 대역폭 사용률
sar -n DEV 5 12 | grep eth0

# 1Gbps 네트워크에서 사용률 계산 (rxkB/s * 8 / 1000000 * 100)

네트워크 에러율 확인

# 에러율이 0.01% 이상이면 네트워크 문제 의심
sar -n EDEV 5 12

🔧 고급 활용 기법

📈 성능 기준선(Baseline) 설정

#!/bin/bash
# 성능 기준선 수집 스크립트

BASELINE_DIR="/var/log/performance_baseline"
mkdir -p $BASELINE_DIR

DATE=$(date +%Y%m%d)

# 7일간 정상 시간대 데이터 수집
for day in {1..7}; do
    DAY_NUM=$(date -d "${day} days ago" +%d)
    
    # 업무시간(09:00-18:00) 평균값 추출
    echo "=== Day $day ===" >> $BASELINE_DIR/cpu_baseline_$DATE.txt
    sar -u -s 09:00:00 -e 18:00:00 -f /var/log/sa/sa$DAY_NUM | \
    grep Average >> $BASELINE_DIR/cpu_baseline_$DATE.txt
    
    echo "=== Day $day ===" >> $BASELINE_DIR/mem_baseline_$DATE.txt
    sar -r -s 09:00:00 -e 18:00:00 -f /var/log/sa/sa$DAY_NUM | \
    grep Average >> $BASELINE_DIR/mem_baseline_$DATE.txt
done

📊 성능 리포트 자동 생성

#!/bin/bash
# 주간 성능 리포트 생성

REPORT_DIR="/var/log/weekly_reports"
mkdir -p $REPORT_DIR

WEEK_START=$(date -d "1 week ago" +%Y%m%d)
REPORT_FILE="$REPORT_DIR/weekly_report_$WEEK_START.html"

cat > $REPORT_FILE << EOF
<!DOCTYPE html>
<html>
<head>
    <title>Weekly Performance Report</title>
    <style>
        table { border-collapse: collapse; width: 100%; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>
    <h1>Weekly Performance Report</h1>
    <h2>CPU Usage Summary</h2>
    <table>
        <tr><th>Date</th><th>Avg %user</th><th>Avg %system</th><th>Avg %iowait</th><th>Avg %idle</th></tr>
EOF

# 최근 7일 데이터 처리
for i in {1..7}; do
    DATE=$(date -d "${i} days ago" +%Y-%m-%d)
    DAY_NUM=$(date -d "${i} days ago" +%d)
    
    if [ -f /var/log/sa/sa$DAY_NUM ]; then
        CPU_DATA=$(sar -u -f /var/log/sa/sa$DAY_NUM | grep Average | \
                   awk '{printf "%.2f %.2f %.2f %.2f", $3, $5, $6, $8}')
        echo "        <tr><td>$DATE</td><td>$CPU_DATA</td></tr>" >> $REPORT_FILE
    fi
done

cat >> $REPORT_FILE << EOF
    </table>
</body>
</html>
EOF

echo "Weekly report generated: $REPORT_FILE"

🚨 이상 징후 탐지 스크립트

#!/bin/bash
# 이상 징후 자동 탐지

ANOMALY_THRESHOLD=2.0  # 표준편차의 2배

detect_cpu_anomaly() {
    # 최근 24시간 CPU 사용률 데이터 수집
    CPU_DATA=$(sar -u 1 1440 | grep -v "^$\|Average\|Linux" | \
               awk 'NR>2 {print 100-$NF}')
    
    # 평균과 표준편차 계산 (awk 사용)
    STATS=$(echo "$CPU_DATA" | awk '
    {
        sum += $1; 
        values[NR] = $1; 
        count = NR
    } 
    END {
        mean = sum/count;
        for(i=1; i<=count; i++) {
            sumsq += (values[i] - mean)^2;
        }
        stddev = sqrt(sumsq/count);
        printf "%.2f %.2f", mean, stddev;
    }')
    
    MEAN=$(echo $STATS | awk '{print $1}')
    STDDEV=$(echo $STATS | awk '{print $2}')
    
    # 현재 CPU 사용률
    CURRENT_CPU=$(sar -u 1 1 | tail -1 | awk '{print 100-$NF}')
    
    # 이상 징후 확인 (현재값이 평균 ± 2σ 범위를 벗어나는지)
    ANOMALY=$(echo "$CURRENT_CPU $MEAN $STDDEV $ANOMALY_THRESHOLD" | \
              awk '{if($1 > $2 + $4*$3 || $1 < $2 - $4*$3) print "YES"; else print "NO"}')
    
    if [ "$ANOMALY" = "YES" ]; then
        echo "CPU ANOMALY DETECTED: Current=${CURRENT_CPU}%, Mean=${MEAN}%, StdDev=${STDDEV}%"
        # 알림 발송 로직
    fi
}

detect_cpu_anomaly

💼 실무 활용 시나리오

🔍 장애 발생 시점 분석

# 2024년 1월 15일 14:30 경 장애 발생 시나리오
INCIDENT_DATE="15"
INCIDENT_TIME_START="14:00:00"
INCIDENT_TIME_END="15:30:00"

echo "=== 장애 시점 시스템 상태 분석 ==="

# CPU 상태 분석
echo "1. CPU Usage during incident:"
sar -u -s $INCIDENT_TIME_START -e $INCIDENT_TIME_END -f /var/log/sa/sa$INCIDENT_DATE

# 메모리 상태 분석  
echo "2. Memory Usage during incident:"
sar -r -S -W -s $INCIDENT_TIME_START -e $INCIDENT_TIME_END -f /var/log/sa/sa$INCIDENT_DATE

# 디스크 I/O 상태 분석
echo "3. Disk I/O during incident:"
sar -d -b -s $INCIDENT_TIME_START -e $INCIDENT_TIME_END -f /var/log/sa/sa$INCIDENT_DATE

# 네트워크 상태 분석
echo "4. Network Activity during incident:"
sar -n DEV,EDEV -s $INCIDENT_TIME_START -e $INCIDENT_TIME_END -f /var/log/sa/sa$INCIDENT_DATE

# 시스템 로드 분석
echo "5. System Load during incident:"
sar -q -s $INCIDENT_TIME_START -e $INCIDENT_TIME_END -f /var/log/sa/sa$INCIDENT_DATE

📈 용량 계획 및 예측

#!/bin/bash
# 용량 계획을 위한 성장률 분석

analyze_growth_trend() {
    METRIC=$1
    OPTION=$2
    
    echo "=== $METRIC Growth Trend Analysis ==="
    
    # 최근 30일 데이터 수집
    for day in {1..30}; do
        DAY_NUM=$(date -d "${day} days ago" +%d)
        DATE=$(date -d "${day} days ago" +%Y-%m-%d)
        
        if [ -f /var/log/sa/sa$DAY_NUM ]; then
            AVG_VALUE=$(sar $OPTION -f /var/log/sa/sa$DAY_NUM | \
                       grep Average | awk '{print $4}')
            echo "$DATE $AVG_VALUE"
        fi
    done | sort > /tmp/trend_data.txt
    
    # 선형 회귀를 통한 성장률 계산 (간단한 형태)
    GROWTH_RATE=$(awk '
    BEGIN {count=0; sum_x=0; sum_y=0; sum_xy=0; sum_x2=0}
    {
        count++; 
        x=count; 
        y=$2; 
        sum_x+=x; 
        sum_y+=y; 
        sum_xy+=x*y; 
        sum_x2+=x*x
    }
    END {
        slope = (count*sum_xy - sum_x*sum_y) / (count*sum_x2 - sum_x*sum_x);
        printf "%.4f", slope
    }' /tmp/trend_data.txt)
    
    echo "$METRIC daily growth rate: $GROWTH_RATE"
    
    # 6개월 후 예상값 계산
    CURRENT_VALUE=$(tail -1 /tmp/trend_data.txt | awk '{print $2}')
    PREDICTED_VALUE=$(echo "$CURRENT_VALUE $GROWTH_RATE" | \
                     awk '{printf "%.2f", $1 + $2*180}')
    
    echo "Current average: $CURRENT_VALUE"
    echo "Predicted value in 6 months: $PREDICTED_VALUE"
    echo ""
}

# 각 메트릭별 성장률 분석
analyze_growth_trend "CPU Usage" "-u"
analyze_growth_trend "Memory Usage" "-r"
analyze_growth_trend "Disk Utilization" "-d"

🎯 성능 튜닝 전후 비교

#!/bin/bash
# 성능 튜닝 전후 비교 분석

BEFORE_DATE="14"  # 튜닝 전 날짜
AFTER_DATE="16"   # 튜닝 후 날짜
TIME_RANGE="-s 09:00:00 -e 18:00:00"  # 업무시간

echo "=== Performance Tuning Comparison ==="
echo "Before: $(date -d "2 days ago" +%Y-%m-%d)"
echo "After:  $(date +%Y-%m-%d)"
echo ""

compare_metric() {
    METRIC_NAME=$1
    SAR_OPTION=$2
    FIELD_NUM=$3
    
    echo "--- $METRIC_NAME Comparison ---"
    
    BEFORE_AVG=$(sar $SAR_OPTION $TIME_RANGE -f /var/log/sa/sa$BEFORE_DATE | \
                grep Average | awk -v field=$FIELD_NUM '{print $field}')
    
    AFTER_AVG=$(sar $SAR_OPTION $TIME_RANGE -f /var/log/sa/sa$AFTER_DATE | \
               grep Average | awk -v field=$FIELD_NUM '{print $field}')
    
    IMPROVEMENT=$(echo "$BEFORE_AVG $AFTER_AVG" | \
                 awk '{printf "%.2f", (($1-$2)/$1)*100}')
    
    echo "Before: $BEFORE_AVG"
    echo "After:  $AFTER_AVG"
    echo "Improvement: $IMPROVEMENT%"
    echo ""
}

# 각 메트릭 비교
compare_metric "CPU Idle" "-u" "8"
compare_metric "Memory Usage" "-r" "4"
compare_metric "Average Disk Utilization" "-d" "10"
compare_metric "Load Average (1min)" "-q" "4"

🆚 다른 모니터링 도구와의 비교

도구 장점 단점 최적 사용 시나리오

sar 📊 과거 데이터 분석<br>🤖 자동 수집<br>📈 시계열 분석 ⏱️ 실시간성 부족<br>📱 GUI 없음 🔍 장기 성능 분석<br>📋 용량 계획<br>🚨 사후 분석
top/htop ⚡ 실시간 모니터링<br>👁️ 직관적 인터페이스<br>🎯 프로세스별 상세 정보 📊 과거 데이터 없음<br>💾 데이터 저장 불가 🚨 즉시 문제 진단<br>⚡ 실시간 모니터링
iostat 💾 디스크 I/O 전문<br>📊 상세 통계<br>⚡ 실시간 가능 🔧 제한적 메트릭<br>📊 종합 분석 어려움 💾 I/O 성능 분석<br>🔍 디스크 병목 진단
vmstat 🧠 메모리/프로세스 전문<br>⚡ 실시간 모니터링<br>📊 간결한 출력 🔧 제한적 메트릭<br>📊 과거 데이터 없음 🧠 메모리 분석<br>⚡ 빠른 시스템 상태 확인
netstat/ss 🌐 네트워크 연결 상태<br>📊 상세 소켓 정보<br>🔍 포트 사용 현황 📈 처리량 정보 부족<br>📊 과거 데이터 없음 🌐 네트워크 연결 진단<br>🔍 포트 충돌 확인

🎯 결론

sar는 Linux 시스템 관리자에게 있어 필수불가결한 도구입니다. 단순한 실시간 모니터링을 넘어서 시스템의 과거, 현재, 미래를 관통하는 통찰력을 제공합니다.

핵심 활용 포인트:

  • 📊 체계적인 데이터 수집: 자동화된 데이터 수집으로 누락 없는 성능 모니터링
  • 🔍 정밀한 문제 진단: 다양한 메트릭을 통한 근본 원인 분석
  • 📈 예측적 용량 계획: 과거 데이터 기반의 미래 리소스 요구량 예측
  • ⚡ 신속한 장애 대응: 사후 분석을 통한 재발 방지 대책 수립

현대의 복잡한 IT 환경에서 sar를 제대로 활용할 수 있다면, 단순한 '불끄기' 식의 대응에서 벗어나 예측 가능하고 안정적인 시스템 운영이 가능해집니다. sar는 시스템의 건강상태를 진단하는 청진기이자, 성능 최적화의 나침반 역할을 해주는 강력한 도구입니다.

지금 당장 여러분의 서버에서 sar -u 3 5 명령을 실행해보세요. 그 숫자들 속에 여러분의 시스템이 전하는 이야기가 담겨 있을 것입니다! 🚀


🏷️ 태그

#Linux #sar #시스템모니터링 #SystemMonitoring #성능분석 #PerformanceAnalysis #시스템관리 #SystemAdmin #DevOps #서버관리 #ServerManagement #CPU모니터링 #메모리모니터링 #디스크IO #네트워크모니터링 #sysstat #용량계획 #CapacityPlanning #장애분석 #TroubleShooting #성능튜닝 #PerformanceTuning #리눅스서버 #시계열분석 #TimeSeriesAnalysis #IT운영 #ITOperations #모니터링도구 #시스템최적화 #인프라관리 #Infrastructure


이 글이 Linux sar 활용에 도움이 되었기를 바랍니다. 궁금한 점이나 추가로 알고 싶은 내용이 있으시면 언제든 댓글로 남겨주세요! 💬✨

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90