목표
K6를 사용하여 성능 테스트 데이터를 생성하고, 이를 Prometheus로 수집하여 Grafana에서 시각화하는 환경을 구축합니다.
이 과정은 다음과 같은 순서로 진행됩니다:
- K6 설정: Prometheus로 테스트 데이터를 전송
- Prometheus 설정: 데이터를 수집 및 저장
- Grafana 설정: Prometheus 데이터를 기반으로 대시보드 시각화
- End-to-End 테스트 수행: 결과를 검증하고 최종 대시보드 확인
1. Prometheus 설정
1.1 Prometheus 설치
Prometheus는 Helm Chart를 사용하여 Kubernetes 클러스터에 설치합니다.
- 설치 명령어
helm install prometheus prometheus-community/prometheus -f prometheus-values.yaml --namespace monitoring
- Prometheus Helm Values 설정 Grafana 메트릭을 수집하기 위한 설정을 추가합니다.
scrape_configs:
- job_name: 'grafana'
metrics_path: /metrics
static_configs:
- targets:
- grafana.monitoring.svc.cluster.local:80
- job_name: Prometheus에서 수집할 대상 이름
- metrics_path: Grafana의 /metrics 경로에서 메트릭 데이터를 수집
- static_configs: Grafana의 Kubernetes 서비스 경로
- 설치 후 확인 Prometheus 관련 Pod들이 정상적으로 실행 중인지 확인
➜ ~ kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
grafana-9ffd5d8bd-vw882 1/1 Running 0 20m
2. Grafana 설정
2.1 Grafana 설치
Grafana도 Helm Chart를 사용하여 설치합니다.
- 설치 명령어
helm install grafana grafana/grafana -f grafana-values.yaml --namespace monitoring
- Grafana Helm Values 설정 아래는 주요 설정값입니다.
ingress:
enabled: true
className: webapprouting.kubernetes.azure.com
annotations:
nginx.ingress.kubernetes.io/rewrite-target: "/"
hosts:
- <grafanahost>
paths:
- path: /
pathType: Prefix
backend:
service:
name: grafana
port:
number: 80
dashboardProviders:
dashboardproviders.yaml:
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: ''
type: file
disableDeletion: false
editable: true
options:
path: /var/lib/grafana/dashboards/default
dashboards:
default:
k6-dashboard:
gnetId: 18030 # K6 Grafana Dashboard ID
revision: 1
datasource: Prometheus
- 설명
- ingress: Grafana의 외부 접속을 위한 Ingress 설정
- dashboards: Grafana 설치 후 K6 대시보드를 자동으로 생성
2.2 Grafana 데이터 소스 추가
Prometheus를 Grafana의 데이터 소스로 설정합니다.
- Helm Values 설정
datasources:
datasources.yaml:
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: <prometheus-host>
access: proxy
isDefault: true
- 설명
- name: 데이터 소스 이름
- type: Prometheus 데이터 소스를 선택
- url: Prometheus Ingress URL
- access: Grafana가 Proxy 모드로 Prometheus에 연결
3. K6 설정 및 테스트 수행
3.1 K6 테스트 스크립트 작성
아래는 K6 테스트 스크립트 예제입니다.
- stress.js
import { sleep, check } from 'k6';
import http from 'k6/http';
export const options = {
vus: 50,
duration: '100s',
};
export default function () {
const res = http.get('http://52.231.96.153');
check(res, {
'status is 200': () => res.status === 200,
});
sleep(1);
}
3.2 K6 테스트 실행
Prometheus에 데이터를 전송하며 테스트를 실행합니다.
- 명령어
K6_PROMETHEUS_RW_SERVER_URL=<prometheus-host>/api/v1/write \
k6 run -o experimental-prometheus-rw stress.js
- 설명
- K6_PROMETHEUS_RW_SERVER_URL: K6 데이터를 Prometheus로 전송하는 주소
- -o experimental-prometheus-rw: K6가 Prometheus Remote Write를 사용하도록 설정
4. 결과 및 Grafana 대시보드 확인
4.1 Grafana 대시보드
- Grafana UI에 접속
- URL: <grafana-host>
- 기본 로그인 정보
- ID: admin
- Password: 설치 시 생성된 비밀번호 확인
- K6 대시보드
- K6 테스트 데이터가 실시간으로 시각화된 대시보드를 확인합니다.
- 주요 메트릭:
- HTTP 요청 수
- HTTP 실패율
- 데이터 송수신량
5. Troubleshooting
- Ingress 설정 문제
- className 또는 annotations 설정을 확인
- Grafana와 Prometheus의 Ingress 경로가 올바르게 설정되었는지 점검
- Grafana 대시보드 자동 추가 실패
- dashboards 및 dashboardProviders 설정 검토
- 대시보드 경로가 /var/lib/grafana/dashboards에 올바르게 배치되었는지 확인
- Prometheus 메트릭 수집 문제
- Prometheus의 scrape_configs 경로에서 Grafana 및 K6 메트릭이 정상적으로 수집되고 있는지 확인
결론
이번 작업에서는 K6, Prometheus, Grafana를 통합하여 Kubernetes 환경에서 성능 테스트와 데이터 시각화를 구현했습니다. 이 과정을 통해 메트릭 수집부터 시각화까지의 전체 흐름을 이해하고, 문제 해결을 통해 안정적인 구성을 완료할 수 있었습니다.
이와 같은 환경은 서비스의 성능 모니터링뿐 아니라, 안정적인 클라우드 인프라 구축에 중요한 기반을 제공합니다. 😊
'Kubernetes' 카테고리의 다른 글
AKS에서 Bookinfo 앱을 활용한 Ingress Add-on 및 Topology Spread Constraints (0) | 2025.04.02 |
---|---|
Helm 기반 Jenkins 설치 시 InitContainer 실패 원인 분석 및 해결 (0) | 2025.04.01 |
[CI/CD] Argo Rollout을 사용한 Blue/Green 배포 (4) | 2024.10.02 |
CNCF란? Cloud Native란? (0) | 2024.09.25 |
[Docker] Docker 이미지 빌드, 배포, 백업 (0) | 2024.07.25 |