Write 엔드포인트 활용
Write 엔드포인트는 Prometheus 에이전트 또는 서버가 수집한 메트릭 데이터를 클라우드 스토리지에 기록하기 위한 API입니다.
각 워크스페이스에 고유한 Write 엔드포인트가 생성되며, 다양한 소스에서 데이터를 받아 중앙 저장소에 안전하게 저장합니다.
워크스페이스에 대한 Write 엔드포인트는 워크스페이스 정보 조회 API에서 확인할 수 있습니다. (워크스페이스 정보 조회)
중앙 저장소에 저장된 메트릭은 최대 6개월간 활용 가능하며, 워크스페이스 삭제 시 바로 삭제됩니다.
메트릭 전송 방법
Advanced Managed Prometheus에서 메트릭을 수집하려면 Prometheus 호환 메트릭을 Write 엔드포인트로 전송해야 합니다.
이를 위해 Exporter를 사용하거나 애플리케이션 자체에서 메트릭을 노출할 수 있습니다.
활용 가능한 Exporter 목록은 Prometheus 공식 문서를 참고하시기 바랍니다. (Prometheus Exporters and integrations)
Node Exporter를 통한 예제
Prometheus 공식 지원 도구 중 하나인 Node Exporter는 Prometheus 생태계에서 가장 널리 사용되는 수집 도구 중 하나로 특정 애플리케이션이나 시스템의 데이터를 Prometheus 호환 메트릭으로 변환하여 제공하는 도구입니다.
Node Exporter 역할
Node Exporter는 리눅스 및 유닉스 기반 시스템의 주요 하드웨어 및 OS 수준 메트릭을 수집하여 Prometheus 서버로 전송하는 역할을 합니다. 이 도구는 Prometheus 서버가 스크랩(scrape)할 수 있는 HTTP 엔드포인트를 제공하며, 주요 메트릭은 다음과 같습니다.
- CPU 사용량
- 메모리 사용량
- 디스크 I/O
- 네트워크 트래픽
- 파일 시스템 상태
- 운영 체제 상태
1. VM 인스턴스 활용 예제
- VM 인스턴스 생성 및 연결 방법은 인스턴스 생성 및 연결을 참고하시기 바랍니다.
Node Exporter는 기본적으로 9100포트에서 /metrics 엔드포인트를 제공합니다.
-
아래 코드를 입력하여 Exporter를 설치합니다.
Node Exporter 설치 방법wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz
cd node_exporter-1.3.1.linux-amd64
./node_exporter& -
Prometheus를 다운로드하고 압축을 해제합니다.
Prometheus 설치cd ~
wget https://github.com/prometheus/prometheus/releases/download/v2.33.1/prometheus-2.33.1.linux-amd64.tar.gz
tar xvfz prometheus-2.33.1.linux-amd64.tar.gz
cd prometheus-2.33.1.linux-amd64 -
Prometheus 설정 파일을 저장할 디렉터리를 생성하고, yaml 파일을 생성합니다.
설정 파일 경로 설정mkdir -p /etc/prometheus
vi /etc/prometheus/prometheus-agent.yaml -
설정 파일 생성 후 아래 내용을 복사하여 붙여 넣습니다. 단 targets, url, credential 정보는 사용자 정보에 맞는 내용으로 입력해야 합니다.
yaml 파일 설정global:
scrape_interval: 15s # 데이터 수집 주기
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100'] # Node Exporter의 메트릭 수집 위치
remote_write:
- url: "http://managed-promethues.kr-central-2.kakaocloud.com/workspaces/XXXXXXX/api/v1/push" # 워크스페이스 write 엔드포인트 입력
headers:
Credential-ID: 'xxxxxxxx' # 사용자 Credential-ID 입력
Credential-Secret: 'xxxxxxxxxxxxxxxxxxxxxxxxx' # 사용자 Credential-Secret 입력 -
Prometheus 설치 폴더 이동 후 Prometheus를 실행합니다.
Prometheus 실행cd /root/prometheus-2.33.1.linux-amd64
./prometheus --config.file=/etc/prometheus/prometheus-agent.yaml --enable-feature=remote-write-receiver --web.listen-address=":9090" --storage.tsdb.path="/tmp/prometheus_data" & # Prometheus 실행 -
Prometheus가 정상적으로 실행되었다면, 브라우저에서 Prometheus가 설치된 VM의 IP 주소와 기본 포트 번호(9090)를 조합하여 URL을 입력합니다.
Prometheus 확인http://<VM_IP>:9090
-
Prometheus 대시보드의 Status > Targets 메뉴로 이동 후 node_exporter 대상이 UP으로 표기되어 있는지 확인합니다.
2. Kubernetes 클러스터 활용 예제
- Kubernetes 클러스터 생성 방법은 클러스터 생성 및 관리, 클러스터를 제어하기 위한 kubectl 설정 방법은 kubectl 제어 설정을 참고하시기 바랍니다.
-
아래 코드를 입력하여 kubectl 정상 동작을 확인합니다.
kubectl 동작 확인kubectl --kubeconfig=$KUBE_CONFIG get nodes
#출력 예시
# NAME STATUS ROLES AGE VERSION
# {node-name} Ready <none> 2d2h v1.18.17
# {node-name} Ready <none> 2d2h v1.18.17 -
Kubernetes 애플리케이션을 패키징하고 배포하는 도구인 Helm을 설치하고, 정상적으로 설치되었는지 확인합니다.
Helm 설치curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Helm 설치 확인helm version
#출력 예시
# version.BuildInfo{Version:"v3.x.x", GitCommit:"xxxxx", ...} -
Monitoring 네임스페이스 생성 후, Helm을 사용하여 Prometheus를 설치합니다.
네임스페이스 생성kubectl --kubeconfig=$KUBE_CONFIG create namespace monitoring
Prometheus 설치helm install prometheus prometheus-community/prometheus --namespace monitoring --set server.persistentVolume.enabled=false --kubeconfig=$KUBE_CONFIG
-
Prometheus는 prometheus.yml 파일을 통해 메트릭을 수집하며, 해당 파일 수정을 통해 타겟과 데이터 수집 주기를 정의해야 합니다. 단, 파일 수정은 ConfigMap 수정을 통해 진행하며, 수정을 위해서는 사전에 Node Exporter의 IP와 Port 정보를 확인해야 합니다.
- Node Exporter 확인
Node Exporter 이름 확인kubectl get pods -n kube-system -o wide --kubeconfig=$KUBE_CONFIG | grep node-exporter
#출력 예시
#ke-prometheus-node-exporter-gzsf8 1/1 Running 0 5m 10.xxx.0.5
#...- Node Exporter Port 확인
Node Exporter Port 확인kubectl describe pod ke-prometheus-[node-exporter-이름] -n kube-system --kubeconfig=$KUBE_CONFIG
#입력 예시
# kubectl describe pod ke-prometheus-node-exporter-gzsf8 -n kube-system --kubeconfig=$KUBE_CONFIG
#출력 예시(일부)
# Containers:
# node-exporter:
# Ports: 9100/TCP (포트 정보)- ConfigMap 수정 방법
ConfigMap 이름 확인kubectl get configmap -n monitoring --kubeconfig=$KUBE_CONFIG
#출력 예시(일부)
# NAME DATA AGE
# prometheus-server 1 5mConfigMap 수정kubectl edit configmap [configmap 이름] -n monitoring --kubeconfig=$KUBE_CONFIG
#입력 예시
# kubectl edit configmap prometheus-server -n monitoring --kubeconfig=$KUBE_CONFIG- ConfigMap 파일 내에 아래 내용 추가 후 저장
파일 수정remote_write:
- url: "http://managed-promethues.kr-central-2.kakaocloud.com/workspaces/XXXXXXX/api/v1/push" # 워크스페이스 write 엔드포인트 입력
headers:
Credential-ID: 'xxxxxxxx' # 사용자 Credential-ID 입력
Credential-Secret: 'xxxxxxxxxxxxxxxxxxxxxxxxx' # 사용자 Credential-Secret 입력
scrape_configs:
- job_name: 'node_exporters'
static_configs:
- targets:
- 'ke-prometheus-node-exporter.kube-system:XXXXX' #포트 입력
#입력 예시(일부)
#apiVersion: v1
#data:
# alerting_rules.yml: |
# {}
# alerts: |
# {}
# allow-snippet-annotations: "false"
# prometheus.yml: |
# global:
# evaluation_interval: 1m
# scrape_interval: 1m
# scrape_timeout: 10s
# rule_files:
# - /etc/config/recording_rules.yml
# - /etc/config/alerting_rules.yml
# - /etc/config/rules
# - /etc/config/alerts
# remote_write:
# - url: 'https://advanced-managed-prometheus.kr-central-2.kakaocloud.com/workspaces/ws-ddddd15c4/api/v1/push'
# headers:
# Credential-ID: '49448eeec0824a4eaa076140..'
# Credential-Secret: '2d6ffc6ec7e48c99f72c693d90d6dd3c..'
# scrape_configs:
# - job_name: 'node_exporters'
# static_configs:
# - targets:
# - 'ke-prometheus-node-exporter.kube-system:59100'
# - job_name: prometheus
# ...- ConfigMap이 변경되었음으로 Prometheus 서버 재실행
Prometheus 서버 재시작kubectl delete pod -l app=prometheus,component=server -n monitoring --kubeconfig=$KUBE_CONFIG
-
서버가 정상 적으로 다시 실행되었다면, 포트포워딩을 실행합니다.
포트포워딩 실행kubectl port-forward -n monitoring svc/prometheus-server 8080:80 --kubeconfig=$KUBE_CONFIG
-
로컬 브라우저에서 포트번호를 조합하여 URL을 입력합니다.
Prometheus 확인http://localhost:8080/
-
Prometheus 대시보드의 Status > Targets 메뉴로 이동 후 node_exporter 대상이 UP으로 표기되어 있는지 확인합니다.