Next.js
Linux 서버에서 journalctl 로그 시간을 KST로 읽으며 놓친 것
장애 시간을 찾을 때 서버 시간대와 journalctl 출력 기준을 섞어 봐서 원인을 늦게 찾은 설정 노트다.
로그는 있었는데 시간을 잘못 보고 있었다
새벽에 배포한 서비스가 09시쯤 한 번 재시작됐다고 생각했다. 그런데 사용자 제보 시간과 journalctl에서 본 시간이 맞지 않았다. 나중에 보니 서버는 UTC로 동작하고 있었고, 나는 머릿속으로 KST라고 착각한 채 로그를 읽고 있었다.
처음에는 systemd가 로그를 누락한 줄 알았다. 실제로는 내가 --since 범위를 잘못 잡아서 문제 구간을 비켜 보고 있었다.
확인은 timedatectl부터
서버에 접속하면 바로 서비스 로그로 들어가고 싶지만, 시간대가 섞이면 뒤의 판단이 전부 흔들린다.
timedatectl
출력에서 Time zone이 Etc/UTC인지 Asia/Seoul인지 먼저 봤다. 서버 시간대를 꼭 KST로 바꿔야 하는 것은 아니지만, 내가 어떤 기준으로 로그를 읽고 있는지는 알아야 한다.
journalctl 범위를 명확히 쓰기
KST 기준 오전 9시 문제를 UTC 서버에서 찾는다면 0시로 바꿔서 볼 수 있다.
journalctl -u my-app.service --since "2026-07-10 00:00:00" --until "2026-07-10 00:20:00"
반대로 서버 시간대를 KST로 맞춘 환경이라면 그대로 적어도 된다. 중요한 건 팀 메모나 장애 기록에도 기준 시간대를 같이 남기는 것이다.
내가 바꾼 운영 메모 형식
예전에는 이렇게 적었다.
- 9시쯤 재시작됨
- 로그 확인 필요
지금은 조금 귀찮아도 아래처럼 쓴다.
- 2026-07-10 09:03 KST 사용자 오류 제보
- 서버 시간대: UTC
- 확인 범위:
journalctl --since "2026-07-10 00:00:00"
작은 서버일수록 시간 기준을 고정해 두기
사이드 프로젝트 서버는 혼자 보니까 대충 넘어가기 쉽다. 하지만 로그, 크론, 백업 파일명, 모니터링 알림이 서로 다른 시간대를 쓰기 시작하면 원인 찾는 시간이 길어진다.
내 기준은 이렇다.
- 서버는 UTC로 둬도 된다.
- 사용자에게 말하는 시간은 KST로 통일한다.
- 장애 기록에는 UTC/KST를 같이 적는다.
- cron 표현식에는 주석으로 기준 시간대를 남긴다.
이번에는 큰 장애는 아니었지만, 같은 9시라도 어디의 9시인지 확인하는 습관이 필요하다는 걸 배웠다.