logrotate와 로그 회전
로그로테이트
logrotate는 로그 파일을 크기·시간 등의 조건에 따라 회전·압축·보관하는 관리 도구다. 파일의 이름이 바뀌는 일과 프로그램이 열어 둔 파일 객체가 바뀌는 일은 다르다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 활성 로그 크기와 보관 기간을 관리한다.
- ·새 파일 생성· 재열기 절차를 연결한다.
- 수집기의 · 추적과 회전 시 누락·중복을 분석한다.
02어떤 순서로 동작하나
- 기존 파일 읽기
writer와 reader가 기존 를 사용하며 reader는 처리한 을 추적한다.
- 이름 변경
기존 로그를 회전 이름으로 옮겨도 이미 열린 FD는 기존 를 계속 가리킬 수 있다.
- 새 파일 생성·재열기
새 경로의 파일을 만들고 writer가 지원하는 reopen 절차로 새 에 쓰도록 전환한다.
- 이전 파일 마무리
reader가 기존 의 남은 기록을 끝까지 수집한다. 새 경로만 즉시 따라가면 꼬리 부분을 놓칠 수 있다.
- 새 파일 추적
새 의 을 별도로 추적하고 전달·저장 확인 문맥과 함께 복구 상태를 유지한다.
03먼저 알아둘 용어와 구성요소
- 파일 이름과 별개로 파일 시스템 객체를 식별하는 메타데이터 단위.
- 가 열어 둔 파일 객체를 가리키는 핸들.
- 열린 파일에서 다음 읽기·쓰기 위치를 나타내는 값.
- 파일을 복사한 뒤 원래 파일을 잘라내며 원래 열린 핸들을 유지하는 회전 방식.
- 파일의 이름·경로를 바꾸는 동작으로 이미 열린 파일 기술자는 이전 파일을 계속 가리킬 수 있다.
- 회전 뒤 새 로그 파일을 지정 소유자·권한으로 만드는 설정.
날짜별 파일과 압축 결과에서 회전 중 수집 위치 추적하기
로그 파일명이 바뀌거나 내용이 잘리는 순간에 경로··읽기 이 어떻게 달라지는지 설명하고 누락·중복을 구분한다.
실습 구성과 전제
- 시험용 로그 디렉터리와 고유 번호가 붙은 가상 이벤트를 사용한다. 서비스 운영 로그를 임의로 자르지 않는다.
- 날짜별 웹 로그 화면과 alert_fast 수집 설계는 서로 다른 자료다. 파일 회전의 공통 원리를 비교하며 동일 실행의 전후 사진이라고 가정하지 않는다.
현재 파일명과 수집 상태를 따로 기록하기
- 날짜가 파일명에 들어가면 하루가 바뀔 때 다른 경로가 생길 수 있다. 수집기가 한 경로만 계속 열고 있으면 새 파일을 발견하지 못할 수 있으므로 파일 발견 정책부터 확인한다.
- 파일명을 기억하는 것만으로는 부족하다. 와 읽기 을 함께 기록해야 같은 이름으로 새 파일이 생긴 경우와 기존 파일이 자라난 경우를 구별할 수 있다.
bashstat -c '%i %s %n' ./lab.log logrotate -d ./lab-logrotate.conflab.log와 시험 설정을 준비한 뒤 메타데이터와 회전 계획만 확인하는 예. -d는 실제 회전을 수행하지 않는다.
원본 크기로 보기 ↗- web/access 아래에 20260617.log와 20260618.log가 별도 파일로 나열되어 있다. 날짜가 바뀐 파일을 하나의 고정 경로로 볼 수 없다.
- web/error가 access와 분리된 디렉터리로 보인다. 정상 접근 로그와 오류 로그의 수집 대상·규칙도 각각 지정할 필요가 있다.
확인 기준고유 이벤트 번호, , 크기, 의 기준값을 저장한 뒤 회전 시험을 시작한다.
회전 후 압축 파일과 새 파일의 경계를 찾기
- 회전에서는 기존 파일을 열고 있던 수집기가 그 파일의 끝까지 읽고, 새 의 활성 파일로 넘어가야 한다. 작성 도 새 파일을 다시 열 수 있어야 한다.
- 는 복사 후 같은 파일을 비우므로 가 유지될 수 있다. 복사와 비우기 사이에 추가된 데이터의 손실 가능성이 있고, 파일이 빠르게 다시 자라면 단순 크기 감소 검사만으로 회전을 놓칠 수도 있다.
원본 크기로 보기 ↗- 20260617.log-20260618.gz처럼 원래 날짜와 회전 접미 날짜가 함께 들어간 압축 파일명이 보인다.
- 압축 파일이 존재한다는 것은 보관 결과가 있다는 뜻이다. 그 안에 모든 이벤트가 들어 있는지, 수집기가 읽었는지는 파일명만으로 알 수 없다.
확인 기준회전 직전·직후 이벤트 번호가 활성 파일과 압축 파일 중 어디에 있는지 읽어서 확인한다. 와 를 함께 썼다고 새 가 생성되는 것은 아니다.
읽은 번호와 전송 완료 번호를 대조하기
- 파일에서 읽은 이벤트 번호와 중앙 저장소가 확인한 번호를 분리한다. 수집기가 읽은 직후 종료되면 메모리 버퍼에만 있던 이벤트는 아직 저장 성공이 아니다.
- 가상 이벤트 101·102·103을 기준으로 회전 전후와 수집기 재시작을 나누어 시험한다. 원본 파일의 세 번호, 송신 기록의 세 번호, 최종 저장소의 세 번호를 비교해야 손실과 중복을 셀 수 있다.
bashgzip -cd -- ./20260617.log-20260618.gz실습 디렉터리의 압축 보관 내용을 표준 출력으로 읽는 예. 실제 파일명에 맞춰 사용하며 원본을 덮어쓰지 않는다.
확인 기준번호가 빠지면 작성·회전·읽기·전송 중 최초로 사라진 구간을 찾는다. 같은 번호가 둘이면 재전송과 체크포인트 저장 순서를 검사한다.
실습에서 확인한 동작 원리
- 압축 파일 생성은 보관의 증거이며, 수집 완전성의 증거는 이벤트 번호 대조다.
- 파일 회전과 중앙 전송 확인을 별도로 설계해야 재시작 때 누락과 중복을 설명할 수 있다.
동작·명령 참고 문서
04예제로 따라가기
- 시작 상태: checkpoint가 레코드 100 뒤를 가리키고 다음 레코드는 101이라고 가정한다. 숫자는 설명용 레코드 순서다.
- 먼저 갱신: 101을 읽자마자 checkpoint를 101 뒤로 갱신하고 출력 전에 종료되면, 재시작은 102부터 읽어 101을 놓칠 수 있다.
- 나중 갱신: 101을 출력 저장한 뒤 checkpoint 갱신 전에 종료되면, 재시작에서 101을 다시 보낼 수 있다.
- 중복 식별: 수신기가 안정적인 이벤트 ID로 같은 101을 알아보면 중복 저장을 줄일 수 있다. 파일 경로만 같은 두 이벤트를 합쳐서는 안 된다.
- 회전 결합: 이때 회전까지 일어나면 이전 파일의 남은 부분과 새 파일의 시작을 각각 추적한다. 한 경로의 하나로 두 세대를 표현하지 않는다.
05혼동하기 쉬운 점과 확인 기준
- 생성기 상태: 뒤에도 가 이전 파일 디스크립터에 쓰는지 확인한다. 새 경로 파일이 존재해도 실제 쓰기 대상은 다를 수 있다.
- 수집기 상태: 열린 파일의 식별자·현재 ·마지막 전달 ID를 비교한다. 파일 크기만으로 어느 레코드까지 저장됐는지는 알 수 없다.
- 저장소 상태: ACK가 큐 수신인지 내구성 있는 적재 완료인지 확인한다. 완료 의미가 다르면 복구 보장도 달라진다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.