컨테이너 로깅 :: 컨테이너 로그 확인하기

이주희·2022년 11월 2일
0

Docker

목록 보기
9/16

1. json-file 로그 사용하기

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

  • 어떠한 설정도 하지 않았다면 도커는 컨테이너 로그를 JSON 파일로 저장하지만,
    별도의 로깅 드라이버를 사용하게 설정해 컨테이너 로그를 수집할 수 있다.

1-1. docker logs 명령어

  • 컨테이너의 표준 출력을 확인함으로써 애플리케이션의 상태를 알 수 있다.

  • 간단하고 빠르게 에러를 확인할 수 있다.

  • 컨테이너 내부에서 bash 셸 등을 입출력한 내용을 확인할 수 있다.

/* 기본 형태 */
docker logs 컨테이너명

/* --tail 옵션: 마지막 로그 줄부터 출력할 줄의 수 설정 */
docker logs --tail 2 컨테이너명 // 마지막 2줄만 출력

/* --since 옵션: 유닉스 시간을 입력해 특정 시간 이후의 로그 확인 */
docker logs --since 유닉스시간 컨테이너명

/* -t 옵션: 타임스탬프 표시 */
/* -f 옵션: 실시간으로 출력되는 내용 확인, 로그를 스트림으로 확인 가능 */
docker logs -f -t 컨테이너명

1-2. 로그 저장 위치

  • 컨테이너 로그는 JSON 형태로 도커 내부에 저장된다.
  • 저장 경로 /var/lib/docker/containers/${CONTAINER_ID}/${CONTAINER_ID}-json.log

1-3. 로그 파일 크기 지정

  • 컨테이너 내부의 출력이 너무 많은 상태로 방치하면 json 파일의 크기가 계속해서 커질 수 있고,
    결국 호스트의 남은 저장 공간을 전부 사용할 수도 있다.

  • run 명령어에--log-opt 옵션으로 컨테이너 json 로그 파일의 최대 크기를 지정할 수 있다.

docker run -it
--log-opt max-size=10k // max-size: 로그 파일의 최대 크기
--log-opt max-file=3 // max-file: 로그 파일의 개수
--name log-test ubuntu:14.04

2. syslog 로그

  • syslog를 원격 서버에 설치하면 로그 옵션을 추가해 로그 정보를 원격 서버로 보낼 수 있다.

  • 우분투에서 쓸 수 있는 기본적인 로깅 방법이므로, 별도의 UI를 제공하지 않지만 logentries, LogAnalyzer 등과 같은 로그 분석기와 연동하면 웹 인터페이스를 활용해 편리하게 로그를 확인할 수 있다.

  • 기본적으로 로컬 호스트의 syslog에 저장하므로, 운영체제 및 배포판에 따라 syslog 파일의 위치를 알아야 이를 확인할 수 있다.

    syslog

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

2-1. rsyslog 설정

syslog를 원격에 저장하는 방법의 하나인 rsyslog를 써서 중앙 컨테이너로 로그 저장하기

  1. 서버 호스트에서 rsyslog 컨테이너를 생성한다.
  2. 컨테이너 내부의 rsyslog.conf 파일을 열어 syslog 서버를 구동시키는 항목의 주석을 해제한 후 변경사항을 저장한다.
  3. rsyslog 서비스를 재시작한다.
  4. 클라이언트 호스트에서 컨테이너를 생성한다.
  5. 서버의 rsyslog 컨테이너로 되돌아와 컨테이너 내부의 syslog 파일을 확인하면 로그가 전송된 것을 알 수 있다!

3. fluentd 로깅

  • fluentd는 각종 로그를 수집하고 저장할 수 있는 기능을 제공하는 오픈소스 도구로서,
    도커 엔진의 컨테이너의 로그를 fluentd를 통해 저장할 수 있도록 플러그인을 공식적으로 제공한다.

  • 데이터 포맷으로 JSON을 사용하기 때문에 쉽게 사용할 수 있다.

  • 수집되는 데이터를 AWS S3, HDFS, MongoDB 등 다양한 저장소에 저장할 수 있다.

3-1. fluentd 설정 (with MongoDB)

도커 엔진은 fluentd 서버에 컨테이너의 로그를 전송하고, 이 로그는 다시 DB 서버로 전송되어 저장된다.

1. fluentd, MongoDB는 도커 허브에서 공식 이미지를 내려받을 수 있다.

2. fluentd 서버의 호스트에서 fluent.conf 파일을 생성한다.

// fluent.conf 파일
<source>
  @type forward
</source>

<match docker.**>
  @type mongo
  database nginx
  collection access
  host 192.168.0.102
  port 27017
  flush_interval 10s
</match>

3. fluentd.conf 파일이 저장된 디렉터리에서 fluntd 컨테이너를 생성한다.

fluent.conf 파일을 -v 옵션을 이용해 fluentd 컨테이너에 공유하고 설정 파일로 사용한다.

docker run -d --name fluentd -p 24224:24224
-v $(pwd)/fluent.conf:/fluentd/etc/fluent.conf
-e FLUENTD_CONF=fluent.conf
컨테이너명

4. 도커 서버에서 로그를 수집할 컨테이너를 생성한다.

docker run -p 80:80 -d
--log-driver=fluentd
--log-opt fluentd-address=192.168.0.101:24224 // fluentd 서버 주소
--log-opt tag=docker.nginx.webserver
nginx

5. 서버에 접근한 뒤 연결한 DB 서버에서 DB 컨테이너에 들어가 데이터를 확인한다.


4. 아마존 클라우드워치 로그

  • AWS에서는 로그 및 이벤트 등을 수집하고 저장해 시각적으로 보여주는 클라우드워치를 제공한다.

  • 도커를 AWS EC2에서 사용하고 있다면 다른 도구를 별도로 설치할 필요 없이 컨테이너에서 드라이버 옵션을 설정하는 것만으로 클라우드 워치 로깅 드라이버를 사용할 수 있다.

4-1. 클라우드워치 설정

1. 클라우드 워치에 해당하는 IAM 권한 생성

도커에서 AWS의 클라우드 워치를 쓸 수 있는 권한을 설정하려면 IAM 역할(Role)을 생성해야 한다.

2. 로그 그룹 생성

로그가 저장될 새로운 그룹을 생성한다.

3. 로그 그룹에 로그 스트림 생성

생성된 로그 그룹의 이름을 클릭해 로그 스트림을 생성한다.

4. 클라우드워치의 IAM 권한을 사용할 수 있는 EC2 인스턴스 생성과 로그 전송

EC2 인스턴스에서 클라우드워치를 사용하도록 권한을 추가한다.

5. 컨테이너 생성과 로그 확인

인스턴스가 생성됐다면 해당 서버에 접속해 도커 엔진을 설치한 뒤 클라우드워치를 로깅 드라이버로 사용할 수 있다.
IAM 권한을 사용하도록 설정한 EC2 인스턴스의 도커 엔진에서 컨테이너를 생성한다.
클라우드워치의 로그 스트림 내의 로그를 확인하면 로그가 수집됐음을 확인할 수 있다.

profile
🍓e-juhee.tistory.com 👈🏻 이사중

0개의 댓글