Docker 컨테이너 로그 회전 설정 방법

DockerBeginner
지금 연습하기

소개

Docker 는 일관되고 확장 가능한 환경에서 애플리케이션을 구축, 배포 및 실행할 수 있도록 하는 널리 채택된 컨테이너화 플랫폼이 되었습니다. Docker 기반 인프라가 성장함에 따라 증가하는 로그 데이터를 관리하는 것은 중요한 작업이 됩니다. 이 튜토리얼에서는 Docker 컨테이너의 로그 회전을 설정하는 과정을 안내하여 효율적인 로그 관리 및 저장소 최적화를 보장합니다.

Docker 로깅 이해

Docker 는 애플리케이션 개발, 배포 및 관리 방식을 혁신한 강력한 컨테이너화 플랫폼입니다. Docker 를 사용할 때 중요한 측면 중 하나는 Docker 컨테이너에서 생성되는 로그를 이해하고 관리하는 것입니다. 로그에는 컨테이너화된 애플리케이션의 동작, 성능 및 상태에 대한 귀중한 정보가 포함되어 있으며, 문제 해결, 모니터링 및 감사에 필수적입니다.

Docker 로깅이란 무엇인가요?

Docker 는 각 컨테이너의 표준 출력 (stdout) 및 표준 오류 (stderr) 스트림을 캡처하는 내장 로깅 메커니즘을 제공합니다. 이 로깅 메커니즘은 Docker 로깅 드라이버로 알려져 있으며, 컨테이너에서 생성된 로그를 보고 관리할 수 있도록 합니다.

Docker 로그 액세스

docker logs 명령을 사용하여 Docker 컨테이너의 로그에 액세스할 수 있습니다. 이 명령을 사용하면 특정 컨테이너의 로그를 보고, 실시간으로 로그 스트림을 따라가고, 다양한 기준에 따라 로그를 필터링할 수 있습니다.

## 컨테이너 로그 보기

## 실시간 로그 스트림 따라가기

## 특정 시간 범위 기준 로그 필터링

로그 레벨 이해

Docker 로그에는 메시지의 심각도를 나타내는 다양한 로그 레벨이 있습니다. 사용 가능한 로그 레벨은 다음과 같습니다.

  • debug: 컨테이너 작동에 대한 자세한 정보.
  • info: 컨테이너 작동에 대한 일반 정보.
  • warn: 잠재적인 문제 또는 예기치 않은 동작에 대한 경고.
  • error: 컨테이너 작동 중 발생할 수 있는 오류.
  • fatal: 컨테이너 실패를 유발한 심각한 오류.

컨테이너 시작 시 --log-level 옵션을 설정하여 컨테이너의 로그 레벨을 제어할 수 있습니다.

## 특정 로그 레벨로 컨테이너 시작

Docker 로깅 드라이버

Docker 는 로그가 저장되고 관리되는 방식을 결정하는 다양한 로깅 드라이버를 지원합니다. 기본 로깅 드라이버는 json-file 드라이버이며, 호스트 파일 시스템에 JSON 형식으로 로그를 저장합니다. 그러나 요구 사항 및 인프라에 따라 syslog, journald 또는 fluentd와 같은 다른 로깅 드라이버를 사용하도록 Docker 를 구성할 수 있습니다.

graph LR A[Docker 컨테이너] --> B[로깅 드라이버] B --> C[json-file] B --> D[syslog] B --> E[journald] B --> F[fluentd]

Docker 로깅의 기본 사항을 이해하면 컨테이너화된 애플리케이션에서 생성된 로그를 효과적으로 관리하고, 문제를 해결하고, 성능을 모니터링하며, 인프라의 안정성을 보장하는 데 사용할 수 있습니다.

Docker 컨테이너 로그 회전 설정

시간이 지남에 따라 Docker 컨테이너가 생성하는 로그 파일은 호스트 시스템의 디스크 공간을 빠르게 소비할 수 있습니다. 이를 방지하기 위해 로그 회전을 설정할 수 있습니다. 로그 회전은 정기적으로 이전 로그 파일을 아카이빙하고 삭제하여 디스크 공간을 확보하는 프로세스입니다.

로그 회전 이해

로그 회전은 시스템 관리에서 일반적인 관행으로, 로그 파일을 주기적으로 회전, 압축 및 아카이빙하여 관리 가능한 로그 파일 크기를 유지합니다. 이 프로세스는 로그 파일이 무한정 증가하여 모든 사용 가능한 디스크 공간을 소비하는 것을 방지합니다.

Docker 컨테이너 로그 회전 설정

Docker 컨테이너의 로그 회전을 설정하려면 컨테이너를 시작할 때 내장된 --log-opt 옵션을 사용할 수 있습니다. 이 옵션을 사용하면 로그 파일의 최대 크기, 보관할 로그 파일 수 및 압축 형식과 같은 로그 회전 매개변수를 지정할 수 있습니다.

## 로그 회전이 설정된 컨테이너 시작

위의 예제에서 컨테이너는 로그 파일이 최대 크기 10MB 에 도달하면 로그 파일을 회전하고, 최대 5 개의 아카이브 로그 파일을 유지하도록 구성됩니다.

로그 회전 전략 구현

