replicas 옵션을 통해 컨테이너를 여러 개 띄우다 보니 각 컨테이너에서 생성하는 로그가 하나의 파일에 찍히지 않고 컨테이너 1개의 로그만 제대로 저장되는 현상 발생. 복제된 서비스가 모두 하나의 폴더를 마운트하니 당연한 일인 듯...
도커에 built-in 되어있는 logging driver 중 fluentd를 사용하기로 결정
이미지는 공식 이미지 중 v0.12-debian-2를 사용함. (굳이 구버전을 사용한 이유는 fluent의 플러그인 중 elements를 정렬해주는 fluent-plugin-order를 사용하기 위함이었지만, 현재는 어차피 로그를 csv로 출력하기 때문에 elements 정렬이 필요가 없어 구버전을 사용하는 의미가 사라졌음...)
<source>
@type forward
port 24224 # fluentd가 작동되는 포트
bind 0.0.0.0
</source>
<match *> # 모든 로그 (컨테이너에 할당한 tag 옵션이 타겟임)
@type file
path /logs/ # 컨테이너 밖에서 마운트해줄 로그 폴더
format csv
include_time_key # 로그가 타임 스트링을 포함하게 됨
fields time, container_id,container_name,source,log # csv에 담을 필드
timezone +09:00 # 타임존 세팅 (기본은 UTC+0)
</match>
fluentd.conf
version: "3.6"
services:
fluentd:
image: fluentd:v0.12-debian-2
volumes:
- ./fluentd.conf:/fluentd/etc/fluent.conf # 미리 생성해둔 config 파일 마운트
- ./logs:/logs # 로그가 저장될 폴더 마운트
ports:
- "24224:24224"
service:
image: {IMAGE}
deploy:
replicas: 7
logging:
driver: "fluentd"
options:
fluentd-address: fluentd
tag: "{{.Name}}" # 컨테이너 이름이 로그 제일 앞에 붙으며 fluentd는 이것을 타겟으로 match 조건을 설정하게됨
depends_on:
- fluentd # service가 fluentd보다 먼저 실행되면 fluentd의 주소를 잡지 못하므로 필수
docker-compose.yml
'도커' 카테고리의 다른 글
[도커] 컨테이너 타임존 설정 (0) | 2022.11.17 |
---|---|
[도커] 컴포즈 로그 출력 타임 아웃 (0) | 2022.06.23 |
[도커] docker stats 이름순으로 정렬 및 모니터링 (0) | 2022.05.24 |
[도커] 컨테이너 한국어 로케일 설정 (0) | 2021.08.20 |
[도커] 자주 쓰는 명령어 (2) | 2021.02.08 |