CodeGym /행동 /Docker SELF /로깅 및 시스템 로그 보기: 명령어 `journalctl`

로깅 및 시스템 로그 보기: 명령어 `journalctl`

Docker SELF
레벨 3 , 레슨 1
사용 가능

로깅 및 시스템 로그 보기: 명령어 journalctl

1. 로그 작업은 왜 필요한가?

로그(또는 저널)는 시스템에서 일어나는 중요한 모든 작업을 기록하는 너만의 "탐정" 같은 거야. 커널, 애플리케이션, 서비스 및 시스템의 다른 구성 요소의 작업을 기록하지. 로그는 문제를 진단하고 시스템 성능을 모니터링하는 데 중요한 도구야.

서버가 갑자기 반응을 멈춘다고 상상해봐. 셜록 홈즈처럼 뭐가 잘못됐는지 추측하는 대신 로그를 한 번 열어보면 돼 — 모든 게 거기 적혀 있어. 예를 들면: "서비스 ssh 중단됨", "디스크가 꽉 참", "고양이가 키보드 위를 뛰어다니며 중요한 서비스를 멈춤". 로그는 모든 걸 알려줄 거야.

시스템 로그 작업은 다음과 같은 데에 도움이 돼:

  1. 문제 진단. 뭔가 잘못됐다면 로그에서 에러나 경고를 찾을 수 있어.
  2. 서비스 작업 모니터링. 예를 들어, PostgreSQL 데이터베이스가 왜 멈췄는지 또는 웹 서버가 마지막으로 업데이트된 시간은 언제였는지 알 수 있어.
  3. 분석 데이터 수집. 서비스 성능과 메트릭 모니터링.
  4. 보안 강화. 로그는 SSH를 통한 해킹 시도나 비인가된 접근을 보여줄 수 있어.

2. journalctl 소개

journalctl은 Linux에서 시스템 로그를 보고 필터링할 수 있는 강력한 명령어야. 이 명령어는 systemd-journald라는 로그 수집 및 저장 시스템에서 작동하며, 이는 systemd에 의해 관리돼.

journalctl로 기본 작업하기

우선, 이 유틸리티를 어떻게 사용하는지 살펴보자. 터미널을 열고 다음을 입력해봐:

journalctl

이 명령어는 모든 시스템 로그를 볼 수 있게 해주고, 로그는 시간순으로 정렬돼서 나와. 뭔가 간단한 걸 기대했다면 놀랄 수도 있어. 로그가 화면을 몇 페이지나 차지할 정도로 많을 수 있거든. 겁먹지 마, 나중에 필터링하는 방법도 배울 거야.

이제 로그 보기를 끝내려면 q를 누르면 돼 (lessjournalctl의 유사성을 벌써 알아챘지?).


시간으로 로그 필터링하기

이제 로그를 더 다루기 쉽게 범위를 좁혀보자.

최근 한 시간 동안의 로그 보기

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라는 단어가 포함된 줄만 보여줄 거야. ERRORWARNING, failed 또는 panic 같은 다른 단어로 바꿀 수도 있어.


3. journalctl의 특별한 옵션

재부팅 후의 기록만 보기

시스템의 마지막 부팅 이후에 무슨 일이 있었는지 알고 싶어? 신기하지? 그냥 이렇게 해봐:

journalctl -b

시스템의 각 재부팅은 별도의 "블록"으로 기록돼. 지난번 부팅 이후의 기록을 보고 싶다면 (맞아, 이런 게 유용할 때가 있어):

journalctl -b -1

사용자 또는 PID로 필터링

가끔 특정 사용자나 프로세스의 동작을 추적해야 할 때가 있어. 예를 들어:

journalctl _UID=1000

1000을 사용자 ID로 바꿔 (사용자 ID는 id 명령어로 확인할 수 있어).

PID (프로세스 아이디)로 필터링하려면:

journalctl _PID=1234

4. 실습 예제

  1. SSH 서비스 오류 검색.

    SSH가 왜 연결을 거부하는지 알고 싶나요. 아래 명령어를 사용하세요:

    journalctl -u ssh | grep "ERROR"
    
  2. CRON의 지난 24시간 로그 분석.

    예를 들어, 하루에 한 번 실행되는 스크립트가 작동하지 않은 이유를 확인한다면:

    journalctl -u cron --since "yesterday"
    
  3. 웹 서버의 실시간 모니터링.

    웹 서버가 부하를 받고 있나요? 오류 로그를 확인하세요:

    journalctl -u nginx -f
    

자율 학습을 위한 연습

  1. 지난 24시간 동안 SSH 서비스 오류 로그를 찾아보세요.
  2. journalctl을 사용하여 CRON 로그를 아침 시간대에만 출력하세요. 명령어가 올바른 시간 범위로 작동하는지 확인하세요.
  3. systemd 로그를 실시간으로 모니터링하고 몇 가지 시스템 서비스를 실행하여 로그에 상태를 확인하세요.

로깅은 단순히 오류를 참고하거나 문제를 진단하는 것 이상의 역할을 합니다. 이는 전체 운영 체제의 상태를 모니터링할 수 있는 비밀 요원이죠. journalctl 명령어를 익히면 Linux 시스템의 안정적인 작동을 분석, 최적화 및 보장하는 데 필요한 강력한 도구를 갖추게 됩니다.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION