journalctl을 사용하여 Linux 시스템 로그를 읽는 방법

0
1323
Linux 랩톱 그래픽 데스크탑의 터미널 창
Fatmawati Achmad Zaenuri / 셔터 스톡

리눅스 시스템 로깅은 systemd. 사용법을 배우십시오 journalctl 시스템 로그 메시지를 읽고 필터링하는 명령입니다.

중앙 로깅

논쟁에 익숙한 사람은 없습니다. systemd 시스템 및 서비스 관리자는 시스템 로그를 수집하는 방식이 크게 변경되었습니다. 로그는 생성 한 서비스 또는 데몬에 따라 파일 시스템의 다른 위치에있었습니다. 그러나 그들은 모두 한 가지 공통점이있었습니다. 그들은 평문 파일이었다.

systemd 모든 시스템, 부팅 및 커널 로그 파일은 중앙의 전용 로깅 솔루션으로 수집 및 관리됩니다. 이들이 저장되는 형식은 이진 형식입니다. 이것이 촉진하는 한 가지는 JSON과 같은 다른 형식으로 데이터를 추출 할 수 있다는 것입니다.

또한 이전에 별도의 로그 파일에 기록 된 관련 정보를 쉽게 참조 할 수 있습니다. 이제 데이터가 단일 저널에 보관되므로 여러 관심있는 소스의 데이터를 선택하여 하나의 짜여진 항목 목록으로 표시 할 수 있습니다.

journalctl 저널 작업에 사용되는 도구입니다.

프릴이없는 journalctl

당신은 호출 할 수 있습니다 journalctl 명령 행 매개 변수없이 :

journalctl

터미널 창에서 journalctl

journalctl 목록의 맨 위에 가장 오래된 항목과 함께 전체 저널이 표시됩니다. 목록이 표시됩니다 less의 일반적인 탐색 기능을 사용하여 페이지를 만들고 검색 할 수 있습니다. less. 당신은 또한 사용할 수 있습니다 Left ArrowRight Arrow 넓은 로그 항목을 읽기 위해 옆으로 스크롤하는 키.

터미널 창에서 journalctl의 출력

누르면 End 키는 목록의 맨 아래 및 최신 로그 항목으로 바로 이동합니다.

최신 항목을 표시하는 터미널 창에서 journalctl의 출력

프레스 Ctrl+C 나가기 위해서.

관련 : Linux에서 less 명령을 사용하는 방법

이기는 하지만 journalctl 사용하지 않고 호출 가능 sudo를 사용하면 로그에 모든 세부 정보가 표시됩니다. sudo.

sudo journalctl

터미널 창에서 sudo journalctl

필요한 경우 만들 수 있습니다 journalctl 출력을 대신 터미널 창으로 보냅니다. less을 사용하여 --no-pager 선택권.

sudo journalctl --no-pager

터미널 창에 sudo journalctl --no-pager

출력이 터미널 창을 통해 빠르게 스크롤되고 명령 프롬프트로 돌아갑니다.

터미널 창에서 sudo journalctl --no-pager의 출력

줄 수를 제한하려면 journalctl 반환, 사용 -n (라인) 옵션. 10 줄의 출력을 요청합시다 :

sudo journalctl -n 10

터미널 창에서 sudo journalctl -n 10

저널 업데이트 다음

만들다 journalctl 저널에 도착한 최신 항목을 표시하려면 -f (따라) 옵션.

sudo journalctl -f

터미널 창에서 sudo journalctl -f

터미널 창에서 sudo journalctl -f의 출력

최신 항목의 타임 스탬프는 07:09:07입니다. 새로운 활동이 발생하면 새로운 항목이 디스플레이 하단에 추가됩니다. 거의 실시간 업데이트 — 멋지다!

새 항목이있는 터미널 창에서 sudo journalctl -f의 출력

07:09:59에 geek-app “HTG의 새 메시지”라고 적힌 로그에 저널을 삽입했습니다.

디스플레이 형식 변경

저널은 이진 파일이기 때문에 저널에 표시되기 전에 저널의 데이터를 텍스트로 변환하거나 구문 분석해야합니다. 다른 파서를 사용하면 동일한 이진 소스 데이터에서 다른 출력 형식을 만들 수 있습니다. 몇 가지 다른 형식이 있습니다 journalctl 사용할 수 있습니다.

기본 출력은 짧은 형식으로, 클래식 시스템 로그 형식과 매우 유사합니다. 짧은 형식을 명시 적으로 요청하려면 -o (출력) 옵션 short 수정 자.

sudo journalctl -n 10 -o short-full

터미널 창에서 sudo journalctl -n 10 -o short

왼쪽에서 오른쪽으로 필드는 다음과 같습니다.

  • 메시지가 작성된 시간 (현지 시간)
  • 호스트 이름
  • 프로세스 이름 이것이 메시지를 생성 한 프로세스입니다.
  • 로그 메시지

