[Cloud Native Observability] Prometheus - Monitoring Containers

IMKUNYOUNG·2024년 7월 31일
0

KCNA

목록 보기
48/56

현대 소프트웨어 개발 환경은 점점 더 컨테이너화를 도입하고 있습니다. 기존의 리눅스 호스트에서 Prometheus를 사용하여 메트릭을 수집하던 방식에서 벗어나, 컨테이너화된 환경에서도 효과적으로 모니터링을 수행하려면 새로운 도구와 설정이 필요합니다. 이 글에서는 컨테이너화된 환경에서 Docker 엔진 및 컨테이너 메트릭을 수집하기 위한 방법을 설명합니다.

Docker 엔진 메트릭 수집

Docker 엔진에서 메트릭을 수집하기 위해 먼저 Docker를 실행하는 호스트 머신에 설정을 추가해야 합니다. /etc/docker/ 경로에 daemon.json 파일을 생성하고, 다음과 같이 구성합니다:

{
  "metrics-addr": "IP_ADDRESS:PORT",
  "experimental": true
}

이 설정에서 metrics-addr는 메트릭을 노출할 IP 주소와 포트를 지정하며, experimental 옵션은 이 기능이 실험적임을 나타냅니다. 설정 후 Docker를 재시작해야 합니다.

Docker가 다시 시작되면, 이제 메트릭을 확인하기 위해 curl IP_ADDRESS:PORT/metrics 명령을 실행할 수 있습니다. 이 주소는 위의 설정에서 지정한 포트와 일치패야 합니다.

Prometheus에서 Docker 메트릭을 수집하려면 prometheus.yml 파일에 다음과 같이 새로운 작업을 추가합니다:

scrape_configs:
  - job_name: 'docker'
    static_configs:
      - targets: ['IP_ADDRESS:PORT']

여기서 IP_ADDRESSPORT는 Docker 가 실행중인 호스트 머신의 IP와 위에서 설정한 포트를 입력합니다.

cAdvisor를 통한 컨테이너 메트릭 수집

컨테이너별 메트릭을 수집하려면 cAdvisor 라는 도구를 사용해야 합니다. cAdvisor는 각 컨테이너의 CPU 사용량, 메모리 사용량, 가동 시간 등의 정보를 제공합니다.

cAdvisor를 설정하려면 Docker Compose 파일을 사용하여 컨테이너를 구성할 수 있습니다. 예시 설정은 다음과 같습니다:

version: '3'
services:
  cadvisor:
    image: google/cadvisor:latest
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro

이 설정을 통해 cAdvisor 컨테이너를 실행하고, 메트릭을 curl localhost:8080/metrics 명령을 통해 확인할 수 있습니다.

Prometheus에 cAdvisor 메트릭을 추가하려면 prometheus.yml 파일에 다음과 같은 작업을 추가합니다:

scrape_configs:
  - job_name: 'cadvisor'
    static_configs:
      - targets: ['IP_ADDRESS:8080']

Docker 메트릭과 cAdvisor 메트릭의 차이점

Docker 메트릭은 주로 Docker 엔진의 성능을 모니터링합니다. 예를 들어, Docker가 사용하는 CPU 자원, 실패한 이미지 빌드 수, 컨테이너 작업 처리 시간 등의 정보를 제공합니다. 반면 cAdvisor는 각 컨테이너의 CPU 및 메모리 사용량, 프로세스 수, 컨테이너의 가동 시간 등의 세부적인 정보를 제공합니다.

따라서, Docker 엔진에 대한 전반적인 정보를 원할 때는 Docker 메트릭을 사용하고, 각 컨테이너의 세부적인 정보를 원할 때는 cAdvisor를 사용하는 것이 좋습니다.

마치며

컨테이너화된 환경에서도 안정적인 모니터링을 위해 Prometheus와 cAdvisor를 활용하면 효율적으로 시스템 상태를 파악할 수 있습니다. 이를 통해 시스템의 성능 최적화 및 문제 해결을 보다 효과적으로 할 수 있습니다.

0개의 댓글