인프라/Prometheus & Grafana 정리

Prometheus & Grafana 설치 (k8s)

보더96 2026. 9. 11. 14:07

1. monitoring namespace 생성

kubectl create namespace monitoring
 

확인:

kubectl get ns monitoring
 

정상이면 이런 식으로 나옵니다.

NAME         STATUS   AGE
monitoring   Active   ...
 

그다음 Helm에 Prometheus 공식 Chart 저장소를 등록합니다.

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
 
helm repo update
 

마지막 확인:

helm search repo prometheus-community/kube-prometheus-stack

 

 

2. 저사양 values 파일 만들기

nano ~/monitoring-values.yaml
 

그리고 아래 내용만 넣으세요.

alertmanager:
  enabled: false

prometheus:
  prometheusSpec:
    retention: 2d

    resources:
      requests:
        cpu: 100m
        memory: 512Mi
      limits:
        cpu: 500m
        memory: 1Gi

grafana:
  resources:
    requests:
      cpu: 50m
      memory: 128Mi
    limits:
      cpu: 300m
      memory: 256Mi
 

처음 실습이므로 Alertmanager는 끄고, Prometheus 데이터도 2일만 보관하겠습니다. Prometheus retention과 resources는 prometheusSpec에서 설정하는 구조입니다.

저장 방법은:

Ctrl + O
Enter
Ctrl + X
 

그다음 파일 확인만 해주세요.

cat ~/monitoring-values.yaml
 

여기까지만 하시고 cat 결과를 보내주세요.

그다음 제가 확인하고 나서 실제 설치 명령:

helm install ...

 

3.  설치 전 렌더링 테스트

아래 명령 하나만 실행해 주세요.

helm template monitoring prometheus-community/kube-prometheus-stack \
  --version 90.0.0 \
  -n monitoring \
  -f ~/monitoring-values.yaml \
  > /tmp/monitoring-rendered.yaml && echo "Helm Render OK"
 

정상이면 마지막에:

Helm Render OK
 

라고 나옵니다.

 

4.  실제 설치 단계

아래 명령을 실행하세요.

helm install monitoring prometheus-community/kube-prometheus-stack \
  --version 90.0.0 \
  -n monitoring \
  -f ~/monitoring-values.yaml \
  --timeout 10m
 

의미는 간단합니다.

monitoring
= Helm Release 이름

prometheus-community/kube-prometheus-stack
= 설치할 Chart

--version 90.0.0
= Chart 버전 고정

-n monitoring
= monitoring namespace에 설치

-f ~/monitoring-values.yaml
= 아까 만든 저사양 설정 적용
 

kube-prometheus-stack은 설치 시 Prometheus Operator 관련 CRD도 생성하도록 기본 설정되어 있습니다.

설치가 끝나면 딱 두 개만 확인하세요.

helm list -n monitoring
 

그리고:

kubectl get pods -n monitoring
 

처음에는 일부 Pod가:

ContainerCreating
Pending
 

상태여도 괜찮습니다. 잠시 후 Running으로 바뀌는지 보는 단계입니다.

 

 

5.  Grafana 접속 준비

먼저 Grafana 관리자 비밀번호를 확인하세요.

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

아이디는:

admin
 

입니다.

그다음 Grafana 서비스 이름도 확인해 주세요.

kubectl get svc -n monitoring | grep grafana

 

 

 

6.  Grafana 접속 포트포웨딩

지금 kubectl port-forward를 실행한 곳이 EC2 Ubuntu 서버이고, Grafana를 여는 브라우저가 사용자님의 PC라면 SSH 터널도 필요합니다.

Grafana Pod
   ↑
Grafana Service
   ↑
EC2 localhost:3001
 

출력에

Forwarding from 127.0.0.1:3001
 

이라고 되어 있어서 EC2 내부에서만 3001번으로 접근 가능한 상태입니다.

따라서 PC까지 연결하려면 PC의 새 터미널/PowerShell에서:

ssh -L 3001:localhost:3001 ubuntu@<지금 접속 중인 EC2의 공인IP>
 

지금접속중인EC2의 공인 IP는 public address IPv4 주소 나  탄력적 IP(Elastic IP) 을 적어주면된다!!

 
 

를 실행합니다. 그러면 전체가:

내 PC 브라우저
localhost:3001
      ↓
SSH 터널
      ↓
EC2 localhost:3001
      ↓
kubectl port-forward
      ↓
Grafana
 

가 됩니다. 그다음 PC 브라우저에서:

