업무/정리 & 오류
[Docker] docker compose 로그 관리 (syslog)
phyho
2025. 11. 26. 14:19
* docker compose 로그 설정 *
1. json-file (기본값)
컨테이너 로그(stdout/stderr)를 호스트 파일에 JSON 라인 형태로 저장.
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "5"
- max-size : 로그 파일 하나의 최대 크기.
- max-file : 로테이션 시 보관할 파일 갯수.
2. syslog
컨테이너 로그를 호스트의 syslog (rsyslog, syslog-ng등) 로 전송.
logging:
driver: "syslog"
options:
syslog-address: "udp://127.0.0.1:514"
tag: "test_tag"
syslog-facility: "local0"
- syslog-address : 로그를 보낼 syslog 주소.
- tag : syslog에 찍힐 태그.
- syslog-facility : 카테고리 종류. (daemon, local0 등)
현재 docker compose의 컨테이너 두개가 한 쌍으로 작업을 처리하고 있고
하나의 작업을 랜덤으로 할당받는 컨테이너 쌍이 4개, 즉 컨테이너 총 8개를 활용하고 있음.
각 컨테이너 4개의 로그를 하나의 파일에서 확인하고 싶어 syslog 방식을 활용해봄.
docker compose 설정파일에 아래와 같이 로깅 드라이버를 syslog로 설정하고 태그를 달아준다.
services:
test_app_01:
image: test_app:latest
container_name: test_app_01
logging:
driver: "syslog"
options:
tag: "test_app"
test_app_02:
image: test_app:latest
container_name: test_app_02
logging:
driver: "syslog"
options:
tag: "test_app"
....
test_worker_01:
image: test_worker:latest
container_name: test_worker_01
logging:
driver: "syslog"
options:
tag: "test_worker"
test_worker_02:
image: test_worker:latest
container_name: test_worker_02
logging:
driver: "syslog"
options:
tag: "test_worker"
....
- test_app
- test_app_01 (컨테이너 1-1)
- test_app_02 (컨테이너 1-2)
- test_app_03 (컨테이너 1-3)
- test_app_04 (컨테이너 1-4)
- test_worker
- test_worker_01 (컨테이너 2-1)
- test_worker_02 (컨테이너 2-2)
- test_worker_03 (컨테이너 2-3)
- test_worker_04 (컨테이너 2-4)
위처럼 test_app 태그를 가진 컨테이너가 4개, test_worker 태그를 가진 컨테이너가 4개가 되는데,
rsyslog 에서 같은 태그는 동일한 소스라고 인식한다.
이 태그를 기준으로 동일한 로그파일에 컨테이너 4개의 로그를 통합하면 된다.
rsyslog 설정파일 생성.
sudo vi /etc/rsyslog.d/30-test.conf
template(name="AppLog" type="string"
string="/var/log/app/%programname%.log")
if $syslogtag startswith 'test_' then {
action(
type="omfile"
dynaFile="AppLog"
createDirs="on"
)
stop
}
- type="omfile" : 어떤 output 모듈을 쓸지 지정하는 옵션.
- omfile (output module file) - 파일로 쓰는 모듈.
- dynaFile="AppLog" : 어디에 쓸지(파일 경로)를 템플릿으로 정하는 옵션.
- 위에서는 상단 template 결과 문자열을 파일 경로로 사용.
- createDirs="on"
- dynaFile 경로 중에 중간 디렉토리가 없으면 자동 생성.
설정파일 변경 후에는 재시작 필요!
sudo systemctl restart rsyslog
같은 태그를 가진 컨테이너의 로그는 하나의 로그파일에 쌓이게 된다.
test_app_01 ~ test_app_04 => test_app.log
test_worker_01 ~ test_worker_04 => test_worker.log