카이도스의 Tech Blog
PKOS 5주차 - 프로메테우스 그라파나 본문
쿠버네티스 공부는 ‘24단계 실습으로 정복하는 쿠버네티스 책을 기준으로 진행.
프로메테우스(Prometheus)
프로메테우스는 웹 서버, 데이터베이스 등 다양한 시스템을 모니터링하고, 특정 조건이 발생하면 담당자에게 경고(Alert) 할 수 있는 모니터링 오픈 소스이다. 2012년 발표 이후로, 많은 기업과 기관에서 사용하고 있으며, 2016년 클라우드 네이티브 컴퓨팅 재단에도 가입하였다. 상세한 정보는 https://prometheus.io 에서 볼 수 있다.
프로메테우스 아키텍처
아래 다이어그램은 프로메테우스와 주변 시스템 간의 아키텍처를 보여준다.
프로메테우스는 설정된 작업(job)에 대로 매트릭(metrics) 정보를 모니터링 대상 시스템에 설치된 익스포터(Exporter) 혹은 푸시 게이트웨이(Push Gateway)를 통해 수집한다. 수집된 모든 정보를 로컬에 저장하고, 규칙(rule)을 수행하여 시계열 형태의 데이터(TSDB: Time Series Database)로 수집하고 특정 조건에 설정된 경고(Alert) 등을 발생한다.
프로메테우스를 데이터 소스로 사용하는 경우, 수집할 대상에 따라 익스포터를 선택하고, 그라파나(Grafana) 혹은 지원되는 API 클라이언트를 사용하여 수집한 데이터를 PromQL(Prometheus Query Language)로 원하는 조건에 맞는 데이터만 시각화할 수 있다.
프로메테우스 특징
- 그라파나를 통한 시각화 지원
- 많은 시스템을 모니터링할 수 있는 다양한 플러그인을 가지고 있다.
- 쿠버네티스의 메인 모니터링 시스템으로 많이 사용된다.
- 프로메테우스가 주기적으로 exporter(모니터링 대상 시스템)로부터 pulling 방식으로 메트릭을 읽어서 수집한다.
Grafana
그라파나는 프로메테우스를 비롯한 여러 데이터들을 시각화해주는 모니터링 툴이다.
Kibana(키바나)와의 차이
- 키바나는 주로 로그 메시지 분석에 사용된다.
- 그라파나는 시스템 관점(cpu, 메모리, 디스크)의 메트릭 지표를 시각화하는데 특화되어 있다.
- 키바나는 elasticsearch에 묶여 있지만, 그라파나는 다양한 데이터베이스를 선택할 수 있다.
- 그라파나는 알람기능을 무료로 사용할 수 있다.
실습환경 구성
kops 인스턴스 t3.small & 노드 c5.2xlarge (vCPU 8, Memory 16GiB) 배포 및 kops 인스턴스(t3.small)에 SSH 접속 : 이번주 실습에서 성능을 요구하는 파드를 사용함
EC2 instance profiles 설정 및 AWS LoadBalancer 배포 & ExternalDNS & Metrics-server
설치 및 배포 : 20~30분 정도 추가 시간 소요
# EC2 instance profiles 에 IAM Policy 추가(attach)
aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy --role-name masters.$KOPS_CLUSTER_NAME
aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy --role-name nodes.$KOPS_CLUSTER_NAME
aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AllowExternalDNSUpdates --role-name masters.$KOPS_CLUSTER_NAME
aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AllowExternalDNSUpdates --role-name nodes.$KOPS_CLUSTER_NAME
# kOps 클러스터 편집 : 아래 내용 추가
# kubeproxy.metricsBindAddress 설정은 프로메테우스 kube-proxy 메트릭 수집을 위해서 설정 : 기본값 127.0.0.1 -> 수정 0.0.0.0 - 링크
kops edit cluster
-----
spec:
certManager:
enabled: true
awsLoadBalancerController:
enabled: true
externalDns:
provider: external-dns
metricsServer:
enabled: true
kubeProxy:
metricsBindAddress: 0.0.0.0
-----
# 업데이트 적용 : 모든 노드 롤링업데이트 필요 >> 마스터 EC2인스턴스 삭제 후 재생성 후 정상 확인 후, 워커노드 EC2인스턴스 생성 후 Join 후 삭제 과정 진행됨
kops update cluster --yes && echo && sleep 3 && kops rolling-update cluster --yes
# EC2 인스턴스 모니터링
while true; do aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --output text | sort; echo "------------------------------" ;date; sleep 1; done
과제1:프로메테우스-스택 설치 후 ‘공식 or 여러가지 대시보드’를 추가해보시고, 관련 스샷 올려주세요
1. 설치완료
2. 공식페이지에서 대시보드 다운로드 후 확인 - 링크
대쉬보드중 kube-state-metrics-v2 다운로드 받아서 import 진행
(카테고리 Dashboards → Import → copy 한 id 입력 후 Load → Prometheus default 선택 후 Import)
과제2:Nginx 파드를 배포 후 관련 metric 를 프로메테우스 웹에서 확인하고, 그라파나에 nginx 웹서버 대시보드를 추가 후 확인하시고, 관련 스샷 올려주세요.
파드 배포 후 nginx 확인
서비스 모니터링 생성 후 1분 정도 후에 프로메테우스 웹서버에서 State → Targets 에 nginx 서비스 모니터 추가 확인
그라파나에 nginx exporter 추가
'KOPS' 카테고리의 다른 글
PKOS 7주차 - 보안 (0) | 2023.02.27 |
---|---|
PKOS 6주차 - Alerting 얼럿매니저 로깅시스템 (0) | 2023.02.23 |
PKOS 4주차 - Harbor Gitlab ArgoCD (0) | 2023.02.07 |
PKOS(쿠버네티스)3주차 - Ingress & Storage (0) | 2023.02.01 |
PKOS(쿠버네티스)2주차 - 쿠버네티스 네트워크 (0) | 2023.01.26 |