개요 및 설치
Promethus란?
Prometheus는 SoundCloud에서 구축된 오픈 소스 시스템 모니터링과 Alert 툴킷으로 2012년에 만들어졌다.
2016년 CNCF에 Kubernetes 이후에 두번째로 등록된 프로젝트이다.
Prometheus는 Metric을 수집하고 시계열 데이터로 저장한다.
Metric 정보는 labels라고 하는 key-value 쌍과 Timestamp가 함께 저장된다.
Prometheus 동작원리
3단계로 Prometheus의 동작을 간단하게 표현하면
- Data collection and retrieval : Prometheus는 pull-based model이며 측정 대상(application, service or Infra resource)에서 주기적으로 데이터를 스크랩. 수집 대상은 Metric과 엔드포인트를 노출하여 Prometheus가 정보를 pull 할 수 있게 함
- Data storage : 수집된 Metric은 시계열 DB에 저장되며 시간의 흐름에 따른 시스템의 변화를 제공
- 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를 포함한다.
- Prometheus server : 시계열 데이터를 수집, 저장
- client libraries : Application code를 측정
- push gateway : short-lived job을 지원
- exporters : HAProxy, StatsD, Graphite 등과 같은 서비스를 위한 특수 목적 내보내기를 지원
- alertmanager : Alert을 핸들링
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.
'Engineering' 카테고리의 다른 글
EKS Prometheus CPU & Memory DashBoard 구성 (0) | 2024.04.03 |
---|---|
DevOps Research and Assessment (DORA) Metrics (0) | 2024.04.02 |
Performance Test Metric 도구 간단 정리 (Promethus, Thanos, Cortex, Mimir, Victoria Metrics) (0) | 2024.04.01 |
Performance Test 환경구성 (0) | 2024.04.01 |
Grafana Mimir란? && 설치 테스트 (1) | 2024.03.08 |