Skip to main content

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 인스턴스 활용 예제

안내

Node Exporter는 기본적으로 9100포트에서 /metrics 엔드포인트를 제공합니다.

  1. 아래 코드를 입력하여 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&
  2. 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
  3. Prometheus 설정 파일을 저장할 디렉터리를 생성하고, yaml 파일을 생성합니다.

    설정 파일 경로 설정
    mkdir -p /etc/prometheus
    vi /etc/prometheus/prometheus-agent.yaml
  4. 설정 파일 생성 후 아래 내용을 복사하여 붙여 넣습니다. 단 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 입력
  5. 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 실행
  6. Prometheus가 정상적으로 실행되었다면, 브라우저에서 Prometheus가 설치된 VM의 IP 주소와 기본 포트 번호(9090)를 조합하여 URL을 입력합니다.

    Prometheus 확인
    http://<VM_IP>:9090
  7. Prometheus 대시보드의 Status > Targets 메뉴로 이동 후 node_exporter 대상이 UP으로 표기되어 있는지 확인합니다.

2. Kubernetes 클러스터 활용 예제

안내
  1. 아래 코드를 입력하여 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
  2. 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", ...}
  3. 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
  4. 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 5m
    ConfigMap 수정
    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
  5. 서버가 정상 적으로 다시 실행되었다면, 포트포워딩을 실행합니다.

    포트포워딩 실행
    kubectl port-forward -n monitoring svc/prometheus-server 8080:80 --kubeconfig=$KUBE_CONFIG
  6. 로컬 브라우저에서 포트번호를 조합하여 URL을 입력합니다.

    Prometheus 확인
    http://localhost:8080/
  7. Prometheus 대시보드의 Status > Targets 메뉴로 이동 후 node_exporter 대상이 UP으로 표기되어 있는지 확인합니다.