쿠버네티스 cloudserver-web monitoring(prometheus,grafana)

KIM HYUNMIN·2024년 10월 10일

쿠버네티스

목록 보기
12/16

환경설정
kubernetes version : 1.24.17
helm version: v3.7.0+geeac838
kube-prometheus-stack version: 65.0.0
grafana version: 8.5.*

1) Prometheus Stack 다운로드 및 설치

  • Helm 설치
# 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
  • Prometheus Stack 설치
# 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-monitoring.yml 파일 구성

: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

monitoring-service.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-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

http://localhost: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일을 해도 해결을 못했어요. 알람 규칙이랑 연동은 다됬는데 슬랙으로 알람이 안가네요.. 아시는분 있으면 알려주세요 제발.......

profile
Linux,Window,Network,docker,kubernets

0개의 댓글