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

systemd의 도입으로 Linux 시스템 로깅이 변경되었습니다. journalctl 명령을 사용하여 시스템 로그 메시지를 읽고 필터링하는 방법을 알아봅니다.

중앙 집중식 로깅

논란이 되고 있는 것은 당연하지만, systemd 시스템과 서비스 관리자는 시스템 로그를 수집하는 방식에 중대한 변화를 가져왔습니다. 로그는 로그를 생성한 서비스 또는 데몬에 따라 파일 시스템의 다른 위치에 있었습니다. 그러나 그들 모두에게는 한 가지 공통점이 있었습니다. 그것들은 일반 텍스트 파일이었습니다.

systemd를 사용하면 중앙의 전용 로깅 솔루션에서 모든 시스템, 부팅 및 커널 로그 파일을 수집하고 관리합니다. 저장되는 형식은 바이너리 형식입니다. 이를 통해 다음과 같은 다양한 형식으로 데이터를 추출할 수 있습니다. JSON, 우리가 보게 될 것입니다.

또한 이전에 별도의 로그 파일에 기록되었을 관련 정보를 더 쉽게 상호 참조할 수 있습니다. 데이터가 이제 단일 저널에 보관되기 때문에 여러 관심 소스의 데이터를 선택하고 하나의 엮인 항목 목록에 표시할 수 있습니다.

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

군더더기 없는 journalctl

명령줄 매개변수 없이 journalctl을 호출할 수 있습니다.

journalctl

journalctl은 가장 오래된 항목이 목록의 맨 위에 오도록 전체 저널을 표시합니다. 목록이 less에 표시되어 less의 일반적인 탐색 기능을 사용하여 페이지를 탐색하고 검색할 수 있습니다. 왼쪽 화살표 및 오른쪽 화살표 키를 사용하여 옆으로 스크롤하여 넓은 로그 항목을 읽을 수도 있습니다.

End 키를 누르면 목록의 맨 아래로 바로 이동하고 최신 로그 항목이 표시됩니다.

Ctrl+C를 눌러 종료합니다.

sudo를 사용하지 않고 journalctl을 호출할 수 있지만 당신은 당신이 모든 세부 사항을 볼 수 있도록 sudo를 사용하는 경우 로그 내에서.

sudo journalctl

필요한 경우 –no-pager 옵션을 사용하여 journalctl이 출력을 less 대신 터미널 창으로 보내도록 할 수 있습니다.

sudo journalctl --no-pager

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

journalctl이 반환하는 줄 수를 제한하려면 -n(줄) 옵션을 사용합니다. 10줄의 출력을 요청해 보겠습니다.

sudo journalctl -n 10

저널 업데이트에 따라

저널에 도착할 때 journalctl이 최신 항목을 표시하도록 하려면 -f(follow) 옵션을 사용하십시오.

sudo journalctl -f

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

07:09:59에 geek-app이라는 애플리케이션이 저널에 “New Message from HTG”라는 로그 항목을 삽입했습니다.

표시 형식 변경

저널은 이진 파일이기 때문에 그 안의 데이터를 번역하거나 텍스트로 구문 분석해야 표시할 수 있습니다. 다른 파서를 사용하면 동일한 이진 소스 데이터에서 다른 출력 형식을 만들 수 있습니다. journalctl이 사용할 수 있는 여러 형식이 있습니다.

  Stretchly를 사용하여 Linux 데스크톱에서 건강한 알림 받기

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

sudo journalctl -n 10 -o short-full

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

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

완전한 날짜 및 시간 스탬프를 얻으려면 short-full 수정자를 사용하십시오.

sudo journalctl -n 10 -o short-full

이 출력의 날짜 및 시간 형식은 곧 보게 되겠지만 기간별로 로그 메시지를 선택할 때 날짜와 시간을 제공해야 하는 형식입니다.

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

sudo journalctl -n 10 -o verbose

거기 많은 가능한 필드입니다, 그러나 모든 필드가 메시지에 있는 경우는 드뭅니다.

논의할 가치가 있는 한 필드는 우선순위 필드입니다. 이 예에서 값은 6입니다. 값은 메시지의 중요도를 나타냅니다.

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

출력이 올바른 형식으로 표시되도록 하려면 자바스크립트 객체 표기법 (JSON) 객체의 경우 json 수정자를 사용합니다.

sudo journalctl -n 10 -o json

각 메시지는 올바른 형식의 JSON 개체로 적절하게 래핑되고 출력 라인당 하나의 메시지가 표시됩니다.

JSON 출력을 가지려면 예쁜 프린트, json-pretty 수정자를 사용하십시오.

sudo journalctl -n 10 -o json-pretty

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

타임스탬프나 기타 메타데이터 없이 로그 항목 메시지만 보려면 cat 수정자를 사용하세요.

sudo journalctl -n 10 -o cat

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

기간별 로그 메시지 선택

journalctl의 출력을 원하는 기간으로 제한하려면 -S(이후) 및 -U(까지) 옵션을 사용하십시오.

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

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

sudo 저널ctl -S

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

sudo journalctl -S의 출력

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

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

sudo 저널ctl -S

이것은 시스템에서 이상한 일이 발생했고 대략 언제 발생했는지 알고 있는 경우 훌륭한 조합 사용입니다.

sudo journalctl -S의 출력

상대 기간 사용

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

sudo journalctl -S -1d

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

  Gradio를 사용하여 Linux 데스크탑에서 라디오를 듣는 방법

최근에 발생한 일을 조사하려면 시간 단위로 측정된 상대적 기간을 지정할 수 있습니다. 다음은 지난 1시간 동안의 로그 메시지를 검토하는 것입니다.

