새소식

AWS/EKS

[PKOS Study 4주차] k8s Monitoring - Prometheus

  • -

CloudNet@ 팀의 가시다님께서 Leading 하시는 PKOS 2기 Study 내용 요약

해당 Kubernetes Study 는 '24단계 실습으로 정복하는 쿠버네티스' 책을 기반으로 진행 중입니다.

 

 

이번 포스팅에서는 Kubernetes 모니터링 도구 중 자주 사용되는 오픈소스 중 하나인 Prometheus 에 대해 알아보겠습니다.



1. Prometheus

SoundCloud 에서 만든 오픈소스 시스템 모니터링 및 알람 도구

1.1. 특징

  1. Service Discovery

개별 모니터링 대상서비스 엔드포인트로 등록해서 자동으로 변경 내역 감지

 

  1. Pull 방식

개별 모니터링 대상에 대해 에이전트를 설치하고, 중앙의 프로메테우스 서버가 해당 대상의 정보를 직접 가져오는 방식 사용

 

  1. 다양한 Application Exporter 제공

애플리케이션을 추가할 때 기존에 사용 중인 익스포터를 가져와 사용 가능

 

  1. 다양한 레이블 지원

메트릭에 다양한 레이블을 추가해서 사용자가 원하는 메트릭만 편하게 필터링 가능

 

  1. PromQL 제공

 

  1. 시계열 데이터베이스 사용



1.2. Prometheus Install

Prometheus Stack 을 사용하여 설치합니다.

 

Prometheus Community Kubernetes Helm Charts

Prometheus community Helm charts

prometheus-community.github.io

 

  • Prometheus Stack 포함 요소
  1. Prometheus
  2. Alert Manager
  3. Grafana

 

 

kubectl create ns monitoring

 

Helm Repo Add

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

 

Prometheus Stack 관련 설정 변경

cat <<EOT > ~/monitor-values.yaml
alertmanager:
  ingress:
    enabled: true
    ingressClassName: alb

    annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/target-type: ip
      alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
      alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
      alb.ingress.kubernetes.io/success-codes: 200-399
      alb.ingress.kubernetes.io/group.name: "monitoring"

    hosts:
      - alertmanager.$KOPS_CLUSTER_NAME

    paths:
      - /*

grafana:
  defaultDashboardsTimezone: Asia/Seoul
  adminPassword: prom-operator

  ingress:
    enabled: true
    ingressClassName: alb

    annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/target-type: ip
      alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
      alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
      alb.ingress.kubernetes.io/success-codes: 200-399
      alb.ingress.kubernetes.io/group.name: "monitoring"

    hosts:
      - grafana.$KOPS_CLUSTER_NAME

    paths:
      - /*

prometheus:
  ingress:
    enabled: true
    ingressClassName: alb

    annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/target-type: ip
      alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
      alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
      alb.ingress.kubernetes.io/success-codes: 200-399
      alb.ingress.kubernetes.io/group.name: "monitoring"

    hosts:
      - prometheus.$KOPS_CLUSTER_NAME

    paths:
      - /*

  prometheusSpec:
    podMonitorSelectorNilUsesHelmValues: false
    serviceMonitorSelectorNilUsesHelmValues: false
    retention: 5d
    retentionSize: "10GiB"
EOT

 

 

Prometheus 배포 및 기타 설정

helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack --version 45.7.1 \
--set prometheus.prometheusSpec.scrapeInterval='15s' --set prometheus.prometheusSpec.evaluationInterval='15s' \
-f monitor-values.yaml --namespace monitoring

 

 



2. Prometheus 사용법

Prometheus 는 모니터링 대상의 자체 엔드포인트 경로에 메트릭 정보를 노출시켜 정보를 수집합니다.

Node IP 와 Node Exporter 의 엔드포인트 경로 확인

kubectl get node -o wide

kubectl get svc,ep -n monitoring kube-prometheus-stack-prometheus-node-exporter

 

  • Node-Exporter

물리 노드에 대한 자원 사용량(네트워크, 스토리지 등 전체) 정보를 메트릭 형태로 변경하여 노출
기본적으로 9100 포트의 /metrics 경로 사용

 

 

2.1. Prometheus UI 파악

프로메테우스는 자체적으로 UI 를 제공해줍니다.
아래 명령어를 통해 프로메테우스 웹으로 접속해봅니다.

kubectl get ingress -n monitoring

 

 

Status - Runtime & Build Infomation

 

Status - Command-Line Flags

  • 프로메테우스 서버 실행시 부여할 수 있는 옵션 값

 

Status - Configuration

  • 프로메테우스 현재 구성 및 설정 값

 

Status - Targets

  • 프로메테우스 Exporter 가 구성된 모니터링 대상 항목

Contents

포스팅 주소를 복사했습니다