완전한 날짜 및 시간 소인을 얻으려면 short-full 수정 자 :

sudo journalctl -n 10 -o short-full

터미널 창에서 sudo journalctl -n 10 -o short-full

이 출력의 날짜 및 시간 형식은 곧 볼 수 있듯이 기간별로 로그 메시지를 선택할 때 날짜 및 시간을 제공해야하는 형식입니다.

각 로그 메시지와 함께 제공되는 모든 메타 데이터를 보려면 verbose 수정 자.

sudo journalctl -n 10 -o verbose

터미널 창에서 sudo journalctl -n 10 -o verbose

가능한 필드는 많지만 모든 필드가 메시지에 나타나는 경우는 거의 없습니다.

터미널 창에서 sudo journalctl -n 10 -o verbose의 출력

논의 할 가치가있는 한 가지 분야는 Priority 들. 이 예에서 값은 6입니다.이 값은 메시지의 중요도를 나타냅니다.

  • 0: 비상. 시스템을 사용할 수 없습니다.
  • 1: 경고. 즉시 정정해야하는 조건이 플래그되었습니다.
  • 2: 위독한. 여기에는 기본 응용 프로그램의 충돌, 코어 덤프 및 심각한 오류가 포함됩니다.
  • : 오류. 오류가보고되었지만 심각한 것으로 간주되지는 않습니다.
  • 4: 경고. 무시하면 오류가 될 수있는 상태를주의해서 가져옵니다.
  • 5: 공지 사항. 비정상이지만 오류는 아닌 이벤트를보고하는 데 사용됩니다.
  • 6: 정보. 정기적 인 운영 메시지. 조치가 필요하지 않습니다.
  • 7: 디버그. 디버깅하기 쉽도록 메시지를 응용 프로그램에 넣습니다.

출력이 올바르게 구성된 JSON (JavaScript Object Notation) 오브젝트로 표시되도록하려면 json 수정 자 :

sudo journalctl -n 10 -o json

터미널 창에서 sudo journalctl -n 10 -o json

각 메시지는 올바른 형식의 JSON 오브젝트로 올바르게 랩핑되며 출력 라인 당 하나의 메시지를 표시합니다.

JSON 출력을 예쁘게 인쇄하려면 json-pretty 수정 자.

sudo journalctl -n 10 -o json-pretty

터미널 창에서 sudo journalctl -n 10 -o json-pretty

각 JSON 객체는 여러 줄로 나뉘며 각 이름-값 쌍은 새 줄에 있습니다.

터미널 창에서 sudo journalctl -n 10 -o json-pretty의 출력

타임 스탬프 또는 기타 메타 데이터없이 로그 항목 메시지 만 보려면 cat 수정 자 :

sudo journalctl -n 10 -o cat

터미널 창에서 sudo journalctl -n 10 -o cat

이 표시 형식을 사용하면 일부 메시지에 실마리가 포함되어 있지만 로그 이벤트를 발생시킨 프로세스를 식별하기가 어려울 수 있습니다.

터미널 창에서 sudo journalctl -n 10 -o cat의 출력

기간별 로그 메시지 선택

출력을 제한하려면 journalctl 관심있는 기간에 -S (부터) 그리고 -U 옵션까지.

특정 시간 및 날짜 이후의 로그 항목을 보려면 다음 명령을 사용하십시오.

sudo journalctl -S "2020-91-12 07:00:00"

터미널 창에서 sudo journalctl -S "2020-91-12 07:00:00"

디스플레이에는 명령에서 날짜 및 시간 이후에 도착한 메시지 만 포함됩니다.

터미널 창에서 sudo journalctl -S "2020-91-12 07:00:00"의 출력

보고하려는 기간을 정의하려면 -S (부터) 그리고 -U (옵션까지) 함께. 이 명령은 15 분 동안의 로그 메시지를 확인합니다.

sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00"

터미널 창에서 sudo journalctl -S "2020-91-12 07:00:00"-U "2020-91-12 07:15:00"

시스템에서 이상한 일이 발생했을 때와 대략 일어 났을 때이를 잘 조합하여 사용할 수 있습니다.

터미널 창에서 sudo journalctl -S "2020-91-12 07:00:00"-U "2020-91-12 07:15:00"의 출력

상대 기간 사용

기간을 선택할 때 상대 주소를 사용할 수 있습니다. 즉,“하루 전부터 지금까지 모든 이벤트를 보여주십시오.”와 같은 것을 말할 수 있습니다. 이것이 바로이 명령의 의미입니다. “d”는 “day”를 나타내고 “-1″은 과거의 하루를 의미합니다.

sudo journalctl -S -1d

터미널 창에서 sudo journalctl -S -1d

