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/ 해서 접속하면 그라파나가 띄어진다.
