/var/log/syslog # 전체 시스템 로그 /var/log/auth.log # 인증 관련 로그 /var/log/kern.log # 커널 로그 /var/log/boot.log # 부팅 로그 /var/log/dmesg # 커널 링 버퍼 메시지 /var/log/cron.log # Cron 작업 로그
RHEL/CentOS 계열
/var/log/messages # 전체 시스템 로그 /var/log/secure # 인증 관련 로그 /var/log/maillog # 메일 서버 로그 /var/log/cron # Cron 작업 로그
애플리케이션 로그
/var/log/apache2/ # Apache 웹서버 (Debian/Ubuntu) /var/log/httpd/ # Apache 웹서버 (RHEL/CentOS) /var/log/nginx/ # Nginx 웹서버 /var/log/mysql/ # MySQL 데이터베이스 /var/log/postgresql/ # PostgreSQL 데이터베이스
tail 명령어
# 마지막 10줄 확인 (기본) tail /var/log/syslog
# 마지막 N줄 확인 tail -n 50 /var/log/syslog tail -n 100 /var/log/auth.log
# 실시간 로그 모니터링 (가장 많이 사용) tail -f /var/log/syslog
# 여러 파일 동시 모니터링 tail -f /var/log/syslog /var/log/auth.log
# 파일 처음부터 모니터링 tail -f -n +1 /var/log/syslog
head 명령어
# 처음 10줄 확인 head /var/log/syslog
# 처음 N줄 확인 head -n 50 /var/log/syslog
cat 명령어
# 전체 로그 출력 cat /var/log/syslog
# 페이지 단위로 확인 cat /var/log/syslog | less cat /var/log/syslog | more
less/more 명령어
# 스크롤 가능한 뷰어로 확인 less /var/log/syslog more /var/log/syslog
# less에서 사용 가능한 키 # Space: 다음 페이지 # b: 이전 페이지 # /: 검색 # n: 다음 검색 결과 # N: 이전 검색 결과 # G: 파일 끝으로 # g: 파일 처음으로 # q: 종료
3. 로그 검색 및 필터링
grep을 이용한 검색
# 특정 키워드 검색 grep "error" /var/log/syslog
# 대소문자 무시하고 검색 grep -i "error" /var/log/syslog
# 여러 파일에서 검색 grep "error" /var/log/*.log
# 재귀적으로 디렉토리 전체 검색 grep -r "error" /var/log/
# 줄 번호와 함께 표시 grep -n "error" /var/log/syslog
# 매칭된 줄의 이전/이후 컨텍스트 포함 grep -A 5 "error" /var/log/syslog # 이후 5줄 grep -B 5 "error" /var/log/syslog # 이전 5줄 grep -C 5 "error" /var/log/syslog # 전후 5줄
# 실시간 로그에서 검색 tail -f /var/log/syslog | grep "error" tail -f /var/log/syslog | grep -i "error\|warning"
# 제외 검색 grep -v "info" /var/log/syslog
# 정규표현식 사용 grep -E "error|warning|critical" /var/log/syslog
awk를 이용한 로그 분석
# 특정 컬럼만 출력 awk '{print $1, $2, $3}' /var/log/syslog
# 조건부 출력 awk '/error/ {print $0}' /var/log/syslog
# 특정 필드 기준 필터링 awk '$5 == "error"' /var/log/syslog
sed를 이용한 텍스트 처리
# 특정 라인 범위만 출력 sed -n '100,200p' /var/log/syslog
# 패턴 매칭된 라인 출력 sed -n '/error/p' /var/log/syslog
4. 압축된 로그 파일 확인
시스템은 오래된 로그를 자동으로 압축하여 저장합니다.
# .gz 압축 로그 확인 zcat /var/log/syslog.1.gz zless /var/log/syslog.1.gz zmore /var/log/syslog.1.gz
# 압축 로그에서 검색 zgrep "error" /var/log/syslog.1.gz zgrep "error" /var/log/syslog.*.gz
# .bz2 압축 로그 확인 bzcat /var/log/syslog.1.bz2 bzgrep "error" /var/log/syslog.1.bz2
# .xz 압축 로그 확인 xzcat /var/log/syslog.1.xz xzgrep "error" /var/log/syslog.1.xz
5. 커널 로그 확인
# dmesg - 커널 링 버퍼 메시지 dmesg
# 최근 메시지만 dmesg | tail
# 실시간 모니터링 dmesg -w
# 사람이 읽기 편한 시간 형식 dmesg -T
# 레벨별 필터링 dmesg --level=err dmesg --level=warn
# 특정 장치 관련 메시지 dmesg | grep -i usb dmesg | grep -i network
# 특정 기간 분석 sudo logwatch --range "between -7 days and -1 days"
# 이메일로 전송 sudo logwatch --mailto admin@example.com
7. 로그 로테이션 (logrotate)
로그 파일이 무한정 커지는 것을 방지하기 위한 로그 로테이션 설정입니다.
# logrotate 설정 파일 /etc/logrotate.conf # 메인 설정 /etc/logrotate.d/ # 애플리케이션별 설정
# 설정 예시 /var/log/myapp/*.log { daily # 일별 로테이션 rotate 7 # 7개 보관 compress # 압축 delaycompress # 최신 파일은 압축 안 함 missingok # 파일 없어도 에러 안 냄 notifempty # 빈 파일은 로테이트 안 함 create 0644 root root # 새 파일 권한 sharedscripts postrotate systemctl reload myapp endscript }
# 수동 실행 (테스트) sudo logrotate -d /etc/logrotate.conf # 드라이런 sudo logrotate -f /etc/logrotate.conf # 강제 실행
8. 권한 관련
대부분의 시스템 로그는 root 권한이 필요합니다.
# sudo 사용 sudo tail -f /var/log/syslog sudo journalctl -f sudo less /var/log/auth.log
# 일반 사용자가 읽을 수 있는 로그 ~/.bash_history # 명령어 히스토리 ~/.xsession-errors # X 세션 에러
9. 로그 분석 실전 예제
실패한 로그인 시도 확인
# auth.log에서 실패한 SSH 로그인 확인 grep "Failed password" /var/log/auth.log