Linux /var/log 운영 관점 정리
Linux /var/log와 systemd journal 운영 가이드입니다. syslog, auth 로그, kernel 로그, journalctl 검색, 시간 범위 조회, logrotate와 보관 정책을 정리했습니다.
/var/log는 전통적인 Linux 로그 파일이 모이는 디렉터리입니다. 다만 systemd 기반 배포판에서는 journalctl이 1차 로그 조회 도구인 경우도 많습니다. 운영에서는 파일 로그와 journald를 함께 볼 줄 알아야 합니다.
로그 분석은 단순히 tail -f를 켜는 일이 아닙니다. 장애 시간, 관련 서비스, 커널 이벤트, 인증 이벤트, 애플리케이션 로그를 같은 시간축에 놓고 확인해야 원인을 빠르게 좁힐 수 있습니다.
주요 로그 파일
/var/log/messages: RHEL 계열의 일반 시스템 로그/var/log/secure: RHEL 계열 인증/보안 로그/var/log/syslog: Ubuntu/Debian 계열 일반 시스템 로그/var/log/auth.log: Ubuntu/Debian 계열 인증 로그/var/log/kern.log: 커널 로그/var/log/dmesg: 부팅 시 커널 ring buffer 기록/var/log/wtmp,/var/log/btmp: 로그인 성공/실패 기록/var/log/audit/audit.log: SELinux, auditd 기반 보안 이벤트/var/log/nginx/,/var/log/httpd/,/var/log/apache2/: 웹 서버 access/error log
자주 쓰는 조회 명령
sudo tail -f /var/log/messages
sudo tail -f /var/log/syslog
sudo journalctl -xe --no-pager
sudo journalctl -k -n 100 --no-pager
sudo journalctl -u sshd -n 100 --no-pager
로그 파일이 압축되어 회전된 경우에는 zgrep로 과거 로그를 같이 검색합니다.
sudo grep -i "error" /var/log/messages
sudo zgrep -i "error" /var/log/messages-*.gz 2>/dev/null
sudo grep -R "permission denied" /var/log/nginx /var/log/httpd /var/log/apache2 2>/dev/null
시간대 기준 검색
sudo journalctl -S "2026-06-23 14:00:00" -U "2026-06-23 15:00:00" --no-pager
sudo journalctl -u nginx -S -30min --no-pager
sudo grep -i "error" /var/log/messages
서버 시간대가 UTC인지 KST인지 먼저 확인합니다. 장애 리포트의 시간대와 서버 로그 시간대가 다르면 원인 구간을 놓치기 쉽습니다.
timedatectl
date --iso-8601=seconds
sudo journalctl --since "today" --no-pager | tail -n 50
인증 로그 확인
last -n 20
sudo lastb -n 20 2>/dev/null
sudo journalctl -u sshd -S -24h --no-pager
sudo grep -E "Accepted|Failed|Invalid user|session opened|session closed" /var/log/secure 2>/dev/null
sudo grep -E "Accepted|Failed|Invalid user|session opened|session closed" /var/log/auth.log 2>/dev/null
인증 로그를 외부 공유할 때는 IP, 계정명, host fingerprint, 내부 hostname을 필요한 수준으로 마스킹합니다.
로그 회전
로그 파일은 logrotate로 회전됩니다. 오래된 로그는 .1, .gz 형태로 남을 수 있습니다.
ls -lh /var/log
cat /etc/logrotate.conf
ls /etc/logrotate.d/
sudo logrotate -d /etc/logrotate.conf
-d는 dry-run입니다. 실제 강제 회전은 운영 중인 서비스의 파일 핸들과 postrotate 스크립트에 영향을 줄 수 있으므로 신중하게 실행합니다.
sudo logrotate -f /etc/logrotate.d/nginx
sudo lsof | grep deleted | grep log
로그 용량 문제
sudo du -xhd1 /var/log | sort -h
sudo journalctl --disk-usage
sudo journalctl --vacuum-time=14d
journalctl --vacuum-* 명령은 journald 보관 로그를 삭제하므로 운영 정책에 맞게 사용합니다.
journald 보관 설정
grep -E "^(Storage|SystemMaxUse|RuntimeMaxUse|MaxRetentionSec)=" /etc/systemd/journald.conf
sudo journalctl --disk-usage
sudo systemctl restart systemd-journald
로그 보관 기간은 장애 분석, 보안 감사, 디스크 용량의 균형입니다. “디스크가 찼으니 삭제”가 아니라 어떤 로그가 왜 늘었는지 먼저 확인합니다.
장애 분석 시 남길 것
- 장애 시작/종료 시간
- 관련 systemd unit 로그
- 커널 로그
- 인증/권한 로그
- 애플리케이션 error log
- 해당 시간대의 배포/설정 변경 여부
로그 내용에는 IP, 사용자명, 토큰, 요청 본문 같은 민감정보가 들어갈 수 있습니다. 외부 공유 전에는 필요한 부분만 발췌하고 민감값을 제거해야 합니다.