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
  • 사용법:
    docker stats
    
    특정 컨테이너를 모니터링하려면 이름 또는 ID 추가:
    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 모니터링과 로깅의 장단점

구분   장점 단점
모니터링 컨테이너 상태를 실시간으로 파악 가능.문제 예방 및 자원 최적화. 기본 도구는 제한된 정보만 제공.외부 도구 설정 필요.
로깅 실행 과정 기록으로 디버깅과 분석에 유용.운영 중 이슈 추적 가능. 로그 데이터가 많아지면 관리가 어려움.추가 저장소 필요.

추가 팁 및 알아야 할 정보

  1. 모니터링과 로깅은 함께 사용:
    • 모니터링은 현재 상태를 추적, 로깅은 과거 기록을 분석.
    • 둘을 함께 사용하면 문제 원인 파악과 예방이 더욱 효과적.
  2. 외부 도구 도입:
    • Docker 기본 도구로는 대규모 환경에서 한계가 있음.
    • Prometheus + Grafana 같은 툴로 시각화와 자동 알림 설정.
  3. 자원 제한 설정:
    • 컨테이너가 과도한 자원을 사용하는 것을 방지하려면 자원 제한 설정을 활용: 
    • 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 컨테이너로 로깅 실습

  1. 컨테이너 실행:
  2. 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
  3. 실시간 로그 확인:
  4. docker logs -f nginxtest
  5. 로그 파일 크기와 개수 제한 확인:
    • 제한된 크기의 로그 파일이 최대 5개까지 생성되고, 오래된 파일은 순환 방식으로 삭제.
  6. 임의로 많은 로그 생성:
  7. 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 섹션 추가로 서비스별 로그 제한 설정 가능.

로깅의 장단점

장점 단점
문제 발생 시 원인 분석 및 디버깅에 유용. 로그 파일 크기가 커지면 디스크 공간 부족 우려.
표준 출력/에러를 자동 저장하여 관리 간편. 기본 설정만으로는 대규모 로깅 관리에 한계.
로테이션 설정으로 오래된 로그 자동 제거 가능. 추가 설정 없이 장기적으로 로그 축적 어려움.

부가적으로 알아야 할 정보

  1. 외부 로깅 도구 연동:
    • Docker는 Fluentd, syslog, Logstash와 같은 외부 로깅 도구를 지원.
    • 대규모 환경에서는 중앙 집중식 로그 관리가 필요.
  2. 로깅 드라이버 변경:
    • 컨테이너 실행 시 --log-driver 옵션으로 다른 로깅 드라이버 설정 가능.
  3. 기본 로그 관리 정책:
    • 컨테이너별로 설정이 가능하며, 환경에 따라 적절히 조정 필요.

 

'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

+ Recent posts