서버와 서비스의 상태를 숫자로 기록하고, 이상 징후가 보이면 즉시 알려주는 시스템
서버가 과부하에 걸리거나 서비스가 멈추기 전에 알람을 받아 대응할 수 있습니다. Prometheus는 정해진 간격으로 목표 대상에서 지표를 수집하고, 설정한 규칙에 따라 결과를 계산해 화면에 표시하거나 경고를 발동하는 도구입니다. 클라우드 네이티브 컴퓨팅 재단(CNCF) 프로젝트로, 단일 서버가 독립적으로 작동하도록 설계되어 분산 저장소에 의존하지 않습니다.
데이터 구조와 수집 방식
Prometheus는 지표 이름과 키/값 쌍으로 구성된 차원으로 시계열 데이터를 정의하는 다차원 데이터 모델을 사용합니다. 이 구조를 활용하기 위해 PromQL이라는 쿼리 언어를 제공하며, 복잡한 조건을 조합해 데이터를 조회할 수 있습니다. HTTP pull 모델을 통해 시간 간격을 두고 지표를 수집하며, 배치 작업처럼 push가 필요한 경우를 위해 중간 게이트웨이를 통해 push를 지원합니다. 서비스 디스커버리나 정적 구성을 통해 수집 대상을 자동으로 찾거나 직접 지정할 수 있습니다.
설치와 빌드 방법
가장 권장되는 설치 방법은 prometheus.io의 다운로드 섹션에서 최신 프로덕션 릴리스 바이너리를 사용하는 것입니다. Docker 이미지를 사용하려면 docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus 명령을 실행하면 로컬에서 접근할 수 있습니다. 소스에서 빌드하려면 Go, NodeJS, npm이 필요하며, make build 명령을 실행하면 웹 에셋이 컴파일된 바이너리를 생성합니다. 빌드 태그를 사용해 특정 서비스 디스커버리 플러그인을 포함하거나 제외할 수 있습니다.
라이브러리 사용 시 주의할 점
Prometheus 저장소는 독립 실행형 프로그램으로 설계되어 있으며, Go 라이브러리로 사용하기 위한 최적화는 이루어지지 않았습니다. 일부 코드를 라이브러리로 사용하는 경우 의도하지 않은 오류가 발생할 수 있으므로 주의가 필요합니다. Remote Write 프로토콜은 buf.build에서 독립적으로 공개되며, 실험적 단계입니다. Go 모듈 버전은 Prometheus 릴리스 번호와 정확히 일치하지 않으며, v3.y.z 릴리스는 v0.3y.z 태그로, v2.y.z 릴리스는 v0.y.z 태그로 공개됩니다.
적합한 환경과 확인 사항
시스템 및 서비스 모니터링이 필요하고, 단일 노드에서 자율적으로 데이터를 관리하기를 원하는 환경에 적합합니다. 분산 저장소 인프라를 구축하기 부담스러운 경우나, HTTP pull 기반 수집 모델을 선호하는 경우 유용합니다. Apache License 2.0 라이선스를 따르며, 소스에서 빌드할 경우 Go와 NodeJS의 특정 버전 요구 사항을 충족해야 합니다.