Docker 활용: Logrotate를 활용한 로깅 설정 - ①
Docker를 설치하고 컨테이너를 배포한 후, 별도의 설정을 하지 않으면 컨테이너의 로그는 단일 파일에 계속 누적됩니다. 이는 시간이 지남에 따라 디스크 공간 문제를 야기할 수 있습니다. 하지만 Linux의 logrotate 도구를 활용하면 간단한 설정만으로 효율적인 로그 관리가 가능합니다.
Docker 컨테이너의 로그와 관련 파일들은 기본적으로 '/var/lib/docker/containers/{ContainerID}' 디렉토리에 저장됩니다. 각 컨테이너의 로그 파일은 '{ContainerID}.log' 형식으로 이 디렉토리 내에 생성됩니다. 이러한 로그 파일들의 관리를 위해 해당 경로에 대한 logrotate 설정을 구성함으로써, 로그 파일의 크기, 보관 기간, 순환 주기 등을 효과적으로 제어할 수 있습니다. 이를 통해 디스크 공간을 효율적으로 관리하고, 시스템 성능에 미치는 영향을 최소화하면서도 필요한 로그 정보를 유지할 수 있습니다.
logrotate 설정은 '/etc/logrotate.d/' 디렉토리에 새 파일을 생성하여 구성할 수 있습니다. 파일 이름에 대한 특별한 제약은 없지만, 관리의 편의성을 위해 설정 목적을 명확히 나타내는 이름을 사용하는 것이 좋습니다. 예를 들어, '/etc/logrotate.d/docker'라는 파일을 생성하면, 이 파일이 Docker 관련 로그 순환 설정을 담고 있음을 쉽게 알 수 있습니다. 이러한 명확한 이름 지정은 시스템 관리자가 여러 서비스의 로그 설정을 효율적으로 관리하고 필요시 빠르게 찾아 수정할 수 있게 해 줍니다.
설정 파일은 예를 들면 아래와 같이 지정을 하게 됩니다.
/var/lib/docker/containers/*/*.log {
daily
rotate 7
missingok
copytruncate
dateformat -%Y%m%d
}
'/var/lib/docker/containers/*/*.log' 경로는 모든 Docker 컨테이너의 로그 파일을 지정합니다. 이 경로에서 '*'는 각 컨테이너의 고유 ID를 나타냅니다. 예를 들어, 특정 컨테이너에 대해 다른 로그 보관 기간이나 순환 주기를 설정하고 싶다면, 해당 컨테이너의 ID를 사용하여 경로를 구체적으로 지정할 수 있습니다. 이를 통해 컨테이너별로 최적화된 로그 관리가 가능해집니다. 이러한 방식으로 경로를 지정하면, 각 컨테이너별로 개별적인 로그 순환 설정을 적용할 수 있습니다.
logrotate의 주요 옵션을 적용하면 다음과 같은 로그 관리 정책을 설정할 수 있습니다.
- daily: 매일 로그 파일을 순환합니다.
- rotate 7: 최대 7개의 이전 로그 파일을 보관합니다.
- missingok: 로그 파일이 없어도 오류를 발생시키지 않고 계속 진행합니다.
- copytruncate: 현재 로그 파일을 복사한 후 원본 파일을 비웁니다. 이를 통해 애플리케이션의 중단 없이 로그 순환이 가능합니다.
- dateformat -%Y%m%d: 생성된 로그 파일에 연, 월, 일을 표기하여 생성합니다.
이러한 설정으로 매일 새로운 로그 파일이 생성되며, 최대 7일 치의 로그가 보관됩니다. 로그 순환 시 기존 파일의 내용은 유지되면서 원본 파일은 비워집니다.
[Logrotate 옵션 정리]
- rotate: 보관할 로그 파일의 개수를 지정합니다.
- daily/weekly/monthly/yearly: 로그 로테이션 주기를 설정합니다.
- size: 특정 크기에 도달하면 로그를 로테이션합니다.
- compress: 오래된 로그 파일을 압축합니다.
- delaycompress: 다음 로테이션 주기까지 압축을 지연합니다.
- copytruncate: 로그 파일을 복사한 후 원본을 비웁니다.
- create: 새로운 로그 파일을 특정 권한과 소유자로 생성합니다.
- dateext: 로테이션된 로그 파일에 날짜를 추가합니다.
- missingok: 로그 파일이 없어도 에러를 발생시키지 않습니다.
- notifempty: 로그 파일이 비어있으면 로테이션하지 않습니다.
- maxage: 지정된 일수보다 오래된 로그 파일을 삭제합니다.
- su: 특정 사용자와 그룹으로 로그 파일을 로테이션합니다.
- sharedscripts: 모든 로그에 대해 postrotate/prerotate 스크립트를 한 번만 실행합니다.
- prerotate/postrotate: 로테이션 전후에 실행할 스크립트를 지정합니다.
- max-size: 로그 파일의 최대 크기를 지정합니다.
- max-file: 보관할 로그 파일의 최대 개수를 설정합니다.