Linux 로그 확인 및 관리 방법

Linux 로그 시스템 개요

Linux 시스템에서 로그는 시스템 상태, 애플리케이션 동작, 보안 이벤트 등을 추적하는 중요한 도구입니다. 로그를 효과적으로 관리하고 분석하는 것은 시스템 관리자와 개발자에게 필수적인 역량입니다.

1. systemd 기반 로그 관리 (journalctl)

현대 Linux 배포판의 대부분은 systemd를 사용하며, journalctl은 systemd의 로그 조회 도구입니다.

기본 조회

# 전체 시스템 로그 확인
journalctl

# 최근 로그만 확인 (기본 10줄)
journalctl -n

# 최근 100줄 확인
journalctl -n 100

# 실시간으로 로그 확인 (tail -f 처럼)
journalctl -f

# 페이지 단위로 확인 (기본)
journalctl --no-pager

서비스별 로그 확인

# 특정 서비스 로그 확인
journalctl -u nginx.service
journalctl -u apache2.service
journalctl -u mysql.service

# 여러 서비스 동시 확인
journalctl -u nginx.service -u mysql.service

# 서비스 로그 실시간 모니터링
journalctl -u nginx.service -f

시간 기반 필터링

# 특정 날짜 범위
journalctl --since "2024-01-01" --until "2024-01-02"

# 상대적 시간
journalctl --since "1 hour ago"
journalctl --since "30 minutes ago"
journalctl --since "yesterday"
journalctl --since "today"

# 특정 시각부터
journalctl --since "2024-01-01 14:30:00"

# 부팅 로그 확인
journalctl -b # 현재 부팅
journalctl -b -1 # 이전 부팅
journalctl --list-boots # 부팅 목록

우선순위별 필터링

# 에러 레벨 이상만 표시
journalctl -p err

# 경고 레벨 이상
journalctl -p warning

# 우선순위 레벨: emerg(0), alert(1), crit(2), err(3), warning(4), notice(5), info(6), debug(7)

출력 형식 지정

# JSON 형식으로 출력
journalctl -o json

# 상세한 JSON 형식
journalctl -o json-pretty

# 간결한 형식
journalctl -o short

# 자세한 형식
journalctl -o verbose

2. 전통적인 로그 파일 관리

주요 로그 파일 위치

Debian/Ubuntu 계열

/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

6. 고급 로그 분석 도구

multitail - 여러 로그 동시 모니터링

# 설치
sudo apt install multitail # Debian/Ubuntu
sudo yum install multitail # RHEL/CentOS

# 여러 파일 동시 모니터링
multitail /var/log/syslog /var/log/auth.log

# 색상 구분
multitail -c /var/log/syslog /var/log/auth.log

# 분할 화면
multitail -s 2 /var/log/syslog /var/log/auth.log
# 설치
sudo apt install lnav # Debian/Ubuntu
sudo yum install lnav # RHEL/CentOS

# 사용 (자동으로 로그 파일 감지)
lnav

# 특정 파일 열기
lnav /var/log/syslog

# 여러 파일 동시에
lnav /var/log/syslog /var/log/auth.log

# lnav 주요 기능
# - 자동 로그 포맷 인식
# - 타임스탬프 기준 정렬
# - SQL 쿼리를 통한 로그 분석
# - 히스토그램 뷰
# - 실시간 tail 모드

logwatch - 로그 분석 및 요약

# 설치
sudo apt install logwatch

# 오늘의 로그 요약
sudo logwatch --detail low --range today

# 특정 기간 분석
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

# IP 주소별 실패 횟수 집계
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr

# journalctl 사용
journalctl -u ssh.service | grep "Failed password"

디스크 공간 부족 원인 찾기

# 큰 로그 파일 찾기
sudo du -h /var/log/* | sort -rh | head -20

# 특정 에러 메시지 검색
grep -i "no space left" /var/log/syslog

특정 시간대 에러 추적

# 오늘 오전 10시부터 11시까지의 에러
journalctl --since "10:00:00" --until "11:00:00" -p err

# 어제 발생한 모든 에러
journalctl --since yesterday --until today -p err

서비스 재시작 확인

# nginx 재시작 로그 확인
journalctl -u nginx.service --since "1 hour ago"

# 서비스 상태 변경 추적
journalctl -u nginx.service | grep -E "Started|Stopped|Reloaded"

네트워크 관련 이슈 추적

# 네트워크 인터페이스 관련 로그
dmesg | grep -i eth0
journalctl -k | grep -i network

# 연결 타임아웃 검색
grep -i "timeout\|connection refused" /var/log/syslog

10. 로그 모니터링 베스트 프랙티스

정기적인 로그 검토

# 일일 체크리스트 스크립트 예시
#!/bin/bash
echo "=== Failed Login Attempts ==="
grep "Failed password" /var/log/auth.log | tail -10

echo -e "\n=== Errors in Last Hour ==="
journalctl --since "1 hour ago" -p err

echo -e "\n=== Disk Space ==="
df -h | grep -v tmpfs

echo -e "\n=== Top 10 Largest Log Files ==="
du -h /var/log/* | sort -rh | head -10

중요 로그 알림 설정

# crontab에 추가하여 정기적으로 체크
*/30 * * * * grep -i "critical\|emergency" /var/log/syslog | mail -s "Critical System Alert" admin@example.com

로그 중앙 집중화

  • rsyslog를 사용한 원격 로그 전송
  • ELK Stack (Elasticsearch, Logstash, Kibana)
  • Graylog
  • Splunk

참고 자료

Share