로깅 및 시스템 로그 보기: 명령어 journalctl
1. 로그 작업은 왜 필요한가?
로그(또는 저널)는 시스템에서 일어나는 중요한 모든 작업을 기록하는 너만의 "탐정" 같은 거야. 커널, 애플리케이션, 서비스 및 시스템의 다른 구성 요소의 작업을 기록하지. 로그는 문제를 진단하고 시스템 성능을 모니터링하는 데 중요한 도구야.
서버가 갑자기 반응을 멈춘다고 상상해봐. 셜록 홈즈처럼 뭐가 잘못됐는지 추측하는 대신 로그를 한 번 열어보면 돼 — 모든 게 거기 적혀 있어. 예를 들면: "서비스 ssh
중단됨", "디스크가 꽉 참", "고양이가 키보드 위를 뛰어다니며 중요한 서비스를 멈춤". 로그는 모든 걸 알려줄 거야.
시스템 로그 작업은 다음과 같은 데에 도움이 돼:
- 문제 진단. 뭔가 잘못됐다면 로그에서 에러나 경고를 찾을 수 있어.
- 서비스 작업 모니터링. 예를 들어, PostgreSQL 데이터베이스가 왜 멈췄는지 또는 웹 서버가 마지막으로 업데이트된 시간은 언제였는지 알 수 있어.
- 분석 데이터 수집. 서비스 성능과 메트릭 모니터링.
- 보안 강화. 로그는 SSH를 통한 해킹 시도나 비인가된 접근을 보여줄 수 있어.
2. journalctl
소개
journalctl
은 Linux에서 시스템 로그를 보고 필터링할 수 있는 강력한 명령어야. 이 명령어는 systemd-journald
라는 로그 수집 및 저장 시스템에서 작동하며, 이는 systemd
에 의해 관리돼.
journalctl
로 기본 작업하기
우선, 이 유틸리티를 어떻게 사용하는지 살펴보자. 터미널을 열고 다음을 입력해봐:
journalctl
이 명령어는 모든 시스템 로그를 볼 수 있게 해주고, 로그는 시간순으로 정렬돼서 나와. 뭔가 간단한 걸 기대했다면 놀랄 수도 있어. 로그가 화면을 몇 페이지나 차지할 정도로 많을 수 있거든. 겁먹지 마, 나중에 필터링하는 방법도 배울 거야.
이제 로그 보기를 끝내려면 q
를 누르면 돼 (less
와 journalctl
의 유사성을 벌써 알아챘지?).
시간으로 로그 필터링하기
이제 로그를 더 다루기 쉽게 범위를 좁혀보자.
최근 한 시간 동안의 로그 보기
journalctl --since "1 hour ago"
특정 날짜의 로그 보기
journalctl --since "2023-10-31"
시간 범위 지정
오전 8시부터 9시까지의 이벤트를 보고 싶어? 문제없어:
journalctl --since "2023-10-31 08:00:00" --until "2023-10-31 09:00:00"
시간 필터링은 특정 시간에 문제가 발생했음을 알고 있을 때 유용해. 예를 들어, 추리 소설의 범인을 찾기 위해 책 전체를 읽는 대신 마지막 페이지를 보는 것과 비슷하지.
특정 서비스의 로그 작업
시스템 전체 확인 대신, 한 가지 서비스에 집중할 수도 있어. 예를 들어, nginx
웹 서버가 어떻게 작동하는지 보고 싶다면 이렇게 해:
journalctl -u nginx
최근 한 시간 동안의 기록만 보고 싶다면 (우리 모두 최신 정보를 좋아하니까):
journalctl -u nginx --since "1 hour ago"
간단한 사례들:
-u ssh
: SSH 서비스 로그.-u cron
: CRON 작업 로그.-u mysql
: MySQL 데이터베이스 로그.
실시간으로 로그 읽기
무언가를 실시간으로 수정할 때, 로그를 실시간으로 확인하는 것이 유용할 수 있어 — 축구 경기 실시간 중계를 보는 것처럼. 이럴 때는 다음 명령어를 사용해:
journalctl -f
-f
옵션은 tail -f
와 비슷하게 작동해서, 새 로그 기록이 나타날 때마다 보여줘.
예를 들면, 이 명령어를 실행하고 동시에 어떤 서비스를 재시작해봐:
sudo systemctl restart ssh
변경 사항을 볼 수 있을 거야 — 재시작 기록이 로그에 나타날 거야.
로그에서 오류 검색하기
종종 로그는 너무 길어서 흥미로운 정보를 수동으로 찾는 게 거의 건초더미에서 바늘 찾기와 같아. 그래서 키워드를 이용한 검색이 가능해.
간단한 사용법:
journalctl | grep "ERROR"
이 예제는 ERROR
라는 단어가 포함된 줄만 보여줄 거야. ERROR
를 WARNING
, failed
또는 panic
같은 다른 단어로 바꿀 수도 있어.
3. journalctl
의 특별한 옵션
재부팅 후의 기록만 보기
시스템의 마지막 부팅 이후에 무슨 일이 있었는지 알고 싶어? 신기하지? 그냥 이렇게 해봐:
journalctl -b
시스템의 각 재부팅은 별도의 "블록"으로 기록돼. 지난번 부팅 이후의 기록을 보고 싶다면 (맞아, 이런 게 유용할 때가 있어):
journalctl -b -1
사용자 또는 PID로 필터링
가끔 특정 사용자나 프로세스의 동작을 추적해야 할 때가 있어. 예를 들어:
journalctl _UID=1000
1000
을 사용자 ID로 바꿔 (사용자 ID는 id
명령어로 확인할 수 있어).
PID (프로세스 아이디)로 필터링하려면:
journalctl _PID=1234
4. 실습 예제
SSH 서비스 오류 검색.
SSH가 왜 연결을 거부하는지 알고 싶나요. 아래 명령어를 사용하세요:
journalctl -u ssh | grep "ERROR"
CRON의 지난 24시간 로그 분석.
예를 들어, 하루에 한 번 실행되는 스크립트가 작동하지 않은 이유를 확인한다면:
journalctl -u cron --since "yesterday"
웹 서버의 실시간 모니터링.
웹 서버가 부하를 받고 있나요? 오류 로그를 확인하세요:
journalctl -u nginx -f
자율 학습을 위한 연습
- 지난 24시간 동안 SSH 서비스 오류 로그를 찾아보세요.
journalctl
을 사용하여 CRON 로그를 아침 시간대에만 출력하세요. 명령어가 올바른 시간 범위로 작동하는지 확인하세요.systemd
로그를 실시간으로 모니터링하고 몇 가지 시스템 서비스를 실행하여 로그에 상태를 확인하세요.
로깅은 단순히 오류를 참고하거나 문제를 진단하는 것 이상의 역할을 합니다. 이는 전체 운영 체제의 상태를 모니터링할 수 있는 비밀 요원이죠. journalctl
명령어를 익히면 Linux 시스템의 안정적인 작동을 분석, 최적화 및 보장하는 데 필요한 강력한 도구를 갖추게 됩니다.
GO TO FULL VERSION