로그 메시지는 어제 00:00:00부터 “지금”까지 표시됩니다.

터미널 창에서 sudo journalctl -S -1d의 출력

최근에 발생한 일을 조사하려는 경우 시간 단위로 측정되는 상대 시간을 지정할 수 있습니다. 지난 1 시간 동안의 로그 메시지를 검토 중입니다.

sudo journalctl -S -1h

터미널 창에서 sudo journalctl -S -1h

지난 1 시간 동안의 메시지가 표시됩니다. “m”을 사용하여 분 단위로 측정 된 상대 시간을 설정하고 몇 주 동안 “w”를 설정할 수도 있습니다.

터미널 창에서 sudo journalctl -S -1h의 출력

journalctl 이해한다 today, yesterday, tomorrow. 이 수정자는 공통 시간을 지정하는 편리한 방법을 제공합니다. 어제 발생한 모든 이벤트를 보려면 다음 명령을 사용하십시오.

sudo journalctl -S yesterday

sudo journalctl-터미널 창에서 어제

어제 발생한 00:00:00까지의 모든 저널 로그 이벤트가 검색되어 표시됩니다.

sudo journalctl의 출력-어제 터미널 창에서

지금까지받은 모든 로그 메시지를 보려면 다음 명령을 사용하십시오.

sudo journalctl -S today

터미널 창에서 오늘 sudo journalctl -S

00:00:00부터 명령이 실행될 때까지 모든 것이 표시됩니다.

터미널 창에서 오늘 sudo journalctl -S의 출력

다른 시간대 수정자를 혼합 할 수 있습니다. 이틀 전부터 오늘 시작까지 모든 것을 보려면 다음 명령을 사용하십시오.

sudo journalctl -S -2d -U today

터미널 창에서 오늘 sudo journalctl -S -2d -U

어제 전날부터 오늘까지의 모든 것이 검색되어 표시됩니다.

터미널 창에서 오늘 sudo journalctl -S -2d -U의 출력

데이터 필드별로 로그 메시지 선택

광범위한 저널 필드와 일치하는 로그 메시지를 검색 할 수 있습니다. 이러한 검색은 각 메시지에 첨부 된 메타 데이터에서 일치하는 항목을 찾으려고합니다. 필드 목록을 참조하여 가장 유용한 필드를 선택하는 것이 좋습니다.

응용 프로그램이 모든 필드를 완료하는지 여부는 전적으로 응용 프로그램 작성자에게 달려 있습니다. 모든 필드가 채워지는 것을 보장 할 수는 없습니다.

모든 저널 필드 수정자는 동일한 방식으로 사용됩니다. 아래 예에서 몇 가지를 사용하겠습니다. 특정 응용 프로그램에서 로그 메시지를 찾으려면 _COMM (명령) 수정 자. 당신이 또한 사용하는 경우 -f (따라) 옵션, journalctl 도착하면이 애플리케이션에서 새 메시지를 추적합니다.

sudo journalctl -f _COMM=geek-app

터미널 창에서 sudo journalctl -f _COMM = geek-app

로그 메시지를 생성 한 프로세스의 프로세스 ID를 사용하여 로그 항목을 검색 할 수 있습니다. 사용 ps 검색 할 데몬 또는 애플리케이션의 프로세스 ID를 찾는 명령입니다.

sudo journalctl _PID=751

터미널 창에서 sudo journalctl _PID = 751

이 기사를 연구하는 데 사용 된 머신에서 SSH 데몬은 프로세스 751입니다.

터미널 창에서 sudo journalctl _PID = 751의 출력

사용자 ID로 검색 할 수도 있습니다. 응용 프로그램이나 명령을 시작한 사람 또는 프로세스를 소유 한 사람의 사용자 ID입니다.

sudo journalctl _UID=1000

터미널 창에서 sudo journalctl _UID = 1000

다른 사용자 ID와 관련된 모든 메시지가 필터링됩니다. 사용자 1000과 관련된 메시지 만 표시됩니다.

터미널 창에서 sudo journalctl _UID = 1000의 출력

특정 응용 프로그램과 관련된 로그 메시지를 검색하는 다른 방법은 실행 파일의 경로를 제공하는 것입니다.

sudo journalctl /usr/bin/anacron

터미널 창에서 sudo journalctl / usr / bin / anacron

모든 anacron 스케줄러 로그 메시지가 검색되어 표시됩니다.

터미널 창에서 sudo journalctl / usr / bin / anacron의 출력

보다 쉽게 ​​검색 할 수 있도록 journalctl 저널 필드에 대해 보유하고있는 모든 값을 나열합니다.

사용자 ID를 보려면 journalctl 에 대한 로그 메시지를 기록했습니다. -F (필드) 옵션을 전달하고 _UID 필드 식별자.

journalctl -F _UID

터미널 창에서 journalctl -F _UID

