journalctl을 사용하여 systemd 저널 로그 내보내는 방법

journalctl을 사용하여 systemd 저널 로그 내보내는 방법

SOC Prime Team
SOC Prime Team linkedin icon 팔로우

journalctl을 시간 창과 -o json과 함께 실행하면, 저널에 저장된 모든 필드가 포함된 JSON 객체가 줄 별로 표시됩니다:

sudo journalctl --since "2026-10-19 00:00" --until "2026-10-20 00:00" -o json --no-pager > web-03_journal.jsonl

대신 syslog 스타일의 텍스트 파일을 원한다면 -o short-iso를 사용하십시오. sudo 또는 systemd-journal, adm, wheel의 멤버십 없이는 시스템의 저널이 아닌 자신의 사용자 저널만 볼 수 있습니다.

대부분의 최신 배포판에서 저널은 모든 것이 먼저 도착하는 곳입니다: 서비스, 커널, sudo, cron, 로그인. Debian 12 이후, Fedora 및 Arch에서는 유일한 장소일 수 있습니다, 왜냐하면 rsyslog가 설치되지 않았기 때문입니다. Prime Core에는 Linux 시스템 로그에 대한 {N}개의 탐지 규칙이 있으며, cron 지속성(T1053.003), 악의적인 systemd 서비스(T1543.002), sudo 남용(T1548.003) 등을 맵핑된 {M}개의 MITRE ATT&CK 기술이 포함되어 있습니다.

무료로 시작하기

시작하기 전에

권한. 모든 시스템 로그에 대한 동일한 규칙: root 또는 상기 그룹. [Linux 로그 권한 가이드]는 세부 정보를 포함하고 있습니다.

저널이 재부팅 후에도 살아남습니까? /var/log/journal이 존재하지 않으면 로그는 /run/log/journal 하의 메모리에 존재하고 재부팅 시 사라집니다. journalctl –list-boots는 실제로 몇 번의 부팅이 있는지를 보여줍니다. 현재 것만 나열하면 이전 기록은 사라진 것입니다.

얼마나 많은 데이터가 있습니까? journalctl –disk-usage를 사용하여 모두 파일로 덤프하기 전에 알려줍니다. 기본적으로, 지속적인 저널은 파일 시스템의 10%까지 확장될 수 있으며, 최대 4GB로 제한됩니다. 이는 한 번에 업로드하고 싶은 양보다 훨씬 더 많습니다.

시간대. 저널은 UTC로 타임스탬프를 저장하지만, journalctl은 –utc를 추가하지 않으면 로컬 시간을 출력합니다. JSON 출력은 __REALTIME_TIMESTAMP라는 원시 UTC 마이크로초 타임스탬프를 포함합니다.

1단계: 축소하기

질문에 맞는 필터를 선택하십시오. 이들은 결합됩니다:

필터작동 방식
–since / –until시간 창; “2026-10-19 14:00”, 어제 또는 “2시간 전” 수락
-b, -b -1현재 부팅, 이전 부팅
-u nginx -u ssh하나 이상의 systemd 유닛
-p warning그 우선 순위 및 더 심각한 것들
-k커널 메시지 전용
_COMM=sudo, _UID=0모든 저널 필드의 정확한 일치

2단계: 출력 형식 선택

  • -o json: 모든 필드를 포함한 줄당 한 개의 JSON 객체. LogTotal의 기본 선택입니다, 아무것도 손실되지 않기 때문입니다.
  • -o json –output-fields=MESSAGE,_HOSTNAME,_COMM,_PID,SYSLOG_IDENTIFIER,PRIORITY: 동일하지만, 절삭됨. 타임스탬프와 부팅 ID 같은 몇 가지 필드는 항상 포함됩니다. 파일 크기가 크게 줄어듭니다.
  • -o short-iso: 전체 ISO 타임스탬프가 있는 syslog 스타일 텍스트. 더 작고 읽기 쉽습니다. [PROOF: LogTotal이 short-iso를 구문 분석하는지 확인]

-o export를 사용하지 마십시오. 이름에도 불구하고, systemd 머신 간의 저널 배송을 위한 직렬화 형식입니다, 분석할 것이 아닙니다.

보통 범위가 지정된 내보내기를 추천합니다:

sudo journalctl -b -1 -p info -u ssh -u cron 

  -o json --no-pager > web-03_prevboot.jsonl

3단계(선택 사항): 다른 머신에서 저널 파일 읽기

사건 작업에서는 종종 디스크 이미지나 복사된 /var/log/journal 폴더가 있으며, 라이브 시스템이 아닙니다. journalctl은 이를 직접 읽습니다:

journalctl -D /mnt/evidence/var/log/journal -o json --no-pager > evidence_journal.jsonl

–file을 사용하여 개별 .journal 파일을 가리킵니다. 충돌하거나 비정상적으로 종료된 시스템의 경우 저널은 손상 경고를 출력할 수 있습니다. 대부분의 항목은 여전히 나옵니다.

LogTotal에서 업로드, 정제 및 리뷰

  1. 업로드. 열기 logtotal.com 그리고 .jsonl 파일을 드롭하십시오. [PROOF: 업로드 화면, 크기 제한]
  2. 정제. [PROOF: what gets masked in journal JSON: hostnames, usernames, IPs, machine and boot IDs]. Look it over before you continue.
  3. 리뷰. [PROOF: what the results screen shows]

실제 데이터에서 어떻게 보이는가. 우리는 하루 저널을 [PROOF: 예시 소스, 예를 들어 cron 작업을 추가하고, 새 사용자를 추가하고, 의심스러운 systemd 서비스를 추가한 후의 테스트 VM]로부터 내보냈습니다. LogTotal은 [PROOF: 실제 발견 항목]를 플래그했습니다. [PROOF: 샘플 파일 링크]

문제가 발생했을 때

증상가능한 원인Fix
다른 사용자로부터 메시지를 보지 못하는 힌트root가 아니고, 저널 그룹에 속하지 않음sudo, 또는 계정을 systemd-journal에 추가
— 항목 없음 —시간 창 혹은 유닛 이름이 일치하지 않음; 로컬 vs. UTC 혼란창을 넓히세요; –utc를 시도하세요; systemctl list-units를 확인하세요
현재 부팅만 존재휘발성 저널이전 로그가 사라졌습니다; 로그 포워더나 SIEM을 확인하세요
출력이 바이너리 같은 또는 깨져 보임-o export가 사용됨-o json을 사용하세요
파일이 기가바이트입니다필터 없음유닛, 우선 순위, –output-fields를 추가하세요

FAQ

JSON 또는 텍스트?

분석을 위해 JSON을 사용합니다, 왜냐하면 PID, 유닛, 부팅 ID, 정확한 타임스탬프를 별도의 필드로 유지하기 때문입니다. 사람이 읽을 때 또는 크기가 중요할 때 텍스트를 사용합니다.

저널이 /var/log/syslog와 동일합니까?

아니요. rsyslog가 설치된 경우, 저널에서 메시지를 텍스트 파일로 복사하기 때문에 둘 다 있을 수 있습니다. 설치되지 않은 경우, 저널이 전부입니다.

SOC Prime의 Detection as Code 플랫폼에 가입하세요 귀사의 비즈니스에 가장 중요한 위협에 대한 가시성을 개선하세요. 시작을 돕고 즉각적인 가치를 제공하기 위해 지금 SOC Prime 전문가와의 회의를 예약하세요.