[Prometheus] prometheus 시작하기 (설치, 구성, 실행)

괭이밥·2024년 3월 31일
2

Monitoring

목록 보기
1/3
post-thumbnail

개요

이 글은 전체적인 Prometheus 기초 튜토리얼로, 공식 홈페이지를 참고하였다.
Prometheus를 사용하여 모니터링 시스템을 구축하면다면 일반적으로, Grafana(시각툴)과 Alertmanager(알람툴)을 같이 배포하여 사용한다.

이 글에서는 Prometheus 배포와 사용법을 중심적으로 볼 것이며, Grafana와 Alertmanager 사용법은 따로 포스팅 하겠다.


목차는 다음과 같다.
0. Prometheus란?
1. Promehtues 설치
2. Prometheus 설정 (prometheus.yml)
3. Prometheus 실행
4. 브라우저 사용하기


Prometheus란?


Prometheus는 오픈소스 모니터링 시스템으로, 지표를 시계열 데이터로 수집 & 저장한다.

Prometheus의 주요 특징

  • 시계열 데이터: 측정 항목 이름과 key-value로 정의
    • 시계열: 시간에 따라 저장된 데이터
  • PromQL: Prometheus에서 사용하는 쿼리 언어로, 데이터 활용 가능
  • pull 모델: HTTP을 통한 pull 모델로 데이터를 수집 (Prometheus 서버가 데이터를 직접 가져오는 방식)

Prometheus 아키텍처


프로메테우스는 job으로부터 metrics을 직접 긁어오거나 push gateway를 통해 가져와 로컬에 저장한다.
저장한 샘플 데이터를 통해 규칙을 실행하여 기존 시계열 기록에 기록하거나 알람을 생성한다.
또한 그라파나를 통해 수집된 데이터를 시각화할 수 있다.

  1. 수집
  • Job/Exporter
    • Exporter를 통해 메트릭 데이터 수집
      • exporter는 모니터링 대상에 설치된다.
    • 프로메테우스가 메트릭 정보를 가져갈 수 있도록 HTTP GET 방식의 API Endpoint를 제공한다.
    • 이 때 Response는 당시 정보를 리턴할 뿐 따로 데이터를 저장하지 않는다.
  • Service Discovery
    • Kubernetes, Cloud와 같은 동적인 환경에서 모니터링할 대상(Targets)을 자동으로 검색하는 기능
    • Kubernetes 환경이 아닌 일반 서버에서는 Config 파일에 수동으로 등록하여 타겟을 관리해야 하며, 따로 설정을 통해 활성화 할 수 있음
  • Retrieval
    • Prometheus가 모니터링 대상(Targets)에서 데이터를 가져오는 컴포넌트
    • 동작 방식
      1. Service Discovery를 통해 모니터링 대상(Target) 목록을 가져옴
      2. scrape_configs 설정에 따라 일정한 주기로 데이터를 수집
      3. Prometheus는 수집한 데이터를 시계열 DB에 저장
  1. 저장
  • TSDB(TimeSeriesDatebase)
    • 기본적으로 수집된 정보는 별도 DB가 아닌 프로메테우스 메모리와 로컬 디스크에 저장
    • 필요에따라 원격 서버에 데이터 저장하도록 설정 가능
  1. 조회
  • HTTP server
    • 프로메테우스에 저장된 데이터를 조회하기 위해 HTTP Rest API 제공
    • API 사용하여 조회할 수 있고, Prometheus Web UI에서 확인 가능
  • Grafana
    • TSDB에 저장된 메트릭 데이터를 효과적으로 시각화 할 수 있는 대시보드
  1. 알림
  • Alertmanager
    • 설정한 룰에 맞게 다양한 채널을 통해 알림을 전송하는 모듈
    • Alert rules와 manager 두 파트로 나뉘며 Alert rules이 Alertmanager에게 alert 메세지를 전송하면 Alert manager는 사용자에게 알림을 보냄
    • 설정한 rule 기반으로 동작

📌 Promehtues 설치


최신 버전을 위해 아래 링크를 통해 공식 홈페이지를 참고한다.
https://prometheus.io/download/

설치할 서버의 OS 확인하여 LTS 버전의 링크를 우클릭하여 복사한다.

복사한 링크를 서버에 들어가 wget으로 다운로드한다.

wget https://github.com/prometheus/prometheus/releases/download/v2.45.4/prometheus-2.45.4.linux-amd64.tar.gz

성공적으로 다운로드 받았다면, 아래와 같이 .tar 설치 파일이 보일 것이다.

압축 해제 후, 폴더로 들어가준다.

tar xvfz prometheus-2.45.4.linux-amd64.tar.gz
cd prometheus-2.45.4.linux-amd64

다운로드 직후, 폴더 안에는 다음과 같이 구성되어 있을 것이다.

이제 프로메테우스를 실행하기 전, 구성 파일을 살펴보자.


📌 Prometheus 설정 (prometheus.yml)


프로메테우스는 타겟들의 HTTP 엔드포인트를 통해 메트릭 정보를 수집한다.
이 HTTP 엔드포인트를 설정하는 곳이 바로 prometheus 구성 파일인 promehteus.yml이다. (파일 이름은 다른 것으로 해도 상관 없지만, 내부 key-value는 프로메테우스 스펙에 맞추어야 한다.)

