Docker - Logging

2023. 5. 13. 22:42·⚙️ Ops/Docker
목차
  1. Logging
  2. 로그를 출력하는 다양한 옵션
  3. 로그 드라이버의 종류
  4. Syslog
  5. 서버에서 rsyslog 컨테이너 생성
  6. 서버의 rsyslog 컨테이너 내부에 rsyslog.conf 파일의 syslog 서버를 구동시키는 옵션 주석해제
  7. 클라이언트에서 로그 컨테이너 생성과 동시에 서버의 로그 컨테이너와 태그 지정
  8. 서버에서 syslog 파일 확인을 하면 로그가 전송된 것을 알 수 있다.
  9. fluentd
  10. MongoDB 머신에서 MongoDB 컨테이너 생성
  11. fluentd 머신의 로컬에 다음 내용을 저장한다.
  12. fluentd 컨테이너 생성

Logging

도커는 컨테이너의 표준출력(stdout)과 에러(stderr)를 별도의 Metadata 파일로 컨테이너 내부에 저장한다.

저장 경로는 컨테이너 내부의 /var/lib/docker/containers/{container-id}/{container-id}-json.log 의 경로로 저장된다.

아래 명령어는 도커 컨테이너 내부의 로그를 출력하는 기본적인 명령어와 옵션들이다.

# 컨테이너 내부 로그 출력
$ docker logs {container-name}

# 컨테이너 내부 로그 끝 2줄만 출력
$ docker logs {container-name} --tail 2

# 컨테이너 내부 로그의 특정 시간대 검색 (유닉스 시간대 기준)
$ docker logs {container-name} --sinse

로그를 출력하는 다양한 옵션

--tail 2 : 로그의 끝에서 2줄 출력
--head 2 : 로그의 처음부터 2줄 출력
--sinse : 유닉스 시간을 입력해 특정 시간 이후 로그 기록
-f : 로그의 스트림 출력
-t : 로그의 타임 스탬프
--log-opt --max-size : 로그파일의 사이즈 지정
--log-opt --max-file : 로그 파일의 개수 지정
--log-driver : 로그 드라이버 지정 가능 (default = json)


로그 드라이버의 종류

  • syslog
  • journald
  • fluentd
  • awslogs

Syslog

기본적으로 로컬 호스트의 syslog에 저장되며 OS 마다 syslog의 위치가 상이하다.

  • Debian 계열 : /var/log/syslog
  • Redhat 계열 : /var/log/messages
  • Ubuntu 16.04 & coreOS : journalctl -u docker.service
    Syslog를 외부서버에 설치해 로그를 외부로도 보낼 수 있다. 그 방법으로는 `rsyslog`를 써서 중앙 컨테이너로 로그를 저장하는 예시를 아래에서 보자. 서버, 클라이언트 총 2개의 가상머신이 있다고 가정한다.

서버에서 rsyslog 컨테이너 생성

$ docker run -it -h rsyslog --nama LogContainer -p 514:514 -p 514:514/udp centos:latest

서버의 rsyslog 컨테이너 내부에 rsyslog.conf 파일의 syslog 서버를 구동시키는 옵션 주석해제

$ vi /etc/rsyslog.conf

#Provides UDP syslog reception
$ModLoad imudp
$UDPServer Run 514

:wq

# rsyslog 재기동
$ service rsyslog restart

클라이언트에서 로그 컨테이너 생성과 동시에 서버의 로그 컨테이너와 태그 지정

태그는 로그가 생성될 때 함께 저장될 태그이며 로그를 분류하는데에 좋다.

$ docker run -it \
$ --log-driver=syslog \
$ --log-opt syslog-address=tcp://{Server-IP}:514 \
$ --log-opt tag="LogContainer" \
$ centos:latest

서버에서 syslog 파일 확인을 하면 로그가 전송된 것을 알 수 있다.

$ tail /var/log/syslog

--log-opt syslog-facillity를 사용하면 로그가 저장될 파일도 바꿀수 있다.
facillity는 로그를 생성하는 주체에 따라 로그를 다르게 저장하는 것으로, 여러 어플리케이션에서 수집되는 로그를 분류하는 방법이다.


기본적으로 daemon으로 설정되어 있지만

  • kern
  • user
  • mail
    등 다른 facillity를 사용할 수 있다.
    facillity 옵션을 쓰면 rsyslog 컨테이너 내부에 facillity 별로 로그파일이 따로 생성된다.

fluentd

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


fluentd의 데이터 포맷도 json이며 수집되는 데이터를 AWS, S3, HDFS, MongoDB등 다양한 곳에 저장할 수 있다.


다음 예시는 fluentd와 MongoDB를 연동해 데이터를 저장하는 방법을 보여준다.
Docker Server -> fluentd -> MongoDB 의 Flow이며, 각각의 가상머신이 있다고 가정한다.


MongoDB 머신에서 MongoDB 컨테이너 생성

$ docker run -d --name MongoContainer -p 27017:27017 mongo:latest

fluentd 머신의 로컬에 다음 내용을 저장한다.

<source>
  @type forward
</source>

<match docker.**>
  @type mongo
  database nginx
  collection access
  host {MongoDB-Server-IP}
  port 27017
  flush_interval 10a
  user root
  password password

fluentd 컨테이너 생성

$ docker run -d --name FluentdContainer -p 24224:24224 \
$ -v ${pwd}/fluentd.conf:/fluentd/etc/fluent.conf \
$ -e FLUENTD_CONF=fluent.conf \
$ fluentd:latest
저작자표시

'⚙️ Ops > Docker' 카테고리의 다른 글

Docker Private Registry 구축  (0) 2023.05.30
Docker - Container Registry 구축  (0) 2023.05.26
Docker - Network  (1) 2023.05.09
Docker - Volume  (0) 2023.05.09
Docker Compose  (0) 2023.04.06
  1. Logging
  2. 로그를 출력하는 다양한 옵션
  3. 로그 드라이버의 종류
  4. Syslog
  5. 서버에서 rsyslog 컨테이너 생성
  6. 서버의 rsyslog 컨테이너 내부에 rsyslog.conf 파일의 syslog 서버를 구동시키는 옵션 주석해제
  7. 클라이언트에서 로그 컨테이너 생성과 동시에 서버의 로그 컨테이너와 태그 지정
  8. 서버에서 syslog 파일 확인을 하면 로그가 전송된 것을 알 수 있다.
  9. fluentd
  10. MongoDB 머신에서 MongoDB 컨테이너 생성
  11. fluentd 머신의 로컬에 다음 내용을 저장한다.
  12. fluentd 컨테이너 생성
'⚙️ Ops/Docker' 카테고리의 다른 글
  • Docker Private Registry 구축
  • Docker - Container Registry 구축
  • Docker - Network
  • Docker - Volume
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      Lock #Thread #Concurrency
      React #Markdown
      GStreamer #Pipeline
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Docker - Logging
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.