일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Python
- Refactoring
- 코어 이더리움 프로그래밍
- Fast API
- docker
- 파이썬
- guru
- Kubernetes
- Container
- 플랫폼
- BAEKJOON
- 동시성
- Thread
- RabbitMQ
- Algorithm
- 블록체인
- 전문가를 위한 파이썬
- IMAGE
- 러스트
- rust
- 알고리즘
- AWS
- BlockChain
- 백준
- function
- fluent python
- dockerfile
- 이더리움
- Network
- Ethereum
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
[3] Docker Logging 및 자원 할당 본문
728x90
1. Docker Logging
- 컨테이너의 표준 출력(StdOut)과 에러(StdErr) 로그를 별도의 메타데이터 파일로 저장하며 이를 확인하는 명령어를 제공함
$ docker logs [컨테이너명]
- 컨테이너 내부에서 출력을 보여주는 명령어
$ docker logs --tail n [컨테이너명]
: 최근 n개의 줄의 로그만 보여줌$ docker logs -f [컨테이너명]
: 로그를 스트림으로 확인할 수 있음
로그 저장방식
- 컨테이너 로그는 JSON 형태로 도커 내부에 저장됨
--log-opt
옵션으로 컨테이너 Json 로그 파일의 최대 크기를 지정할 수 있음
docker run -it
--log-opt max-size=10k --log-opt max-file=3
--name log-test ubuntu:14.04
- 각종 로깅 드라이버를 사용하여 수집할 수도 있음
- 도커 데몬에 적용함으로 모든 컨테이너에서 일괄적으로 동일한 조건으로 사용할 수도 있음
DOCKER_OPTS="--log-driver=syslog"
syslog 로그
컨테이너 로그는 JSON 뿐만 아니라 syslog로 보내 저장하도록 설정할 수 있음
syslog란?
유닉스 계열 운영체제에서 로그를 수집하는 오래된 표준 중 하나
커널, 보안 등 시스템과 관련된 로그, 어플리케이션의 로그 등 다양한 로그를 수집해 저장함
- 기본적으로 로컬호스트의 syslog에 저장
- 운영체제 및 배포판에 따라 syslog 파일의 위치를 알아야 확인이 가능
- 우분투
- /var/log/syslog
- CentOS || RHEL
- /var/logmessages
- 우분투 16.04 || CoreOS
- journalctl -u docker.service
- syslog를 원격 서버에 설치하면, 로그 정보를 원격 서버에 보낼 수 있음
- rsyslog를 이용해 중앙 컨테이너로 로그를 저장할 수 있음
fluentd 로깅
- 각종 로그를 수집 및 저장할 수 있는 오픈소스 도구
- JSON을 사용하기 때문에, 다양한 저장소에 저장할 수 있음
2. Docker 컨테이너 자원할당
1) Docker 자원 확인 및 업데이트
$ docker inspect (컨테이너 이름)
docker update (변경할 자원 제한) (컨테이너 이름)
docker update --cpuset-cpus=1 centos ubuntu
- 메모리 제한
docker run -d \
-- memory="1g" \
--name memory_1g \
nginx
- m(메가바이트), g(기가바이트)로 제한할 수 있는 최소 메모리는 4MB
- 컨테이너에 할당된 메모리를 초과하면 컨테이너는 자동으로 종료되므로 어플리케이션에 따라 적절한 메모리 할당이 필요
- 컨테이너 CPU 제한
--cpu-shares
- 컨테이너에 가중치를 설정해 해당 컨테이너가 CPU를 상대적으로 얼마나 사용가능한지 설정
- 어느 비중만큼 나눠 쓸 것인지 명시하는 옵션
- 상대적인 값으로 아무 설정도 하지 않았을 시, default는 1024로 1의 비중을 뜻함
- 다른 컨테이너가 512를 할당하면 상대적으로 2:1의 비율로 CPU를 사용하여 총 66%:33%를 쓰게 됨
--cpuset-cpu
- 컨테이너가 특정 CPU만 사용하도록 설정
- index는 0부터 시작
- 여러개 지정을 원하면 --cpuset-cpu="0,3" 또는 "0-2"로 설정 가능함
--cpu-period, --cpu-quota
- 컨테이너의 CFS(Completely Fair Scheduler) 주기는 기본적으로 100ms
- 위 옵션으로 이 주기를 변경 가능함
--cpu-quota=100000
이 100ms을 의미함--cpu-period=100000 \--cpu-quota=25000
을 하면 CPU 주기가 1/4로 감소- [cpu-quota]/[-cpu-period] 만큼의 CPU 시간을 할당받음
CFS(Completely Fair Scheduler)란
- 리눅스 커널의 2.6.23 릴리스에 병합된 프로세스 스케줄러이며 현재의 기본 스케줄러
- 프로세스 실행을 위해 CPU 자원 할당을 관리하며 상호작용 성능을 극대화하면서도 전반적인 CPU 이용을 극대화
- 프로세서 시간을 제공할 때 밸런스(공평성)를 유지하는 것
- 프로세스에 공평한 양의 프로세서가 제공되어야 함
- 작업 시간의 밸런스가 무너진 경우에는(다른 작업에 비해 하나 이상의 작업에 공평한 양의 시간이 주어지지 않은 경우) 작업 시간이 적게 지정된 작업에 실행 시간이 주어져야 함
- Block I/O 제한
- 컨테이너를 생성할 때, 옵션 미설정 시 컨테이너 내부에서 파일을 읽고 쓰는 대역폭 제한이 설정되지 않음
- 블록 입출력을 과도하게 사용하지 않도록 하려면, 블록 입출력을 제한해야 함
--device-write-bps
/--device-read-bps
/--device-write-iops
/--device-read-iops
- 초당 설정
- Direct I/O의 경우만 블록 입출력에 제한이 되며, Buffered I/O는 제한되지 않음
728x90
'Infra > Docker' 카테고리의 다른 글
[5] Dockerfile (0) | 2021.05.28 |
---|---|
[4] Docker 이미지 (0) | 2021.04.26 |
[2] Docker Network (0) | 2021.04.26 |
[0] Docker에 대해 알아봅시다! (0) | 2021.04.26 |
[1] 도커 이미지와 컨테이너 (0) | 2021.04.26 |
Comments