ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컨테이너 로깅(Container Logging)
    BackEnd/docker 2022. 3. 12. 09:06
    반응형

    json-file 로그 사용

      도커는 컨테이너의 표준 출력(StdOut)과 에러(StdErr) 로그를 별도의 메타데이터 파일로 저장하며 이를 확인하는 명령어를 제공합니다.

     

      mysql 5.7 버전의 컨테이너를 생성합니다.

    docker run -d --name mysql \
    > -e MYSQL_ROOT_PASSWORD=1234 \
    > mysql:5.7

     

      docker logs 명령어로 컨테이너의 표준 출력을 확인함으로써 애플리케이션이 잘 구동되는지 확인합니다. 컨테이너의 로그가 너무 많아 읽기 힘들다면 --tail 옵션을 써서 마지막 로그 줄부터 출력할 줄의 수를 설정할 수 있습니다. 컨테이너에서 실시간으로 출력되는 내용을 확인하려면 -f 옵션을 써서 로그를 스트림으로 확인할 수도 있습니다(애플리케이션 개발 시 유용).

    $ docker logs --tail 2 mysql
    2022-03-09T02:00:22.270336Z 0 [Note] mysqld: ready for connections.
    Version: '5.7.37'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
    
    $ docker logs -f mysql

     

      docker logs 명령어는 run 명령어에서 -i -t 옵션을 설정해 docker attach 명령어를 사용할 수 있는 컨테이너에도 쓸 수 있으며, 컨테이너 내부에서 bash 셸 등을 입출력한 내용을 확인할 수 있습니다.

    $ docker run -i -t --name logstest ubuntu:14.04
    root@d3bc9b0bc671:/# echo test!
    test!
    root@d3bc9b0bc671:/# exit
    exit
    
    $ docker logs logstest
    root@d3bc9b0bc671:/# echo test!
    test!
    root@d3bc9b0bc671:/# exit
    exit

     

      기본적으로 컨테이너 로그는 JSON 형태로 도커 내부에 저장됩니다. 이 파일은 다음 경로에 컨테이너의 ID로 시작하는 파일명으로 저장됩니다. 아래의 log 파일의 내용을 cat, vi 편집기 등으로 확인하면 logs 명령으로 정제되지 않은 JSON 데이터를 볼 수 있습니다.

    $ cat /var/lib/docker/containers/${CONTAINER_ID}/${CONTAINER_ID}-json.log

      macOS에서는 컨테이너를 HyperKit, LinuxKit 위에서 실행시키기 때문에 LinuxKit에 접속하여 확인해야 합니다.

    • LinuxKit 접속: nc -U ~/Library/Containers/com.docker.docker/Data/debug-shell.sock

     

      그러나 컨테이너 내부의 출력이 너무 많은 상태로 방치하면 json 파일의 크기가 계속해서 커질 수 있고, 결국 호스트의 남은 저장 공간을 전부 사용할 수도 있습니다. 이러한 상황을 방지하기 위해서 --log-opt 옵션으로 컨테이너 json 로그 파일의 최대 크기를 지정할 수 있습니다. max-size는 로그 파일의 최대 크기, max-file은 로그 파일의 개수를 의미합니다.

    docker run -it \
    --log-opt max-size=10k --log-opt max-file=3 \
    --name log-test ubuntu:14.04

     

      로깅 드라이버는 기본적으로 json-file로 설정되지만 도커 데몬 시작 옵션에서 --log-deriver 옵션을 써서 기본적으로 사용할 로깅 드라이버를 변경할 수 있습니다. max-size와 같은 --log-opt 옵션 또한 도커 데몬에 적용함으로써 모든 컨테이너에 일괄적으로 사용할 수 있습니다.

     

    Note. 도커 데몬 시작 옵션 변경 방법

    1. 도커 데몬 서비스의 시작 옵션 직접 변경: 운영체제마다 사용 방법 상이

    2. daemon.json 파일 작성: 도커 데몬은 기본적으로 /etc/docker/damon.json 파일을 읽어 실행 옵션으로 사용

     

    로깅 드라이버

    사용 가능한 모든 드라이버 목록

     

    Configure logging drivers

     

    docs.docker.com

     

    syslog 로그

      syslog는 유닉스 계열 운영체제에서 로그를 수집하는 오래된 표준 중 하나로서, 커널, 보안 등 시스템과 관련된 로그, 애플리케이션의 로그 등 다양한 종류의 로그를 수집해 저장합니다. 대부분의 유닉스 계열 운영체제에서는 syslog를 사용하는 인터페이스가 동일하기 때문에 체계적으로 로그를 수집하고 분석할 수 있다는 장점이 있습니다.

     

    fluentd 로깅

      fluentd는 각종 로그를 수집하고 저장할 수 있는 기능을 제공하는 오픈소스 도구로서, 도커 엔진의 컨테이너의 로그를 fluentd를 통해 저장할 수 있도록 플러그인을 공식적으로 제공합니다. fluentd은 데이터 포맷으로 JSON을 사용하기 때문에 쉽게 사용할 수 있을뿐만 아니라 수집되는 데이터를 AWS S3, HDFS(Hadoop Distributed File System), MongoDB 등 다양한 저장소에 저장할 수 있다는 장점이 있습니다.

     

    아마존 클라우드워치 로그

      AWS(Amazon Web Service)에서는 로그 및 이벤트 등을 수집하고 저장해 시각적으로 보여주는 클라우드워치(CloudWatch)를 제공합니다. 도커를 AWS EC2에서 사용하고 있다면 다른 도구를 별도로 설치할 필요 없이 컨테이너에서 드라이버 옵션을 설정하는 것만으로 클라우드워치 로깅 드라이버를 사용할 수 있습니다.

    반응형

    'BackEnd > docker' 카테고리의 다른 글

    도커 이미지(Docker Image)  (0) 2022.03.15
    컨테이너 자원 할당 제한  (0) 2022.03.12
    도커 네트워크(Docker Network)  (0) 2022.03.09
    도커 볼륨(Docker Volume)  (0) 2022.03.06
    도커 컨테이너(Docker Container)  (0) 2022.03.06

    댓글

Designed by Tistory.