
환경설정
kubernetes version : 1.24.17
helm version: v3.7.0+geeac838
kube-prometheus-stack version: 65.0.0
grafana version: 8.5.*
# Helm 설치 스크립트를 사용하여 설치
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh --version v3.7.0
# 버전확인
helm version --short
# Helm 저장소 추가
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# kube-prometheus-stack 설치
helm install prometheus-stack prometheus-community/kube-prometheus-stack --namespace monitoring --create-namespace --version 65.0.0
:cloudserver-web 애플리케이션의 메트릭을 Prometheus에서 수집할 수 있도록 ServiceMonitor를 생성합니다.
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: cloudserver-web-monitor
labels:
release: prometheus-stack # Prometheus Stack과 연결되도록 설정
app: cloudserver-web
spec:
selector:
matchLabels:
app: cloudserver-web
endpoints:
- port: http # 메트릭을 노출하는 포트를 지정합니다
path: /metrics # 메트릭 엔드포인트 경로
targetPort: 8000 # 메트릭을 수집할 내부 포트
interval: 30s
namespaceSelector:
matchNames:
- default
#적용
kubectl apply -f cloudserver-web-monitoring.yml
:rometheus, Grafana, Alertmanager 등의 서비스를 NodePort로 노출하여 외부에서 접근할 수 있도록 설정합니다
apiVersion: v1
kind: Service
metadata:
name: prometheus-nodeport
namespace: monitoring
spec:
type: NodePort
ports:
- port: 9090
targetPort: 9090
nodePort: 30090
selector:
app.kubernetes.io/name: prometheus
---
apiVersion: v1
kind: Service
metadata:
name: grafana-nodeport
namespace: monitoring
spec:
type: NodePort
ports:
- port: 80
targetPort: 3000
nodePort: 30030
selector:
app.kubernetes.io/name: grafana
apiVersion: v1
kind: Service
metadata:
name: prometheus-nodeport
namespace: monitoring
spec:
type: NodePort
ports:
- port: 9090
targetPort: 9090
nodePort: 30090
selector:
app.kubernetes.io/name: prometheus
---
apiVersion: v1
kind: Service
metadata:
name: grafana-nodeport
namespace: monitoring
spec:
type: NodePort
ports:
- port: 80
targetPort: 3000
nodePort: 30030
selector:
app.kubernetes.io/name: grafana
---
apiVersion: v1
kind: Service
metadata:
name: alertmanager-nodeport
namespace: monitoring
spec:
type: NodePort
ports:
- port: 9093
targetPort: 9093
nodePort: 30093
selector:
app.kubernetes.io/name: alertmanager
#적용
kubectl apply -f monitoring-service.yml
:cloudserver-web 애플리케이션의 서비스에 메트릭을 노출하는 포트를 추가합니다:
apiVersion: v1
kind: Service
metadata:
name: cloudserver-service
labels:
release: prometheus-stack
app: cloudserver-web
spec:
selector:
app: cloudserver-web
ports:
- protocol: TCP
port: 80
targetPort: 8000
nodePort: 30088
name: http
- protocol: TCP
port: 8080
targetPort: 8000
nodePort: 30092
name: metrics
type: NodePort
#적용
kubectl apply -f cloudserver-service.yml
Helm 릴리스 상태 확인
helm list -n monitoring

Kubernetes monitoring namespace의 Pod 상태 확인

Service 상태 확인
Prometheus, Grafana, Alertmanager 등 서비스가 정상적으로 노출되어 있는지 확인합니다

웹 UI접근
1) 프로메테우스 UI
kubectl port-forward -n monitoring <prometheus-pod-name> 9090:9090
http://localhost:9090
접속후 status -> target 에서 확인

2) 그라파나 UI
kubectl port-forward -n monitoring <grafana-pod-name> 3000:3000
아이디 : admin
비밀번호: prom-operator
그라파나 사용법(간단하게)
왼쪽 connections -> Data sources -> Add new data source -> prometheus
하면

이런화면이 나오는데
prometheus server url 에 http://prometheus-stack-kube-prom-prometheus.monitoring:9090/ 입력

이렇게 뜨면 완료
이제
대시보드를 만들건데 이것도 간단하게
왼쪽 Dashboards -> new -> import -> 15757 입력후 로드

잘 연결이 되었다면


이렇게 모니터링을 시각화 할수 있습니다.
전체 cpu,memory 사용량
노드별 cpu,memory 사용량
네임스페이스 별 사용량
파드별 사용량
네트워크 송수신 트래픽 등 있어요.
원래는 알람기능까지 할려고 했는데 5일을 해도 해결을 못했어요. 알람 규칙이랑 연동은 다됬는데 슬랙으로 알람이 안가네요.. 아시는분 있으면 알려주세요 제발.......