로그 관리
로그가 필요한 이유
장애 발생 시 언제, 어떤 상태에서 문제가 생겼는지 추적하기 위해서다. 로그가 없으면 재현이 어렵고 원인 분석이 불가능하다.
로그 작성 기본
bash
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
LOG_FILE=/var/log/agent-app/monitor.log
echo "[$TIMESTAMP] PID:$PID CPU:${CPU}% MEM:${MEM}% DISK_USED:${DISK}%" >> $LOG_FILE>> 는 기존 파일에 이어 쓴다. > 는 기존 내용을 덮어쓴다.
로그 용량 관리 (logrotate)
로그를 방치하면 디스크를 가득 채운다. logrotate로 자동 관리한다.
bash
# 설정 파일 생성
vi /etc/logrotate.d/agent-app
# 내용
/var/log/agent-app/monitor.log {
size 10M # 10MB 초과 시 rotate
rotate 10 # 최대 10개 파일 유지
compress # 이전 파일 gzip 압축
missingok # 파일 없어도 오류 없이 진행
notifempty # 파일이 비어 있으면 rotate 안 함
}스크립트 내 직접 구현 방식
bash
LOG_FILE=/var/log/agent-app/monitor.log
MAX_SIZE=$((10 * 1024 * 1024)) # 10MB
if [ -f "$LOG_FILE" ] && [ $(stat -c%s "$LOG_FILE") -ge $MAX_SIZE ]; then
mv "$LOG_FILE" "${LOG_FILE}.$(date '+%Y%m%d%H%M%S')"
fi전체 흐름
로그 관리는 지금까지 다룬 리눅스 개념들이 이어지는 흐름의 마지막 단계다.
계정/그룹 분리
└── 파일 권한 + ACL 적용
└── monitor.sh 소유/실행 권한 제어
└── cron이 agent-admin으로 매분 실행
└── 프로세스/포트/리소스 수집
└── /var/log/agent-app/monitor.log 기록
└── logrotate로 용량 관리SSH 보안과 방화벽은 이 흐름의 바깥에서 외부 접근 자체를 제어하는 레이어다.
정리
- 로그는 장애 발생 시점과 상태를 추적하기 위해 남긴다.
>>는 이어 쓰기,>는 덮어쓰기다.- 용량 관리는 logrotate(
size 10M,rotate 10,compress등) 또는 스크립트 내 직접 구현(10MB 이상이면 타임스탬프를 붙여mv)으로 한다. - 전체 흐름: 계정/그룹 분리 → 권한 + ACL → monitor.sh 권한 제어 → cron 매분 실행 → 수집 →
monitor.log기록 → logrotate. SSH와 방화벽은 그 바깥에서 외부 접근을 제어한다.
출처: Codyssey-B1/B4-1
