안녕하세요
이번 시간에는 클라우드 및 컨테이너, 온프레미스 환경에서 대규모 분산 시스템의 상태 및 성능을 모니터링하기 위한 오픈소스 시스템인 Prometheus에 대해 알아보고 Ubuntu 22.04 LTS에 설치하는 실습을 진행하겠습니다.
1. Prometheus 란?
Prometheus는 클라우드 및 온프레미스 환경에서 대규모 분산 시스템의 상태 및 성능을 모니터링하기 위한 오픈소스 시스템입니다. Prometheus는 다양한 데이터 모델을 사용하여 지표 데이터를 수집하고 저장하며, 강력한 쿼리 언어를 사용하여 저장된 데이터를 분석하고 대시보드를 생성할 수 있습니다.
2. Prometheus의 구성
Prometheus 시스템은 크게 수집, 저장, 쿼리 및 알람 관리 컴포넌트로 구성됩니다.
1. 수집(Exporters, Collectors)
(1) Prometheus는 Exporters 또는 Collectors라고 하는 에이전트를 사용하여 데이터를 수집합니다.
(2) Exporters는 다양한 시스템 및 애플리케이션에서 메트릭을 수집하는 데 사용됩니다.
(3) Collectors는 Exporters에서 메트릭을 가져와서 메트릭 데이터를 수집하고 Prometheus가 이를 수집할 수 있는 형태로 변환합니다.
(4) Exporters 및 Collectors는 HTTP 엔드포인트, 쿠버네티스 API, 노드 익스포터 등 다양한 방법으로 데이터를 수집할 수 있습니다.
2. 수집된 데이터 가져오기(Retrieval)
(1) Retrieval은 Prometheus가 수집 대상 시스템에서 데이터를 가져오는 과정을 말합니다.
(2) Prometheus Server는 수집 대상 시스템에서 주기적으로 메트릭 데이터를 가져와서 수집합니다.
(3) Prometheus는 HTTP 또는 HTTPS 프로토콜을 사용하여 수집 대상 시스템에서 메트릭 데이터를 가져옵니다.
3. 저장(TSDB: Time-Series DataBase)
(1) 수집된 메트릭은 Promethues 내부의 시계열 데이터베이스(TSDB)에 저장됩니다.
(2) 시계열 데이터베이스는 메모리에 캐시하고 디스크에 지속적으로 기록합니다.
(3) 이를 통해 메트릭에 대한 빠른 액세스와 데이터 무결성을 보장합니다.
4. 쿼리(PromQL)
(1) PromQL이라는 강력한 쿼리 언어를 사용하여 시계열 데이터를 쿼리하고 분석합니다.
(2) 쿼리 엔진은 빠르고 효율적인 쿼리 실행을 위해 데이터를 인덱싱하고 미리 집계합니다.
5. 알람 관리(AlertManager)
(1) Prometheus는 Alertmanager를 사용하여 쿼리 결과에 따라 알람을 생성하고 관리합니다.
(2) 알람은 Email, Slack, PagerDuty 등의 다양한 수단으로 전송할 수 있습니다.
6. 서비스 디스커버리(Service Discovery)
Service discovery는 분산 시스템에서 자동으로 서비스 인스턴스를 검색하고, 새로운 서비스 인스턴스가 추가되거나 삭제되는 경우에도 실시간으로 업데이트되는 기술입니다. 서비스 인스턴스가 추가 또는 제거될 때 수동으로 업데이트할 필요 없이, 자동으로 새로운 인스턴스를 찾아서 모니터링하거나 관리하는 것이 가능합니다.
(1) Prometheus에서도 Service discovery를 지원
Service discovery를 통해 새로운 시스템 또는 인스턴스를 쉽게 추가하고, Prometheus에서 이를 수집하여 모니터링할 수 있습니다. Prometheus에서는 여러 종류의 Service discovery 기술을 지원하며, 예를 들어 Kubernetes Service discovery, DNS discovery, EC2 discovery, Consul discovery 등을 사용할 수 있습니다.
(2) Service discovery를 장점
수동으로 모든 시스템 또는 인스턴스를 추가할 필요 없이, 자동으로 시스템을 탐지하여 Prometheus에 추가할 수 있으므로, 모니터링 시스템의 관리 및 운영을 보다 효율적으로 할 수 있습니다.
7. 수집 및 메트릭 손실 방지(Pushgateway)
Pushgateway는 Prometheus의 Exporter와 달리, Push 방식으로 Metrics 데이터를 수집합니다. 즉, Exporter와 달리 Pushgateway는 데이터를 Prometheus 서버로 보내는 것이 아니라, Metrics 데이터를 Pushgateway 서버로 보내는 것입니다.
Pushgateway는 일반적으로 다음과 같은 상황에서 사용됩니다.
(1) 임시 작업 결과 메트릭 수집
작업이 완료되면 결과 메트릭을 생성하고 Pushgateway에 전송하여 Prometheus가 이를 수집할 수 있도록 합니다.
(2) 중앙 집중식 작업 결과 메트릭 수집
여러 대의 서버에서 작업을 실행하고, 작업 결과 메트릭을 Pushgateway에 집계하여 Prometheus가 수집할 수 있도록 합니다.
(3) 서비스 재시작 후 메트릭 손실 방지
Prometheus 서버와 Exporter 간의 커넥션에서 메트릭 데이터 손실이 발생할 수 있습니다. 이러한 상황에서 Pushgateway는 메트릭 데이터 손실을 방지합니다.
Pushgateway는 Prometheus에서 자동으로 수집할 수 없는 경우를 제외하고는 피해야 합니다. Pushgateway는 서비스 형태가 아니기 때문에, 데이터 무결성과 지속성을 보장하지 않습니다. 따라서, Pushgateway를 사용하여 메트릭을 수집하는 것은 일시적인 해결책입니다.
3. Push 방식과 Pull 방식의 차이
Push 방식과 Pulling 방식은 모니터링 시스템에서 데이터를 수집하는 방법입니다.
1. Pull
(1) Pull 방식은 Prometheus와 같은 대부분의 모니터링 시스템에서 사용하는 방법으로, 수집 대상 시스템에서 메트릭 데이터를 추출합니다.
(2) Prometheus 서버가 주기적으로 해당 시스템에 메트릭을 요청 즉, Prometheus 서버가 메트릭을 가져오는 것입니다.
(3) Pull 방식의 장점은 수집 대상 시스템에서 수집되는 메트릭 데이터의 시기를 정확하게 알 수 있고, 메트릭 수집이 실패한 경우에도 Prometheus 서버에서 실패 이유를 파악할 수 있다는 점입니다.
2. Push
(1) Push 방식은 수집 대상 시스템에서 메트릭 데이터를 추출한 후, Pushgateway와 같은 중간 서버에 전송하는 방법입니다. 즉, 메트릭 데이터를 보내는 것입니다.
(2) Push 방식의 장점은 수집 대상 시스템에서 Prometheus 서버로 메트릭 데이터를 직접 전송할 수 있기 때문에, 수집 대상 시스템에서 Prometheus 서버로의 메트릭 데이터 전송에 대한 부하를 줄일 수 있다는 점입니다.
(3) 위에서 말한 것처럼 Pushgateway를 사용하면 일시적인 메트릭 데이터 손실을 방지할 수 있다는 점도 있습니다.
따라서, Pull 방식은 메트릭 데이터를 수집하는 시스템에서 일반적으로 사용되고, Push 방식은 일부 예외적인 경우에 사용됩니다.
4. Prometheus의 장점 (사용하는 이유)
1. 유연하고 확장 가능한 아키텍처
모듈식 아키텍처를 사용하며, 수집, 저장 및 쿼리 컴포넌트로 구성됩니다. 이러한 구성 요소는 확장 가능하며, 수집되는 데이터의 양이 증가함에 따라 Prometheus 시스템을 확장할 수 있습니다.
2. 강력한 쿼리 언어
PromQL이라는 쿼리 언어를 제공합니다. PromQL을 사용하면 지표 데이터를 매우 효율적으로 쿼리하고 분석할 수 있습니다. 또한 PromQL은 매우 직관적이며 사용하기 쉬운 언어입니다.
3. 다양한 모니터링 시나리오에 적합
다양한 모니터링 시나리오에 적합합니다. 서버 모니터링, 컨테이너 모니터링 및 분산 시스템 모니터링 등 다양한 환경에서 사용할 수 있습니다.
4. 오픈소스 소프트웨어
오픈소스 소프트웨어로 제공됩니다. 따라서 무료로 사용할 수 있으며, 사용자가 소스 코드를 수정하여 자신의 요구에 맞게 사용할 수 있습니다.
5. 다양한 플러그인 및 통합 지원
다양한 플러그인 및 통합을 지원합니다. 예를 들어, Grafana, Alertmanager, AWS CloudWatch Exporter 등의 다양한 툴과 연계하여 사용할 수 있습니다.
6. 높은 신뢰성
높은 신뢰성을 보장합니다. 수집, 저장 및 쿼리 컴포넌트가 모두 분산되어 있으며, 복제 및 장애 복구 기능을 지원하여 데이터의 무결성과 가용성을 보장합니다.
5. Ubuntu 22.04 LTS에 Prometheus 설치하기
GPG apt-key를 이용한 설치 방법 에러
GPG apt-key 방법을 이용한 설치는 trusted.gpg 방식이 옛날 방식이어서 Warning이 발생합니다.
>> 1번 방법: 다음 단계를 따라서 설치를 진행해주세요. (간단하게 설치하기)
1. 패키지 업데이트하기
sudo apt update
2. Prometheus 설치하기
sudo apt install prometheus
이 방법은 프로메테우스를 간단하게 설치할 수 있지만 최신 버전이 아닐 수 있습니다.
>> 2번 방법: 다음 단계를 따라서 설치를 진행해주세요. (공식 홈페이지에서 최신 버전 다운 받아 설치하기)
1. 패키지 업데이트하기
sudo apt update
2. Prometheus 다운로드하기
https://prometheus.io/download/
wget https://github.com/prometheus/prometheus/releases/download/v2.43.0/prometheus-2.43.0.linux-amd64.tar.gz
3. Prometheus 압축 풀기 및 서비스 상태 확인
tar xvf prometheus*.tar.gz
sudo systemctl start prometheus
sudo systemctl status prometheus
이 방법으로 설치하면 프로메테우스 최신 버전을 설치할 수 있습니다.
>> 3번 방법: 다음 단계를 따라서 설치를 진행해주세요. (프로메테우스 공식 홈페이지 설치 가이드: 권장)
1. 패키지 업데이트하기
sudo apt update
2. Prometheus 시스템 그룹 생성하기
sudo groupadd --system prometheus
3. Prometheus 사용자를 추가하고 생성된 그룹을 할당
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
4. 디렉토리 만들기
sudo mkdir /etc/prometheus
5. Prometheus 다운로드하기
https://prometheus.io/download/
wget https://github.com/prometheus/prometheus/releases/download/v2.43.0/prometheus-2.43.0.linux-amd64.tar.gz
프로메테우스 공식 홈페이지에서 다운로드 받아서 옮기셔도 무방하나 현재 기준으로 최신 버전을 wget을 통해 받겠습니다.
6. 압축 파일 풀기
tar xvf prometheus*.tar.gz
7. 압축 푼 디렉토리로 이동하기
cd prometheus*/
sudo mv prometheus promtool /usr/local/bin/
# 바이너리 파일을 로컬 폴더로 이동하여 디렉토리 변경
prometheus --version
# 프로메테우스 버전 확인
8. Prometheus 구성 파일 옮기기
sudo mv prometheus.yml /etc/prometheus/prometheus.yml
# 프로메테우스 구성 파일 로컬로 이동
sudo mv consoles/ console_libraries/ /etc/prometheus/
# 콘솔과 콘솔 라이브러리를 /etc/prometheus로 이동
cd $HOME
# 홈 디렉토리로 이동
9. Prometheus 구성 파일 수정하기(설치 과정에선 수정하지 않습니다)
sudo vi /etc/prometheus/prometheus.yml
10. Prometheus 시스템 서비스 만들기
sudo vi /etc/systemd/system/prometheus.service
[vi 입력 모드 전환]
a
# 복사 붙여넣기
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.listen-address=0.0.0.0:9090 \
[Install]
WantedBy=multi-user.target
:wq
# 저장하고 나가기
11. 디렉토리의 소유권을 Prometheus 사용자 및 그룹으로 변경하기
sudo chown -R prometheus:prometheus /var/lib/prometheus/
디렉토리의 소유권을 Prometheus 사용자 및 그룹으로 변경하지 않으면 프로메테우스 서비스가 구동될 때 디렉토리에 있는 파일을 읽어오지 못해 Status 상태를 failed로 반환합니다.
12. Prometheus를 다시 로드하고 활성화하고 방화벽 허용하기
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable --now prometheus
# 재부팅 후 자동으로 실행
sudo ufw allow 9090/tcp
# 9090 포트 방화벽 허용하기
13. Prometheus 상태 확인 및 GUI 웹 접속하기(프로메테우스 기본 포트: 9090)
프로메테우스 GUI 웹에 접속한 모습입니다. 로컬 환경이라면 localhost:9090, 저처럼 VM 환경이라면 <IP>:9090, 클라우드 환경이라면 Public DNS:9090으로 접속하면 정상적으로 프로메테우스에 접속하실 수 있습니다. 어떤 방법으로도 프로메테우스를 설치할 수 있지만 이 방법을 사용하면 프로메테우스 최신 버전을 설치하면서 구성도 자유롭게 바꿀 수 있습니다.
우분투에 프로메테우스 공식 홈페이지에서 권장하는 설치하는 과정을 한국어로 설치하는 가이드가 부족한 것 같아 이렇게 포스팅으로 기록해 둡니다.
GPG 방법으로 apt-key를 이용해서 설치하는 방법도 있었지만 오류가 발생하여 이 방법으로 설치해 주세요.
혹시 실습을 진행하다가 안 되는 부분이 있다면 댓글로 남겨주세요.
감사합니다.
'OSS' 카테고리의 다른 글
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!