다시 한 번 그룹 ID (GID)를 살펴 보겠습니다.

journalctl -F _GID

터미널 창에서 journalctl -F _GID

모든 저널 필드 ID로이를 수행 할 수 있습니다.

커널 메시지 나열

커널 메시지를 빠르게 격리 할 수있는 기본 제공 방법이 있습니다. 직접 검색하고 분리 할 필요가 없습니다. 그만큼 -k (커널) 옵션은 다른 모든 메시지를 제거하고 커널 로그 항목을 즉시 보여줍니다.

sudo journalctl -k

터미널 창에서 sudo journalctl -k

강조 표시는의 값에 따라 메시지의 중요성을 반영합니다. Priority 들.

터미널 창에서 sudo journalctl -k의 출력

부팅 메시지 검토

부팅과 관련하여 조사하려는 문제가있는 경우, journalctl 당신은 덮여있다. 새 하드웨어를 추가했는데 응답하지 않거나 마지막 시스템 업그레이드 후에 이전에 작동하던 하드웨어 구성 요소가 더 이상 작동하지 않을 수 있습니다.

마지막 부팅과 관련된 로그 항목을 보려면 -b (부팅) 옵션 :

journalctl -b

터미널 창에서 journalctl -b

마지막 부팅에 대한 로그 항목이 표시됩니다.

터미널 창에서 journalctl -b의 출력

“마지막 부팅”이라고 말하면 현재 로그인 한 세션 동안 컴퓨터를 활성화시키는 부팅 프로세스를 의미합니다. 이전 부츠를 보려면 숫자를 사용하여 journalctl 관심있는 부팅. 세 번째 이전 부팅을 보려면 다음 명령을 사용하십시오.

journalctl -b 3

터미널 창에서 journalctl -b 3의 출력

일반적으로 문제가 발생하여 컴퓨터를 재부팅해야한다면 이전 부팅 순서에 해당합니다. 따라서 일반적인 명령 형식입니다.

터미널 창에서 journalctl -b 3의 출력

부츠 순서와 혼동하기 쉽습니다. 도움을 요청할 수 있습니다 journalctl 저널에 기록 된 부츠를 나열하려면 --list-boots 선택권.

journalctl --list-boots

journalctl --list-boots는 터미널 창에서

날짜 및 타임 스탬프에서 메시지를 보려는 부팅을 식별 한 다음 왼쪽 열의 숫자를 사용하여 해당 부팅 순서에 대한 로그 메시지를 얻을 수 있습니다. 32 비트 부팅 식별자를 선택하여 전달할 수도 있습니다. journalctl.

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7

터미널 창에서 sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7

요청한 부팅 순서의 로그 메시지가 검색되어 표시됩니다.

터미널 창에서 sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7의 출력

저널 하드 드라이브 공간 관리

물론 저널과 모든 로그 메시지는 하드 드라이브에 저장됩니다. 그것은 그들이 하드 드라이브 공간을 차지한다는 것을 의미합니다. 저널이 얼마나 많은 공간을 차지했는지 확인하려면 --disk-usage 선택권.

journalctl --disk-usage

터미널 창에서 journalctl --disk-usage

오늘날의 하드 드라이브를 사용하면 152MB의 공간이 부족하지 않지만 시연을 위해 여전히 하드 디스크 공간을 줄입니다. 두 가지 방법이 있습니다. 첫 번째는 저널을 축소하려는 크기 제한을 설정하는 것입니다. 물론 다시 성장할 것이지만 이제는 새로운 성장에 대비할 수 있습니다.

우리는 멋진 제목을 사용합니다 --vacuum-size 옵션을 선택하고 저널 크기를 줄이십시오. 100MB를 요청합니다. 이것을 생각하는 방법은 우리가 묻는 것입니다 journalctl “가능한 모든 것을 버려야하지만 100MB 이하로 떨어지지 마십시오.”

journalctl --vacuum-size=100M

터미널 창에서 journalctl --vacuum-size = 100M

저널 크기를 다듬는 다른 방법은 --vacuum-time 선택권. 이 옵션은 journalctl 명령 줄에 제공 한 기간보다 오래된 메시지를 삭제합니다. 당신이 사용할 수있는 days, weeks, months, years 그 기간 동안.

일주일이 지난 모든 메시지를 제거하십시오.

journalctl --vacuum-time=1weeks

journalctl --vacuum-time = 1 주간 터미널 창

데이터 대 정보

데이터를 입수하여 활용할 수 없다면 데이터는 유용하지 않습니다. 그러면 유용한 정보가됩니다. 그만큼 journalctl command는 다양한 방법으로 관심있는 정보를 얻을 수있는 유연하고 정교한 도구입니다.

필요한 로그 메시지에 대한 정보 스 니펫 만 사용할 수 있습니다.