프로메테우스가 설치된 서버에도 자신의 엔드포인트를 가지므로, 자신의 정보를 수집할 수 있다.
이 포스팅에서는 localhost 즉, 자신의 서버의 정보를 가져와 볼 것이다.

다음은 프로메테우스의 구성파일인 prometheus.yml이다.
구성 파일은 자기 자신의 자원을 수집하도록 되어있다.

global:
  scrape_interval:     15s  # 디폴트값으로, 타겟의 데이터를 15초마다 수집한다.

  # 외부 시스템(외부 저장소, 알람매니저)과 통신할 때 시계열 데이터 또는 알람에 이 라벨이 붙는다.
  external_labels:
    monitor: 'codelab-monitor'

# 수집 정보 설정, 타겟의 엔드포인트를 설정한다.
# 여기서는 프로메테우스 본인 서버의 정보를 수집한다.
scrape_configs:
  # job 이름은 시계열 데이터 수집 시 `job=<job_name>`으로 라벨이 추가된다.
  - job_name: 'prometheus'

    # 맨 위의 global 설정 오버라이딩
    # 이 job은 5초마다 타겟으로부터 데이터를 수집한다.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9090']

configuration에 대한 전체 스펙은 공식 문서를 참고하면 된다.


📌 Prometheus 실행


구성 파일과 함께 프로메테우스 시작하기 위해 다음과 같이 입력한다.
(아래 명령어는 promehteus가 있는 파일 위치에서 입력하였다.)

./prometheus --config.file=prometheus.yml

기본적으로, 프로메테우스는 ./data 경로에 수집 데이터를 저장한다.
만약 경로를 수정하고 싶다면, 다음 --storage.tsdb.path 옵션을 사용하면 된다.

./prometheus --config.file=prometheus.yml --storage.tsdb.path=/mnt/data

프로메테우스가 시작하면, localhost:9090으로 프로메테우스 웹 페이지를 볼 수 있다. ![](https://velog.velcdn.com/images/suk13574/post/8dcbc5a0-eb6d-424f-a63b-0c7a5be141fc/image.png)

엔드포인트 확인

localhost:9090/targets 로 이동해보자. 브라우저에서 Status > Targets를 클릭해도 된다.

이 화면에서 현재 수집 중인 타겟의 엔드포인트를 확인할 수 있다.
아래는 로컬 호스트의 /metrics라는 엔드포인트로 자기 자신 서버의 정보를 수집하고 있는 것을 볼 수 있다.

직접 엔드포인트를 확인해보면 아래와 같이 많은 메트릭 정보를 볼 수 있다.
각 정보는 메트릭(key)에 대한 수집된 값(value)로 구성되어 있다.

curl localhost:9090/metrics

만약 여러 서버를 모니터링하기 위해 prometheus.yml 파일에 여러 엔드포인트를 설정하였다고 하자.
서버내 exporter들은 이렇게 key-value 형태로 되어있는 정보를 가지고 있다가, 프로메테우스가 직접 해당 서버의 엔드포인트에 http로 호출하여 정보를 가져오는 것이다.


📌 브라우저 사용하기


PromQL

localhost:9090/graph 에서 Table 탭으로 이동하여 빌트인된 표현식(=promQL)을 사용할 수 있다.

아래 표현식은 프로메테우스가 타겟의 데이터를 수집하는데 얼마나 시간이 걸렸는지 나타낸다.

prometheus_target_interval_length_seconds

브라우저에 입력하면 다음과 같이 각 최신의 데이터를 반환하며, 각 데이터는 라벨(e.g. instance="localhost:9090")을 가진 것을 볼 수 있다.

만약 99번째 백분위 지연 시간만 필터링하고 싶은 경우, 아래와 같이 중괄호로 조건을 추가할 수 있다.

prometheus_target_interval_length_seconds{quantile="0.99"}

또한 사용할 수 있는 promQL은 우측 지구모양 아이콘을 누르면 볼 수 있다.

promQL에 대한 자세한 설명은 공식 문서를 참고하면 된다.

그래프 인터페이스

http://localhost:9090/graph의 Graph라는 탭으로 이동하여 그래프를 볼 수 있다.

PromQL을 입력한 뒤, Execute를 하면 그래프로 표현되는 것을 볼 수 있다.
아래 표현식은 수집 시 몇 초가 걸리는지 나타내는 표현식이다.

scrape_duration_seconds

아래 사진과 같이 표현식의 결과 값이 그래프로 보이는 것을 알 수 있다.

이와같이 수집된 지표 데이터로 PromQL로 가공하여 시각화된 그래프를 볼 수 있다.


마무리하며

이번 글에서 프로메테우스를 설치하고, 구성하고, 실행을 해보았다.
이번에 설치한 프로메테우스는 지표를 수집하기 위한 에이전트이고, 서버의 cpu, memory, filesystem 사용량 등 모니터링하고자 하는 데이터를 수집하기 위해서 exporter를 설치해주어야한다.
다음 글에서는 어떤 exporter가 있는지 알아보겠다.


참고
https://prometheus.io/docs/prometheus/latest/getting_started/

profile
개발도 하고 싶은 클라우드 엔지니어

0개의 댓글