Skip to content

로그 관리 ​

로그가 필요한 이유 ​

장애 발생 시 언제, 어떤 상태에서 문제가 생겼는지 추적하기 위해서다. 로그가 없으면 재현이 어렵고 원인 분석이 불가능하다.

로그 작성 기본 ​

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