프로메테우스 란
- 컨테이너 플랫폼과 연동해 실행 중인 애플리케이션을 들여다볼 수 있는 도구를 갖춘 모니터링 기능 제공
- 모든 애플리케이션에서 똑같이 구성된 측정값을 내놓기 때문에 컨테이너의 OS, 애플리케이션 종류와 관계없이 표준적인 형태로 모니터링할 수 있다.
- 측정값을 추출하기 위한 쿼리 언어도 한 가지만 익히면 되며, 전체 애플리케이션 스택에 똑같은 모니터링을 적용할 수 있다.
도커엔진 측정값 추출
- 프로메테우스는 도커 엔진의 측정값을 같은 형식으로 추출하여 컨테이너 플랫폼에서 벌어지는 일을 파악할 수 있다.
- 이 기능을 사용 하려면 도커 엔진 설정에서 프로메테우스 측정 기능을 명시적으로 활성화해야 한다
- 도커의 설정 파일을 열고 다음 두 값을 추가하면 포트 9323번을 통해 측정값이 공개된다.
"metrics-addr": "0.0.0.0:9323",
"experimental": true
예시
001) # HELP builder_builds_failed_total Number of failed image builds
002) # TYPE builder_builds_failed_total counter
003) builder_builds_failed_total{reason="build_canceled"} 0
004) builder_builds_failed_total{reason="build_target_not_reachable_error"} 0
005) builder_builds_failed_total{reason="command_not_supported_error"} 0
006) builder_builds_failed_total{reason="dockerfile_empty_error"} 0
007) builder_builds_failed_total{reason="dockerfile_syntax_error"} 0
008) builder_builds_failed_total{reason="error_processing_commands_error"} 0
009) builder_builds_failed_total{reason="missing_onbuild_arguments_error"} 0
010) builder_builds_failed_total{reason="unknown_instruction_error"} 0
011) # HELP builder_builds_triggered_total Number of triggered image builds
012) # TYPE builder_builds_triggered_total counter
013) builder_builds_triggered_total 0
014) # HELP engine_daemon_container_actions_seconds The number of seconds it takes to process each container action
015) # TYPE engine_daemon_container_actions_seconds histogram
016) engine_daemon_container_actions_seconds_bucket{action="changes",le="0.005"} 1
017) engine_daemon_container_actions_seconds_bucket{action="changes",le="0.01"} 1
018) engine_daemon_container_actions_seconds_bucket{action="changes",le="0.025"} 1
019) engine_daemon_container_actions_seconds_bucket{action="changes",le="0.05"} 1
020) engine_daemon_container_actions_seconds_bucket{action="changes",le="0.1"} 1
021) engine_daemon_container_actions_seconds_bucket{action="changes",le="0.25"} 1
022) engine_daemon_container_actions_seconds_bucket{action="changes",le="0.5"} 1
023) engine_daemon_container_actions_seconds_bucket{action="changes",le="1"} 1
024) engine_daemon_container_actions_seconds_bucket{action="changes",le="2.5"} 1
025) engine_daemon_container_actions_seconds_bucket{action="changes",le="5"} 1
026) engine_daemon_container_actions_seconds_bucket{action="changes",le="10"} 1
027) engine_daemon_container_actions_seconds_bucket{action="changes",le="+Inf"} 1
- 프로메테우스 포맷으로 출력
- 이름과 값의 쌍 형태로 표현되는 간단한 텍스트 기반 포맷이다.
- 앞에는 해당 정보가 어떤 정보인지 값의 데이터 타입은 무엇인지에 대해 간단한 안내 설명이 붙고, 이는 별도의 엔드포인트를 통해 실시간으로 값을 조회할 수 있다.
- 프로메테우스는 이 값을 수집하면서 타임스탬프 값을 덧붙여 저장하므로 저장된 값을 정리해 시간에 따른 값의 변화를 추적할 수 있다.
프로메테우스 컨테이너 사용
애플리케이션 역할
- 주기적으로 도커 호스트에서 측정값을 수집한 다음, 타임스탬프를 덧붙여 데이터베이스에 저장
- 수집된 데이터를 열람할 수 있는 간단한 웹 인터페이스 제공,
/metrics
엔드포인트로 제공되는 정보를 확인할 수 있다. - 원하는 정보만 필터링 하거나 표 혹은 그래프 형식으로 요약해 보는 것도 가능
컨테이너 실행
- 프로메테우스를 컨테이너에서 실행해 현재 도커를 실행 중인 컴퓨터의 정보를 수집
- 이를 위해서는 먼저 현재 로컬 컴퓨터의 IP 주소를 확인해야 한다.
- 컨테이너는 자신을 실행 중인 서버의 IP 주소를 알 수 없으므로 컨테이너에 환경 변수 형태로 직접 전달해야 한다.
# 로컬 컴퓨터의 IP 주소를 확인해 환경 변수로 정의하기(macos)
hostIP=$(ifconfig en0 | grep -e 'inet\s' | awk '{print $2}')
# 환경 변수로 로컬 컴퓨터의 IP 주소를 전달해 컨테이너를 실행
docker container run -e DOCKER_HOST=$hostIP -d -p 9090:9090 diamol/prometheus:2.13.1
웹 인터페이스
- 어떤 정보가 수집됐는지 일목요연하게 조회할 수 있으며 간단한 쿼리를 사용할 수도 있다.
- 이들 정보는 각 상태별 컨테이너 수나 실패한 헬스 체크 횟수 같은 고수준 정보부터, 도커 엔진이 점유 중인 메모리 용량 같은 저수준 정보까지 다양하다.
- 호스트 컴퓨터에 설치된 CPU 수와 같은 인프라스트럭처의 정적인 정보도 여기에 포함된다.
예시
* http://localhost:9090
에 접근해 프로메테우스의 웹 인터페이스를 사용
* Status > Targets 항목에서 원하는 대상의 측정값을 볼 수 있다.
* engine_daemon_container_actions_seconds_sum 이라는 항목은 컨테이너의 각 활동에 걸린 시간을 의미
* 이 화면에서 컨테이너를 시작, 생성, 삭제하는 데 걸린 시간이 각각 얼마나 되는지 알 수 있다.