Docker 모니터링&로깅
내가 실행하는 앱이 어떤 상태인지 Docker 모니터링을 통해 알아보고, 실행 과정을 기록한 로깅도 살펴봅니다.
모니터링이란?
- 도커 모니터링이란?
- 도커에서 모니터링은 컨테이너가 어떻게 돌아가고 있는지 지켜보는 거예요. 컨테이너의 성능, 사용 중인 자원(예: CPU나 메모리), 네트워크 사용량 같은 것들을 확인할 수 있죠.
- 왜 중요한가요?
- 이런 정보를 알면 컨테이너가 잘 돌아가고 있는지, 어떤 문제가 있는지 파악할 수 있어요. 예를 들어, 어떤 컨테이너가 너무 많은 메모리를 쓰고 있다면, 그걸 조정해야 할 필요가 있겠죠.
- 어떻게 하나요?
- 도커에는 모니터링을 위한 몇 가지 기본 도구가 있어요. 예를 들어, docker stats 명령어를 쓰면 실행 중인 컨테이너의 자원 사용량을 실시간으로 볼 수 있죠.
- 또한, 외부 모니터링 도구를 사용해서 더 자세한 정보를 얻거나, 여러 컨테이너의 데이터를 한눈에 볼 수도 있어요.
- 그래서 뭐가 좋나요?
- 이런 모니터링 정보를 통해 문제를 빨리 발견하고 해결할 수 있어요. 그리고 컨테이너를 효율적으로 관리하고 최적화할 수 있죠.
Container 리소스 모니터링
내가 실행하는 앱이 어떤 상태인지 Docker 모니터링을 통해 알아봅니다.
- docker stats: 컨테이너 모니터링의 시작점
- Docker Stats란 무엇인가요?
- 'Docker stats'는 Docker에서 제공하는 간단하고 실용적인 모니터링 도구예요. 이 명령어를 사용하면 현재 실행 중인 Docker 컨테이너들이 얼마나 많은 자원(CPU, 메모리 등)을 사용하고 있는지 실시간으로 볼 수 있어요.
- 왜 중요한가요?
- 컨테이너가 시스템 자원을 얼마나 사용하고 있는지 알면, 성능 문제를 빨리 찾아내고 해결할 수 있어요. 예를 들어, 메모리 사용량이 너무 높으면 시스템에 부하가 걸릴 수 있으니까요.
- 어떻게 사용하나요?
- 매우 간단해요! 터미널에서 **docker stats**라고 입력하기만 하면 돼요. 그러면 현재 실행 중인 모든 컨테이너의 상태를 한눈에 볼 수 있죠.
- 이 명령어는 CPU 사용률, 메모리 사용량, 네트워크 I/O, 디스크 I/O 등 여러 중요한 정보를 보여줘요.
- 실제 예시
- 예를 들어보면, 이렇게 사용할 수 있어요:이 명령어를 실행하면, 실행 중인 모든 컨테이너의 상태가 표시돼요. 각 컨테이너의 이름, ID, CPU 사용량, 메모리 사용량 등이 실시간으로 업데이트되면서 나타나죠.
- Docker Stats란 무엇인가요?
docker stats 돌아 가는 모는 컨테이너
docker stats [컨테이너 이름 또는 ID] 특정 컨테이네

htop: 시스템 모니터링의 필수 도구
- htop이란 무엇인가요?
- 'htop'은 리눅스 시스템을 모니터링하는데 사용되는 강력한 도구예요. 일반적인 시스템 모니터와 비슷하지만, 사용하기 편하고 여러 가지 유용한 기능을 제공해요.
- 왜 htop을 사용하나요?
- 컴퓨터의 CPU, 메모리 사용량 같은 중요한 정보를 실시간으로 볼 수 있어요. 이 정보를 보면 컴퓨터가 어떻게 돌아가고 있는지, 어떤 프로세스가 많은 자원을 사용하고 있는지 알 수 있죠.
- htop의 주요 기능은 무엇인가요?
- 실시간 모니터링: CPU, 메모리, 스왑 사용량을 실시간으로 볼 수 있어요.
- 프로세스 관리: 실행 중인 프로세스를 쉽게 확인하고, 필요하면 종료시킬 수도 있어요.
- 사용자 친화적 인터페이스: 색상이 있는 그래픽과 간단한 조작으로 정보를 쉽게 읽을 수 있어요.
docker run --name test-tools -ti -d ubuntu:22.04
docker exec -ti test-tools /bin/bash
apt update ; apt upgrade -y; apt install htop -y;

htop
컨데이너 실시간으로 보

exit
df
- disk free의 약자로, 리눅스 시스템 전체의 디스크 사용량 확인 가능해요
- ubuntu 22.04에서 실행해보기
docker exec -ti test-tools /bin/bash
df -h
exit

du
- 디렉토리 별로 사용 공간을 나타내줘요
- ubuntu 22.04에서 실행해보기
docker exec -ti test-tools /bin/bash
du -sh
# 현재 디렉토리의 총 디스크 사용량을 GB 단위로 보여줌
du -h --max-depth=1
# 현재 디렉토리 한 단계 아래 디렉토리 까지만 사용량을 보여줌 exit

Container 로깅
내가 만든 앱의 실행 과정을 기록한 로깅도 살펴봅니다.
Container 로깅
- Docker는 모든 컨테이너 로그의 표준 출력(stdout) 또는 표준 에러(stderr)를 캡처하여 json-file 로깅 드라이버를 사용하여 json 형식으로 파일에 기록해요
Ubuntu 에서는 /var/lib/docker/containers/[컨테이너ID]/[컨테이너ID]-json.log에 로그가 기록돼요.
docker run --name logs-test --rm -d ubuntu:22.04 /bin/bash -c 'while true; do date; sleep 1; done'

# logs-test 컨테이너의 로그를 전체 출력하기
docker logs logs-test

docker logs -f logs-test
# logs-test 컨테이너의 로그를 tailing하기 (계속 찍힘)

docker logs -f --tail 10 logs-test
# 마지막 10줄부터 로그를 계속 보기 ( --tail 있으면 계속 찍힘)

로그 파일 설정 확인하기
docker inspect logs-test --format "{{.LogPath}}"
로그 로테이션 설정
docker run -d \
--log-driver json-file \ --log-opt max-size=10m \
--log-opt max-file=10 \
--name nginxtest \
--restart always \
-p 80:80 \
-p 443:443 \
nginx:latest
실습: nginx 를 Container로 실행시키고 log file 크기와 개수를 제한 확인
docker run -d \
--log-driver json-file \
--log-opt max-size=1m \
--log-opt max-file=5 \
--name nginxtest \
--restart always \
-p 80:80 \
-p 443:443 \
nginx:latest

로그 보기
docker logs -f nginxtest
로그를 임의로 많이 생성하기
sudo apt update && sudo apt install -y wrk

wrk -t10 -c100 -d30s http://localhost:80/
docker compose 파일에서 설정
app 컨테이너는 10mb 이하의 로그파일을 최대 10개까지 생성합니다.
services :
app:
...
logging:
driver: 'json-file'
options:
max-size: '10m'
max-file: '10'
사용한 컨테이너 정리
docker stop nginxtest
docker container rm nginxtest