내장된 --log-opt 옵션은 개별 컨테이너의 로그 회전을 설정하는 편리한 방법이지만, 전체 Docker 인프라에서 로그 회전을 관리하는 데 적합하지 않을 수 있습니다. 이러한 경우 외부 도구 또는 스크립트를 사용하여 자동화된 로그 회전 전략을 구현할 수 있습니다.

널리 사용되는 접근 방식 중 하나는 Linux 시스템에서 로그 회전을 관리하는 표준 도구인 logrotate 유틸리티를 사용하는 것입니다. Docker 컨테이너의 로그 회전 규칙을 지정하는 logrotate 구성 파일을 만들고, cron 작업 또는 시스템 서비스를 사용하여 logrotate 명령을 정기적으로 실행하도록 예약할 수 있습니다.

다음은 Docker 컨테이너에 대한 logrotate 구성 파일의 예입니다.

/var/lib/docker/containers/*/*.log {
    rotate 5
    copytruncate
    compress
    delaycompress
    missingok
    notifempty
}

이 구성 파일은 모든 Docker 컨테이너의 로그 파일을 회전시켜 최대 5 개의 아카이브 로그 파일을 유지하고, 아카이브 파일을 압축하며, 로그 파일이 비어 있으면 삭제합니다.

Docker 컨테이너의 로그 회전을 설정하면 호스트 시스템의 디스크 공간을 효율적으로 사용하고, 증가하는 로그 파일의 영향 없이 컨테이너화된 애플리케이션이 원활하게 계속 실행되도록 할 수 있습니다.

자동 로그 회전 전략 구현

Docker 의 내장 --log-opt 옵션은 개별 컨테이너의 로그 회전을 설정하는 편리한 방법이지만, 전체 Docker 인프라에서 로그 회전을 관리하는 가장 확장 가능하거나 효율적인 해결책은 아닐 수 있습니다. 이러한 경우 외부 도구 또는 스크립트를 사용하여 자동 로그 회전 전략을 구현할 수 있습니다.

logrotate 사용

널리 사용되는 접근 방식 중 하나는 Linux 시스템에서 로그 회전을 관리하는 표준 도구인 logrotate 유틸리티를 사용하는 것입니다. logrotate는 파일 크기, 나이 또는 일정과 같은 다양한 기준에 따라 로그 파일을 모니터링하고 회전하도록 구성할 수 있습니다.

Ubuntu 22.04 시스템에서 모든 Docker 컨테이너의 로그를 관리하도록 logrotate를 구성하는 방법은 다음과 같습니다.

  1. Docker 컨테이너용 logrotate 구성 파일 생성:

    sudo touch /etc/logrotate.d/docker-containers
    sudo nano /etc/logrotate.d/docker-containers
  2. 다음 구성을 파일에 추가합니다.

    /var/lib/docker/containers/*/*.log {
        rotate 5
        copytruncate
        compress
        delaycompress
        missingok
        notifempty
    }

    이 구성은 모든 Docker 컨테이너의 로그 파일을 회전시켜 최대 5 개의 아카이브 로그 파일을 유지하고, 아카이브 파일을 압축하며, 로그 파일이 비어 있으면 삭제합니다.

  3. 파일을 저장하고 텍스트 편집기를 종료합니다.

  4. logrotate 구성 테스트:

    sudo logrotate -d /etc/logrotate.d/docker-containers

    -d 옵션은 logrotate를 디버그 모드로 실행하여 실제로 수행하지 않고 수행할 작업을 표시합니다.

  5. cron 작업 또는 시스템 서비스를 사용하여 logrotate 명령을 정기적으로 실행하도록 예약합니다.

    sudo crontab -e

    다음 줄을 crontab 에 추가하여 매일 오전 3 시에 logrotate를 실행합니다.

    0 3 * * * /usr/sbin/logrotate /etc/logrotate.d/docker-containers

타사 도구 사용

logrotate 외에도 Docker 인프라의 자동 로그 회전 전략을 구현하는 데 도움이 되는 여러 타사 도구 및 서비스가 있습니다. 몇 가지 인기 옵션은 다음과 같습니다.

  • Fluentd: Docker 컨테이너의 로그를 관리하고 회전하는 데 사용할 수 있는 인기 있는 오픈소스 데이터 수집기.
  • Elastic Stack (ELK): Elasticsearch, Logstash 및 Kibana 를 포함하는 도구 모음으로 중앙 로그 관리 및 회전에 사용할 수 있습니다.
  • Splunk: Docker 와 통합하여 로그를 관리하고 회전할 수 있는 상용 로그 관리 및 분석 플랫폼.
  • LabEx 로그 회전: Docker 컨테이너의 자동 로그 회전 및 관리를 제공하는 LabEx 브랜드 서비스.

자동 로그 회전 전략을 구현하면 Docker 인프라의 디스크 공간을 효율적으로 사용하고, 증가하는 로그 파일의 영향 없이 컨테이너화된 애플리케이션이 원활하게 계속 실행되도록 할 수 있습니다.

요약

이 튜토리얼을 마치면 Docker 로깅에 대한 포괄적인 이해를 얻고, Docker 기반 애플리케이션의 건전성과 성능을 유지하기 위한 효과적인 로그 회전 전략을 구현할 수 있게 됩니다. Docker 로그 회전을 숙달하면 스토리지 최적화, 시스템 안정성 향상 및 체계적인 로그 관리 시스템 유지를 도울 수 있습니다.