Docker 모니터링
📌 컨테이너 모니터링은 실행 중인 컨테이너의 성능, 자원 사용량(CPU, 메모리, 네트워크 등)을 실시간으로 관찰하고 관리하는 과정입니다. 이를 통해 컨테이너의 상태를 확인하고, 문제가 발생했을 때 신속히 대응할 수 있습니다.
Docker 모니터링을 사용하는 이유
이유 | 설명 |
성능 최적화 | 컨테이너의 자원 사용량(CPU, 메모리 등)을 확인하여 부하를 줄이고, 성능을 개선할 수 있음. |
문제 해결 | 컨테이너에서 발생하는 이슈를 빠르게 파악하고, 원인을 찾아 해결할 수 있음. |
효율적 자원 관리 | 여러 컨테이너가 자원을 어떻게 사용하는지 확인하고, 필요한 경우 조정 가능. |
운영 환경 안정화 | 자원 초과 사용을 방지하고, 안정적인 운영 환경을 유지. |
주요 Docker 모니터링 도구 및 명령어
도구/명령어 | 설명 | 장점 | 단점 |
docker stats | 실행 중인 컨테이너의 자원 사용량(CPU, 메모리, 네트워크 등)을 실시간으로 표시. | 간단하고 실시간 데이터 제공. | 기본적인 정보만 제공. |
htop | 시스템 전체 자원(CPU, 메모리 등)과 실행 중인 프로세스를 실시간으로 확인. | 사용자 친화적 인터페이스, 다양한 정보 제공. | Docker 전용 도구는 아님. |
외부 모니터링 도구 | Grafana, Prometheus, ELK Stack, Datadog 등. | 상세한 데이터 시각화 및 여러 컨테이너 관리 가능. | 설정 복잡, 추가 학습 필요. |
Docker 기본 모니터링 명령어
1. docker stats
- 기능: 실행 중인 모든 컨테이너의 자원 사용량을 실시간으로 표시.
- 주요 정보:
- CPU 사용량(%)
- 메모리 사용량(MB, %)
- 네트워크 I/O
- 블록 I/O
- 사용법:
특정 컨테이너를 모니터링하려면 이름 또는 ID 추가:docker stats
docker stats [컨테이너 이름 또는 ID]
2. htop
- 기능: 리눅스 시스템 전체 자원 및 프로세스를 실시간으로 모니터링.
- 설치 및 실행:
docker run --name test-tools -ti -d ubuntu:22.04 docker exec -ti test-tools /bin/bash apt update && apt install htop -y htop
- 특징:
- CPU, 메모리, 스왑 사용량 그래픽 표시.
- 실행 중인 프로세스 관리(종료, 우선순위 변경 등).
- 실시간 모니터
외부 모니터링 도구 (추천)
도구 | 특징 |
Prometheus | 컨테이너 데이터를 수집하고, Grafana와 연동해 시각화 가능. |
Grafana | Prometheus와 연동하여 상세한 대시보드 제공. |
Datadog | 클라우드 기반 모니터링 도구로, 컨테이너 상태와 성능 추적에 적합. |
ELK Stack | 로그 분석 및 시각화에 강력하며, ElasticSearch, Logstash, Kibana로 구성. |
cAdvisor | Google에서 개발한 Docker 전용 모니터링 도구로, 컨테이너의 성능 및 자원 사용량에 특화. |
Docker 로깅
📌 로깅(Loggin)은 컨테이너 실행 과정에서 발생하는 이벤트나 메시지를 기록하는 것.
- Docker는 모든 컨테이너 로그의 표준 출력(stdout) 또는 표준 에러(stderr)를 캡처하여 json-file 로깅 드라이버를 사용하여 json 형식으로 파일에 기록합니다
- 목적:
- 에러 및 문제 원인을 파악.
- 컨테이너의 상태 및 동작을 추적.
Docker 로깅 명령어
- 로그 확인:
docker logs [컨테이너 이름 또는 ID]
- 실시간 로그 확인:
docker logs -f [컨테이너 이름 또는 ID]
- -f: 실시간 로그 스트림.
Docker 모니터링과 로깅의 장단점
구분 | 장점 | 단점 |
모니터링 | 컨테이너 상태를 실시간으로 파악 가능.문제 예방 및 자원 최적화. | 기본 도구는 제한된 정보만 제공.외부 도구 설정 필요. |
로깅 | 실행 과정 기록으로 디버깅과 분석에 유용.운영 중 이슈 추적 가능. | 로그 데이터가 많아지면 관리가 어려움.추가 저장소 필요. |
추가 팁 및 알아야 할 정보
- 모니터링과 로깅은 함께 사용:
- 모니터링은 현재 상태를 추적, 로깅은 과거 기록을 분석.
- 둘을 함께 사용하면 문제 원인 파악과 예방이 더욱 효과적.
- 외부 도구 도입:
- Docker 기본 도구로는 대규모 환경에서 한계가 있음.
- Prometheus + Grafana 같은 툴로 시각화와 자동 알림 설정.
- 자원 제한 설정:
- 컨테이너가 과도한 자원을 사용하는 것을 방지하려면 자원 제한 설정을 활용:
docker run --memory="512m" --cpus="1.0" [이미지 이름]
Docker 로깅 실
로그 파일의 기본 위치
- 로그 파일은 컨테이너별로 저장되며, 기본적으로 다음 위치에 저장됩니다:
/var/lib/docker/containers/<컨테이너_ID>/<컨테이너_ID>-json.log
Docker 로깅 명령어
1. 특정 컨테이너의 로그 보기
# 컨테이너 실행 (로그 생성)
docker run --name logs-test --rm -d ubuntu:22.04 /bin/bash -c 'while true; do date; sleep 1; done'
# 전체 로그 출력
docker logs logs-test
# 실시간 로그 보기
docker logs -f logs-test
# 마지막 10줄부터 로그 보기
docker logs -f --tail 10 logs-test
2. 로그 파일 경로 확인
docker inspect logs-test --format "{{.LogPath}}"
- 위 명령어는 컨테이너의 로그 파일 경로를 출력합니다.
로그 파일 로테이션 설정
운영 환경에서는 로그 파일 크기를 제한하고, 오래된 로그를 제거하거나 순환(로테이션)하도록 설정해야 합니다.
1. 컨테이너별 로깅 드라이버 구성
- 로그 파일의 최대 크기와 파일 개수 지정.
docker run -d \
--log-driver json-file \
--log-opt max-size=10m \ # 로그 파일 최대 크기 (10MB)
--log-opt max-file=10 \ # 최대 로그 파일 개수
--name nginxtest \
--restart always \
-p 80:80 \
-p 443:443 \
nginx:latest
2. nginx 컨테이너로 로깅 실습
- 컨테이너 실행:
- docker run -d \ --log-driver json-file \ --log-opt max-size=1m \ # 로그 파일 크기 제한 (1MB) --log-opt max-file=5 \ # 최대 파일 개수 (5개) --name nginxtest \ --restart always \ -p 80:80 \ -p 443:443 \ nginx:latest
- 실시간 로그 확인:
- docker logs -f nginxtest
- 로그 파일 크기와 개수 제한 확인:
- 제한된 크기의 로그 파일이 최대 5개까지 생성되고, 오래된 파일은 순환 방식으로 삭제.
- 임의로 많은 로그 생성:
- sudo apt update && sudo apt install -y wrk wrk -t10 -c100 -d30s http://localhost:80/
Docker Compose에서 로깅 설정
Docker Compose 파일에서 서비스별로 로깅 설정을 추가할 수 있습니다.
예제: Compose 파일에서 로그 파일 제한
services:
app:
image: myapp:latest
ports:
- "8080:8080"
logging:
driver: 'json-file'
options:
max-size: '10m' # 로그 파일 최대 크기 10MB
max-file: '10' # 최대 10개의 로그 파일 유지
Docker 로깅 요약
항목 | 설명 |
기본 드라이버 | json-file: 컨테이너의 표준 출력과 에러 로그를 JSON 형식으로 저장. |
기본 로그 파일 위치 | /var/lib/docker/containers/<컨테이너_ID>/<컨테이너_ID>-json.log. |
로그 관리 명령어 | docker logs, docker inspect 등을 사용해 로그 확인 가능. |
로그 파일 크기 제한 | --log-opt max-size와 --log-opt max-file로 로그 파일 크기와 개수를 제어. |
실시간 로그 확인 | docker logs -f로 실시간 로그를 스트리밍. |
Compose에서 로깅 설정 | docker-compose.yaml에 logging 섹션 추가로 서비스별 로그 제한 설정 가능. |
로깅의 장단점
장점 | 단점 |
문제 발생 시 원인 분석 및 디버깅에 유용. | 로그 파일 크기가 커지면 디스크 공간 부족 우려. |
표준 출력/에러를 자동 저장하여 관리 간편. | 기본 설정만으로는 대규모 로깅 관리에 한계. |
로테이션 설정으로 오래된 로그 자동 제거 가능. | 추가 설정 없이 장기적으로 로그 축적 어려움. |
부가적으로 알아야 할 정보
- 외부 로깅 도구 연동:
- Docker는 Fluentd, syslog, Logstash와 같은 외부 로깅 도구를 지원.
- 대규모 환경에서는 중앙 집중식 로그 관리가 필요.
- 로깅 드라이버 변경:
- 컨테이너 실행 시 --log-driver 옵션으로 다른 로깅 드라이버 설정 가능.
- 기본 로그 관리 정책:
- 컨테이너별로 설정이 가능하며, 환경에 따라 적절히 조정 필요.
'Docker > Docker' 카테고리의 다른 글
[Docker] Docker Network (0) | 2025.02.06 |
---|---|
[Docker] Docker Volume (0) | 2025.02.05 |
[Docker] Docker Compose (0) | 2025.02.03 |
[Docker] Dockerfile (1) | 2025.02.01 |
[CI/CD] Github Actions CI (0) | 2025.01.31 |