Prometheus 환경에서 단발성 작업 모니터링을 위한 PushGateway 설정 및 활용

1. Push Gateway 의 동작 원리와 역할

Prometheus 의 기본 수집 방식은 클라이언트로부터 직접 데이터를 요청하는 Pull 방식입니다. 하지만 배치 처리나 짧은 수명의 컨테이너와 같은 경우, 스캐퍼가 접속할 수 있는 지속적인 타겟이 존재하지 않을 수 있습니다. 이때 사용하는 것이 PushGateway입니다.

이는 외부 시스템이 메트릭을 주입할 수 있는 API 엔드포인트를 제공하는 중간 계층 역할을 수행합니다. 데이터 생산자가 정보를 여기로 보내면, PushGateway 는 이를 임시 저장소에 보관하며 Prometheus 서버의 다음 스캐프 주기까지 대기합니다. 자체적으로 수집 기능을 갖지 않고纯粹的으로 전달 및 보관 중개자로서 작동합니다.

# 주요 실행 옵션 설명
--web.listen-address=:9091 # 수신 포트 지정 (기본값 9091)
--persistence.file=/var/lib/pushgateway/data.db # 중단 시 데이터 복구용 DB 파일 경로
--max-connections=1000 # 동시 연결 제한 설정

2. 이진 파일 배포 및 실행

Docker 나 Kubernetes 환경도 지원되지만, 디버깅과 빠른 테스트를 위해 네이티브 바이너리를 설치하여 구성하는 과정을 먼저 살펴봅니다.

# 최신 릴리스 패키지 다운로드
curl -sL https://github.com/prometheus/pushgateway/releases/latest/download/pushgateway-v1.6.0.linux-amd64.tar.gz -o pg_archive.tar.gz

# 압축 해제 및 이동
tar xzvf pg_archive.tar.gz
mv pushgateway-1.6.0.linux-amd64 /opt/tools/push-gw
cd /opt/tools/push-gw

# 데몬 모드 없이 직접 실행 확인 후 백그라운드로 전환
./pushgateway &

# 포트 바인딩 상태 확인
ss -tulnp | grep 9091

기본 설정으로는 메모리 상에 데이터가 유지되므로 서비스 재시동 시 정보가 손실될 수 있습니다. 영구적인 보관이 필요하다면 위 옵션에 파일 경로를 명시해야 합니다.

3. Prometheus 본체 연동 설정

데이터가 PushGateway 에 들어온 이후에는 Prometheus 가 해당 주소를 정기적으로 조회하도록 설정해야 합니다. prometheus.yml 파일에 다음과 같은 스크랩 잡을 추가합니다.

scrape_configs:
  - job_name: 'external_push_targets'
    static_configs:
      - targets: ['10.0.0.50:9091']  # Gateway 호스트 주소
    honor_labels: true  # 푸시 시 포함된 라벨 정보 보호

변경 사항을 적용하기 위해 재시작 없이 리로드 신호를 보낼 수 있습니다.

curl -X POST http://localhost:9090/-/reload

4. 클라이언트 측 메트릭 전송 예제

사용자는 표준 포맷의 텍스트 데이터를 생성하여 HTTP POST 방식으로 전송하면 됩니다. URL 경로에는 JOB 이름과 인스턴스 식별자를 포함하여 데이터를 분류합니다.

단일 지표 전송

특정 상태 값을 한 번만 보내는 경우입니다.

# 값: 150ms 지연 시간, Metric: http_req_duration_ms
printf "http_req_duration_ms 0.15\n" \
| curl -X POST --data-binary @- http://10.0.0.50:9091/metrics/job/backend_api/instance/api-server-01

이 과정에서 Gateway 는 자동으로 push_timestamp 와 같은 보조 메트릭을 생성하여 데이터의 신선도를 나타냅니다.

다중 지표 묶음 전송

여러 개의 메트릭을 하나의 요청으로 패키징할 수도 있습니다.

cat <<EOF | curl -X POST --data-binary @- http://10.0.0.50:9091/metrics/job/batch_proc/instance/node-alpha
#TYPE cpu_system_pct gauge
cpu_system_pct 12.5
#TYPE disk_free_gb gauge
disk_free_gb 45.2
EOF

자동화 모니터링 스크립트

시스템 리소스를定期检查하여 전송하는 Shell 스크립트의 예를 보여줍니다. 기존 메모리 중심 로직을 CPU 부하 체크로 변경하고 변수명을 완전히 교차하였습니다.

#!/bin/bash
# load_balancer_watcher.sh

# 1분 평균 부하 획득
load_avg=$(awk '{print $1}' /proc/loadavg)
# 현재 시스템 시간 획득
ts_epoch=$(date +%s)

# 목표 설정
gw_host="http://172.16.0.10:9091"
job_tag="system_health_check"
inst_id=$(hostname -i | awk '{print $1}')

# 메트릭 형식 작성 및 전송
payload=$(cat <<EODATA
#TYPE sys_load_1min gauge
sys_load_1min $load_avg
#TIME collection_epoch_seconds $ts_epoch
EODATA
)

curl -X POST --data-binary "$payload" "${gw_host}/metrics/job/${job_tag}/instance/${inst_id}"

5. 메트릭 데이터 제거 관리

임시적으로 올라간 데이터를 정리하거나 오류 데이터 발생 시 삭제할 수 있습니다.

# 특정 Job 및 인스턴스 라벨 조합에 해당하는 메트릭 전체 삭제
curl -X DELETE http://10.0.0.50:9091/metrics/job/batch_proc/instance/node-alpha

위와 같이 RESTful 방식을 통해 원하는 범위의 데이터를 무효화할 수 있으며, 웹 UI 를 통째로 다시 초기화하지 않아도 국부적인 정리가 가능합니다.

태그: prometheus Pushgateway observability linux-scripting monitoring-system

5월 26일 03:16에 게시됨