본문 바로가기
Engineering

Prometheus란? helm을 이용해 EKS에 설치

by weq155 2024. 4. 2.
반응형
반응형

개요 및 설치

Promethus란?
Prometheus는 SoundCloud에서 구축된 오픈 소스 시스템 모니터링과 Alert 툴킷으로 2012년에 만들어졌다.
2016년 CNCF에 Kubernetes 이후에 두번째로 등록된 프로젝트이다.

Prometheus는 Metric을 수집하고 시계열 데이터로 저장한다.
Metric 정보는 labels라고 하는 key-value 쌍과 Timestamp가 함께 저장된다.

Prometheus 동작원리

3단계로 Prometheus의 동작을 간단하게 표현하면

  1. Data collection and retrieval : Prometheus는 pull-based model이며 측정 대상(application, service or Infra resource)에서 주기적으로 데이터를 스크랩. 수집 대상은 Metric과 엔드포인트를 노출하여 Prometheus가 정보를 pull 할 수 있게 함
  2. Data storage : 수집된 Metric은 시계열 DB에 저장되며 시간의 흐름에 따른 시스템의 변화를 제공
  3. Service discovery : Prometheus는 검색 메커니즘을 활용하여 수동 개입없이 새로운 인스턴스를 자동으로 감지 및 모니터링 되게 함

pull & push model

Prometheus는 pull-based model로 HTTP 엔드포인트에서 metric data를 스크랩해서 DB로 Pull한다.

push 모델은 instrumentation을 사용해 시스템에 Agent를 설치하여 원격 측정을 통해 DB로 push 하는 방식

OTEL은 pull, push model을 모두 지원한다.

그래서 pull model은 http 엔드포인트가 없는 경우에는 exporter를 사용해야한다. exporter는 서비스와 Prometheus 서버 사이의 중개자 역할을 하며 서비스에서 데이터를 수집해 스크래핑을 위해 사용할 수 있게 하는 역할

대부분의 Kubernetes 오픈소스는 Prometheus 엔드포인트를 지원한다. ex) ArgoCD, CoreDNS, Istio 등

Components

Prometheus 생태계는 여러 optional한 components를 포함한다.

Architecture

Prometheus의 아키텍처와 일부 에코시스템 구성 요소 :

Prometheus는 계측된 작업에서 직접 또는 short-lived job의 경우 중개 push gateway를 통해 메트릭을 스크랩합니다.
스크랩된 모든 샘플을 로컬에 저장하고 이 데이터에 대해 규칙을 실행하여 기존 데이터에서 새로운 시계열을 집계 및 기록하거나 경고를 생성합니다.
수집된 데이터를 시각화하기 위해 Grafana 또는 다른 API 소비자를 사용할 수 있습니다.


Grafana 설치

Test를 위해 Metric 시각화를 위해 Grafana 설치 (최소 Spec)

resources:  
  limits:  
    cpu: 100m  
    memory: 128Mi  
  requests:  
    cpu: 100m  
    memory: 128Mi  
replica: 1  
ingress:  
  enabled: false  

service:  
  enabled: true  
  type: LoadBalancer  
  port: 80  
  targetPort: 3000  
  annotations:  
    service.beta.kubernetes.io/aws-load-balancer-attributes: load_balancing.cross_zone.enabled=true  
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"  
    service.beta.kubernetes.io/aws-load-balancer-name: metric-grafana  
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: instance  
    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing  
    service.beta.kubernetes.io/aws-load-balancer-subnets: "subnet-"  
    service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: stickiness.enabled=false  
    service.beta.kubernetes.io/load-balancer-source-ranges: 0.0.0.0/0  
    external-dns.alpha.kubernetes.io/hostname: "metric_grafana.co.kr"  

persistence:  
  type: pvc  
  enabled: true  
  storageClassName: gp2  
  accessModes:  
    - ReadWriteOnce  
  size: 10Gi  
  # annotations: {}  
  finalizers:  
    - kubernetes.io/pvc-protection  

adminUser: admin  
adminPassword: kuberix

Prometheus helm Chart pull

설치를 진행할 prometheus-community/prometheus chart는 4개의 하위 Chart로 구성

# repo 추가
helm repo add prometheus-community <https://prometheus-community.github.io/helm-charts>
helm repo update

# Configuration 설정을 위해 chart pull
helm pull prometheus-community/prometheus --untar

 

prometheus_values.yaml

resources는 helm 권장 사양으로 진행
metric 기능을 중심으로 test하기 위해
alertmanager와 pushgateway는 flase

server:  
  global:  
    ## How frequently to scrape targets by default  
    scrape_interval: 10s  
    ## How long until a scrape request times out  
    scrape_timeout: 5s  
    ## How frequently to evaluate rules  
    evaluation_interval: 1m  
  resources:  
     limits:  
       cpu: 500m  
       memory: 512Mi  
     requests:  
       cpu: 500m  
     memory: 512Mi  
  
  persistentVolume:  
    ## If true, Prometheus server will create/use a Persistent Volume Claim  
    ## If false, use emptyDir    enabled: true  
  
    ## Ref: <http://kubernetes.io/docs/user-guide/persistent-volumes/>  
    accessModes:  
      - ReadWriteOnce  
    size: 8Gi  
  
  ## Prometheus data retention period (default if not specified is 15 days)  
  retention: "10d"  
  
alertmanager:  
  enabled: false  
  
kube-state-metrics:  
  enabled: true  
  
prometheus-node-exporter:  
  enabled: true  
  
prometheus-pushgateway:  
  enabled: false

chart install

helm upgrade -i prometheus -n prometheus . -f ./prometheus_values.yaml --create-namespace 

grafana data sources 등록

DNS : prometheus-server.prometheus.svc.cluster.local

 

 

출처 : https://prometheus.io/docs/
https://newrelic.com/blog/best-practices/what-is-prometheus#:~:text=Prometheus%20is%20an%20open%20source,Foundation%20(CNCF)%20in%202016.

반응형