http://localhost:3001
 

을 열면 됩니다. 다만 한 가지 확인할 부분이 있습니다. 아까 Grafana Service는 **80/TCP**였는데 지금 명령은:

kubectl port-forward -n monitoring svc/monitoring-grafana 3001:8080
 

으로 하셨습니다. 출력상 포워딩 자체는 잡혔지만, 우선 서비스 포트를 정확히 확인하는 게 좋습니다.

현재 Ctrl+C 하지 말고 다른 SSH 창에서 이것만 실행해 주세요.

kubectl get svc monitoring-grafana -n monitoring -o yaml | grep -A 7 "ports:"
 

결과를 보내주시면 3001:80이 맞는지, 지금 3001:8080을 그대로 써도 되는지 확인이 필요하다.

 

 

 

 

7. window powershell에서 eks 내부 grafana 접속하기

지금 AWS 콘솔에서 해당 EC2 i-0f6516c8f0106cbd2를 선택해서 세부 정보 → Key pair name(키 페어 이름)을 확인해 주세요.

예를 들어 키 페어 이름이:

dev-server-key
 

이고 PC에 해당 .pem 파일이 있다면 PowerShell에서 이렇게 합니다.

ssh -i "C:\경로\dev-server-key.pem" -L 3001:localhost:3001 ubuntu@elasticIP

 

정상 연결되면 그 PowerShell 창은 닫지 말고 그대로 유지하세요.

그리고 EC2 안에서는 아까 이 명령도 계속 실행 중이어야 합니다.

kubectl port-forward -n monitoring svc/monitoring-grafana 3001:80
 

그다음 내 PC 브라우저에서:

http://localhost:3001
 

로 접속하면 됩니다.

전체 흐름은:

내 PC 브라우저
localhost:3001
   ↓
SSH -L 터널
   ↓
EC2 localhost:3001
   ↓
kubectl port-forward
   ↓
Grafana Service
   ↓
Grafana Pod

 

 

8.  windows에서 .pem 권이 너무 많아 ssh가 키사용 거부한 경우

owerShell에서 아래 순서대로 실행하세요.

$KEY="C:\Users\{pem키가 위치한 주소}"
 

상속 권한 제거:

icacls $KEY /inheritance:r
 

오류에 나온 계정 권한 제거:

icacls $KEY /remove "RTNB465\CodexSandboxUsers"
 

현재 사용자에게 읽기 권한만 부여:

icacls $KEY /grant:r "$env:USERNAME:R"
 

그다음 확인:

icacls $KEY
 

가능하면 결과에 본인 계정만 (R) 정도로 보이면 됩니다.

그다음 다시:

ssh -i "C:\Users\{pem키가 위치한 주소}" -L 3001:localhost:3001 ubuntu@{elasticIP}
 

이번에는 UNPROTECTED PRIVATE KEY FILE 오류가 없어져야 합니다.

만약 icacls $KEY /grant:r "$env:USERNAME:R"에서 계정명 관련 오류가 나면, 먼저:

whoami

 

 

9.  windows에서 본인계정 읽기권한 때문에 실패한 경우

마지막에 본인 계정 읽기 권한을 넣는 명령만 PowerShell 문법 때문에 실패한 상태입니다.

$ME = whoami
 

확인:

$ME
 

그다음:

icacls $KEY /grant:r "$($ME):(R)"
 

그리고 확인:

icacls $KEY
 

정상이면 대략:

C:\Users\{pem키가 위치한 주소}
    {내pc이름}:(R)
 

처럼 본인 계정에 (R) 읽기 권한만 보여야 합니다.

그다음 다시 SSH 터널을 연결하세요.

ssh -i "C:\Users\{pem키가 위치한 주소}" -L 3001:localhost:3001 ubuntu@elasticIP
 

이번에는 UNPROTECTED PRIVATE KEY FILE 오류가 없어져야 합니다.

참고로 EC2 쪽에서는 아래 명령도 계속 실행 중이어야 합니다.

kubectl port-forward -n monitoring svc/monitoring-grafana 3001:80
 

즉 최종적으로 두 터미널이 동시에 살아 있어야 합니다.

[EC2 터미널]
kubectl port-forward
        ↓
Grafana

[내 PC PowerShell]
ssh -L 3001...
        ↓
EC2

[내 PC 브라우저]
http://localhost:3001

 

 

 

 

 

포트포워딩을 http://localhost:3001/ 해서 접속하면 그라파나가 띄어진다.