Post

Kubernetes 리소스 모니터링 (2) - Grafana

1부 Kubernetes 리소스 모니터링(1) - Prometheus에 이어서 이번 시간에는 Grafana의 개념과 Helm을 사용한 구축 방법에 대해 다뤄보도록 하겠습니다.


Grafana란?

Grafana는 오픈 소스 데이터 시각화 및 모니터링 도구로, 이를 사용해 다양한 데이터 소스에서 수집된 데이터를 기반으로 대시보드와 차트를 생성하여 실시간으로 모니터링할 수 있습니다. Grafana는 Metric, Log, Trace 등 다양한 형태의 데이터를 지원하며, 시스템 상태를 한눈에 파악하기 쉽도록 사용자 친화적인 인터페이스와 강력한 기능을 제공하고 있습니다.

위의 특성으로 아래와 같은 다양한 환경에서 사용됩니다.

  • 인프라 모니터링: 서버, 데이터베이스, 네트워크 장비 등의 성능 및 상태 모니터링
  • 애플리케이션 모니터링: 애플리케이션의 성능 지표, 오류, 로그 등을 모니터링
  • 비즈니스 지표 시각화: 판매량, 트래픽, 사용자 활동 등 비즈니스 관련 데이터 시각화
  • IoT 데이터 모니터링: 센서 및 장비에서 수집된 데이터를 실시간으로 시각화

Grafana의 특징

  1. 다양한 데이터 소스 지원: Prometheus, InfluxDB, Elasticsearch 등 여러 데이터베이스 및 모니터링 도구와 통합이 가능합니다.
  2. 유연한 대시보드 생성: Drag & Drop 방식으로 손쉽게 대시보드를 구성할 수 있습니다.
  3. 실시간 모니터링: 실시간으로 데이터를 시각화하여 시스템 상태를 즉각적으로 파악할 수 있습니다.
  4. 알림 기능: 특정 조건이 충족되면 이메일, Slack 등으로 알림을 보낼 수 있습니다.
  5. 사용자 관리 및 권한 부여: 조직 내 사용자 관리와 역할 기반 액세스 제어(RBAC)를 지원합니다.
  6. 플러그인 지원: 패널 플러그인, 데이터 소스 플러그인, 앱 플러그인 등을 통해 기능을 확장할 수 있습니다.

Grafana 구축 - Helm

Grafana Helm Chart Repository 추가

1
2
❯ helm repo add grafana https://grafana.github.io/helm-charts
"grafana" has been added to your repositories

Grafana Helm Chart 배포

이전 시간에 생성한 monitoring namespace에 배포하도록 하겠습니다.

아래와 같이 설치하면 storage class를 통해 pv, pvc도 사용할 수 있습니다.

1
2
3
4
helm install grafana grafana/grafana -n monitoring \
  --set persistence.enabled=true \
  --set persistence.storageClassName=<YOUR_STORAGE_CLASS> \
  --set persistence.size=5Gi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
❯ helm install grafana grafana/grafana --namespace monitoring 
NAME: grafana
LAST DEPLOYED: Fri Nov 08 06:18:38 2024
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
NOTES:
1. Get your 'admin' user password by running:

   kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo


2. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster:

   grafana.monitoring.svc.cluster.local

   Get the Grafana URL to visit by running these commands in the same shell:
     export POD_NAME=$(kubectl get pods --namespace monitoring -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}")
     kubectl --namespace monitoring port-forward $POD_NAME 3000

3. Login with the password from step 1 and the username: admin
#################################################################################
######   WARNING: Persistence is disabled!!! You will lose your data when   #####
######            the Grafana pod is terminated.                            #####
#################################################################################

메시지를 통해 다음과 같은 정보를 얻을 수 있습니다.
kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
위의 명령어를 통해 admin 계정의 비밀번호 확인 가능
export POD_NAME=$(kubectl get pods --namespace monitoring -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}")

kubectl --namespace monitoring port-forward $POD_NAME 3000
위의 명령어를 통해 포트 포워딩으로 접속 가능
grafana.monitoring.svc.cluster.local
클러스터 내부에서 위의 DNS 이름으로 접근 가능


Grafana 접속 확인 및 비밀번호 변경

Grafana를 배포하며 나온 메시지를 통해 admin 계정의 비밀번호를 확인한 뒤, 포트 포워딩을 통해 Grafana에 접속하겠습니다.

로그인

Grafana Login

접속 화면

Grafana Main

비밀번호 변경

Grafana Change Password1 Grafana Change Password2


Reference

Grafana 공식문서 - https://grafana.com/docs/grafana


궁금하신 점이나 추가해야 할 부분은 댓글이나 아래의 링크를 통해 문의해주세요.
Written with KKam._.Ji

This post is licensed under CC BY 4.0 by the author.