sudo journalctl -S -1h

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

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

sudo journalctl -S yesterday

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

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

sudo journalctl -S today

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

다양한 기간 수정자를 혼합할 수 있습니다. 이틀 전부터 오늘이 시작될 때까지 모든 것을 보려면 다음 명령을 사용하세요.

sudo journalctl -S -2d -U today

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

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

로그 메시지를 검색할 수 있습니다. 다양한 저널 분야와 일치하는. 이러한 검색은 각 메시지에 첨부된 메타데이터에서 일치 항목을 찾으려고 시도합니다. 다음을 수행하는 것이 좋습니다. 필드 목록 참조 그리고 당신에게 가장 유용한 것을 선택하십시오.

애플리케이션이 모든 필드를 완성하는지 여부는 전적으로 애플리케이션 작성자에게 달려 있음을 명심하십시오. 모든 필드가 채워질 것이라고 보장할 수는 없습니다.

모든 저널 필드 수정자는 같은 방식으로 사용됩니다. 아래 예에서 몇 가지를 사용할 것입니다. 특정 응용 프로그램에서 로그 메시지를 찾으려면 _COMM(명령) 수정자를 사용합니다. -f(follow) 옵션도 사용하는 경우 journalctl은 이 응용 프로그램에서 새 메시지가 도착하는 대로 추적합니다.

sudo journalctl -f _COMM=geek-app

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

sudo journalctl _PID=751

이 기사를 조사하는 데 사용된 기계에서 SSH 데몬은 프로세스 751입니다.

다음으로 검색할 수도 있습니다. 사용자 아이디. 이것은 애플리케이션 또는 명령을 실행한 사람 또는 프로세스를 소유한 사람의 사용자 ID입니다.

sudo journalctl _UID=1000

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

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

sudo journalctl /usr/bin/anacron

아나크론의 모든 것 스케줄러 로그 메시지가 검색되고 표시됩니다..

검색을 더 쉽게 하기 위해 저널 필드에 대해 보유하고 있는 모든 값을 나열하도록 journalctl에 요청할 수 있습니다.

journalctl이 로그 메시지를 기록한 사용자 ID를 보려면 -F(필드) 옵션을 사용하고 _UID 필드 식별자를 전달하십시오.

journalctl -F _UID

다시 해보고 봅시다. 그룹 ID (GID):

journalctl -F _GID

다음 중 하나를 사용하여 이 작업을 수행할 수 있습니다. 저널 필드 식별자.

  더 나은 배터리 수명을 위한 5가지 최고의 Linux 배포판

커널 메시지 나열

커널 메시지를 빠르게 분리하는 방법이 내장되어 있습니다. 직접 검색하고 격리할 필요가 없습니다. -k(커널) 옵션은 다른 모든 메시지를 제거하고 커널 로그 항목을 즉시 볼 수 있도록 합니다.

sudo journalctl -k

강조 표시는 우선 순위 필드의 값에 따라 메시지의 중요도를 반영합니다.

부팅 메시지 검토

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

마지막 부팅과 관련된 로그 항목을 보려면 -b(부팅) 옵션을 사용합니다.

journalctl -b

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

“마지막 부팅”이라고 하면 현재 로그인한 세션 동안 컴퓨터에 생명을 불어넣은 부팅 프로세스를 의미합니다. 이전 부팅을 보려면 숫자를 사용하여 journalctl에 관심 있는 부팅을 알릴 수 있습니다. 세 번째 이전 부팅을 보려면 다음 명령을 사용하세요.

journalctl -b 3

일반적으로 문제가 있어 시스템을 재부팅해야 하는 경우 관심 있는 이전 부팅 순서입니다. 따라서 이것은 일반적인 명령 형식입니다.

부츠의 순서와 혼동되기 쉽습니다. 도움을 주기 위해 –list-boots 옵션을 사용하여 저널에 기록된 부츠를 나열하도록 journalctl에 요청할 수 있습니다.

journalctl --list-boots

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

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7

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

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

물론 저널과 모든 로그 메시지는 하드 드라이브에 저장됩니다. 즉, 하드 드라이브 공간을 차지하게 됩니다. 저널이 차지하는 공간을 확인하려면 –disk-usage 옵션을 사용하십시오.

journalctl --disk-usage

오늘날의 하드 드라이브에서 152MB는 전혀 공간이 많이 차지하지 않지만 데모 목적으로 다시 잘라낼 것입니다. 두 가지 방법이 있습니다. 첫 번째는 저널을 축소할 크기 제한을 설정하는 것입니다. 물론 다시 자랄 것이지만, 이제 새로운 성장을 위해 준비할 수 있습니다.

멋진 제목의 –vacuum-size 옵션을 사용하고 저널을 축소할 크기를 전달합니다. 100MB를 요청합니다. 이것을 생각하는 방법은 “할 수 있는 모든 것을 버리되 100MB 이하로 내려가지 마십시오”라고 journalctl에 요청하는 것입니다.

journalctl --vacuum-size=100M

저널 크기를 줄이는 다른 방법은 –vacuum-time 옵션을 사용하는 것입니다. 이 옵션은 명령줄에 제공한 기간보다 오래된 메시지를 삭제하도록 journalctl에 지시합니다. 기간에 일, 주, 월 및 연도를 사용할 수 있습니다.

일주일이 지난 모든 메시지를 제거해 보겠습니다.

journalctl --vacuum-time=1weeks

데이터 대 정보

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

필요한 로그 메시지에 필요한 정보의 모든 스니펫을 사용할 수 있습니다.