일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 태그: #미술한자 #일본어한자 #미술관일본어 #jlpt #일본어공부 #예술일본어 #한자학습 #실용일본어 #갤러리일본어 #미술감상
- 태그: #jlpt #n3 #일본어 #중급문법 #일본어시험 #양보표현 #복합문법 #실전연습 #일본어회화 #일본어공부
- #여행한자 #일본여행 #일본어한자 #jlpt #일본어공부 #여행일본어 #한자학습 #실용일본어 #관광한자 #한자암기
- #일본어문법 #たい문법 #n4문법 #희망표현 #일본어회화 #jlpt #일본어공부 #중급문법 #실용일본어 #욕구표현
- #일본어문법 #らしい문법 #n4문법 #추측표현 #일본어회화 #jlpt #일본어공부 #중급문법 #실용일본어 #문법정복
- #일본어문법 #そうだ문법 #n4문법 #추측표현 #일본어회화 #jlpt #일본어공부 #중급문법 #실용일본어 #외견추측
- #jlpt #n1 #일본어 #최고급문법 #일본어시험 #고급일본어 #실전연습 #문법정복 #문어체 #비즈니스일본어
- #일본여행 #환전일본어 #일본어회화 #바로써먹는일본어 #여행일본어 #실용일본어 #일본어공부 #여행준비
- 태그: #생활용품한자 #일본어한자 #jlpt #일본어공부 #생활일본어 #한자학습 #실용일본어 #일본생활 #한자암기 #일본쇼핑
- 태그: #일본사케 #ひやしぼり #사케리뷰 #최고금상 #프리미엄사케 #와인글래스사케 #일본술 #사케추천 #홈술 #사케페어링
- #문법 #일본어 #일어 #일본
- #일본어공부 #주차장일본어 #렌터카여행 #일본여행 #실용일본어 #여행일본어 #일본주차 #주차장표현 #일본어회화 #여행팁
- #일본요리 #요리일본어 #일본어회화 #바로써먹는일본어 #생활일본어 #실용일본어 #일본어공부 #요리교실
- 태그: #일본식당일본어 #일본어회화 #바로써먹는일본어 #여행일본어 #실용일본어 #일본어공부 #식당표현 #점원일본어 #일본맛집 #여행준비
- #jlpt #n5 #일본어 #기초문법 #일본어시험 #초급일본어 #실전연습 #문법기초 #일본어회화 #일본어공부
- #나가사키여행 #메가네바시 #일본여행 #혼자여행 #포토스팟 #일본문화 #여행후기 #나가사키맛집 #안경다리 #일본관광
- #일본식당예약 #일본여행 #일본어회화 #바로써먹는일본어 #여행일본어 #실용일본어 #일본어공부 #일본맛집
- #jlpt #n4 #일본어 #중급문법 #일본어시험 #조건표현 #경어 #실전연습 #일본어회화 #일본어공부
- 태그: #여름한자 #계절한자 #일본어한자 #jlpt #일본어공부 #여름일본어 #한자학습 #실용일본어 #계절표현 #한자암기
- #일본어문법 #を문법 #に문법 #조사완전정복 #n5문법 #일본어기초 #jlpt #일본어공부 #기초문법 #실용일본어
- 태그: #일본어문법 #結果문법 #n3문법 #인과관계표현 #일본어회화 #jlpt #일본어공부 #고급문법 #비즈니스일본어 #학술일본어
- #일본어문법 #のに문법 #n3문법 #대조표현 #양보표현 #jlpt #일본어공부 #감정표현 #실용일본어 #일본어중급
- #산마르짜노 #신퀀타 #블랙에디션 #이탈리아와인 #풀리아 #프리미티보 #네그로아마로 #풀바디와인 #베리향 #와인추천 #프리미엄와인 #와인리뷰 #이탈리아남부 #홈와인 #와인페어링
- #일본어문법 #ので문법 #n4문법 #이유표현 #정중표현 #jlpt #일본어공부 #비즈니스일본어 #실용일본어 #일본어중급
- #하동여행 #삼성궁 #경남여행 #국내여행 #드라이브코스 #힐링여행 #단군성지 #하동가볼만한곳
- #오토코야마 #남산사케 #홋카이도사케 #니혼슈 #일본술 #사케 #준마이다이긴죠 #몽드셀렉션 #삿포로여행 #사케추천 #일본여행선물 #이마트사케 #홋카이도여행
- #간염 #b형 #간암 #절제 #간경화
- #일본어 #한자 #일어 #일본
- 태그: #반려동물한자 #펫케어일본어 #일본어한자 #jlpt #일본어공부 #반려동물일본어 #한자학습 #실용일본어 #펫샵일본어 #한자암기
- #일본어메일 #바로써먹는일본어 #일본어회화 #비즈니스일본어 #일본어공부 #실용일본어 #이메일매너 #일본어표현
- Today
- Total
일상과 여행 사이, 작은 발견들을 기록합니다
Linux 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 활용에 도움이 되었기를 바랍니다. 궁금한 점이나 추가로 알고 싶은 내용이 있으시면 언제든 댓글로 남겨주세요! 💬✨
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'Linux' 카테고리의 다른 글
nmcli 명령어 심화 가이드: NetworkManager의 완벽한 제어 🌐 (0) | 2025.06.29 |
---|---|
Linux 기본 명령어 완전 정복 🐧 (0) | 2025.06.29 |
💽📊 리눅스 df 명령어 완벽 가이드: 디스크 사용량을 한눈에 파악하기 (0) | 2025.06.14 |
🐧 리눅스 사용자 주목! 내 리눅스 속에 또 다른 OS를 품다: 가상화 프로그램 소개 (3) | 2025.06.11 |
🐧 Ubuntu 설치 완벽 가이드: 리눅스 첫걸음! (8) | 2025.06.07 |