AWS/Docker+CICD

Docker 모니터링&로깅

sehunbang 2024. 4. 5. 14:54

내가 실행하는 앱이 어떤 상태인지 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      [컨테이너 이름 또는 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