CloudNet@ 팀의 가시다님께서 Leading 하시는 PKOS 2기 Study 내용 요약
해당 Kubernetes Study 는 '24단계 실습으로 정복하는 쿠버네티스' 책을 기반으로 진행 중입니다.
이번 포스팅에서는 Kubernetes 모니터링 도구 중 자주 사용되는 오픈소스 중 하나인 Prometheus 에 대해 알아보겠습니다.
1. Prometheus
SoundCloud 에서 만든 오픈소스 시스템 모니터링 및 알람 도구
1.1. 특징
- Service Discovery
개별 모니터링 대상을 서비스 엔드포인트로 등록해서 자동으로 변경 내역 감지
- Pull 방식
개별 모니터링 대상에 대해 에이전트를 설치하고, 중앙의 프로메테우스 서버가 해당 대상의 정보를 직접 가져오는 방식 사용
- 다양한 Application Exporter 제공
애플리케이션을 추가할 때 기존에 사용 중인 익스포터를 가져와 사용 가능
- 다양한 레이블 지원
메트릭에 다양한 레이블을 추가해서 사용자가 원하는 메트릭만 편하게 필터링 가능
- PromQL 제공
- 시계열 데이터베이스 사용
1.2. Prometheus Install
Prometheus Stack 을 사용하여 설치합니다.
- Prometheus
- Alert Manager
- 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
물리 노드에 대한 자원 사용량(네트워크, 스토리지 등 전체) 정보를 메트릭 형태로 변경하여 노출
기본적으로 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 가 구성된 모니터링 대상 항목