파일 기반 서비스 디스커버리로 스크레이프 대상 발견하기
파일 기반 서비스 디스커버리로 스크레이프 대상 발견하기 (Use file-based service discovery to discover scrape targets)
Prometheus는 스크레이프 대상을 발견하기 위해 다양한 서비스 디스커버리 옵션을 제공해요. Kubernetes, Consul 등이 있습니다. 현재 지원되지 않는 서비스 디스커버리 시스템을 써야 한다면, JSON 파일에 스크레이프 대상을(그 대상에 대한 메타데이터와 함께) 나열할 수 있는 Prometheus의 파일 기반 서비스 디스커버리 메커니즘이 가장 잘 맞을 수 있어요.
이 문서에서는 다음을 진행합니다:
- 로컬에서 Prometheus Node Exporter 설치·실행
- Node Exporter의 호스트·포트 정보를 지정하는
targets.json파일 생성 targets.json파일로 Node Exporter를 발견하도록 구성된 Prometheus 인스턴스 설치·실행
출처: 문서
본문
Prometheus는 스크레이프 대상을 발견하기 위해 Kubernetes, Consul 등 다양한 서비스 디스커버리 옵션을 제공합니다. 현재 지원되지 않는 서비스 디스커버리 시스템을 사용해야 한다면, 여러분의 사용 사례에 Prometheus의 파일 기반 서비스 디스커버리 메커니즘이 가장 잘 맞을 수 있습니다. 이는 JSON 파일에 스크레이프 대상을(그 대상에 대한 메타데이터와 함께) 나열할 수 있게 해줍니다.
이 가이드에서는:
- 로컬에서 Prometheus Node Exporter를 설치·실행하고,
- Node Exporter의 호스트·포트 정보를 지정하는
targets.json파일을 만들고, targets.json파일을 사용해 Node Exporter를 발견하도록 구성된 Prometheus 인스턴스를 설치·실행합니다.
Node Exporter 설치·실행
Node Exporter로 리눅스 호스트 메트릭 모니터링 가이드의 이 섹션을 참고하세요. Node Exporter는 포트 9100에서 실행됩니다. Node Exporter가 메트릭을 노출하는지 확인하려면:
curl http://localhost:9100/metrics
메트릭 출력은 대략 다음과 같아야 합니다:
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0
go_gc_duration_seconds{quantile="0.25"} 0
go_gc_duration_seconds{quantile="0.5"} 0
...
Prometheus 설치·구성·실행
Node Exporter와 마찬가지로 Prometheus는 tarball로 설치할 수 있는 단일 정적 바이너리입니다. 플랫폼용 최신 릴리즈를 받아 압축을 풉니다:
wget https://github.com/prometheus/prometheus/releases/download/v*/prometheus-*.*-amd64.tar.gz
tar xvf prometheus-*.*-amd64.tar.gz
cd prometheus-*.*
압축을 푼 디렉터리에는 prometheus.yml 구성 파일이 있습니다. 그 파일의 현재 내용을 이것으로 교체합니다:
scrape_configs:
- job_name: 'node'
file_sd_configs:
- files:
- 'targets.json'
이 구성은 node(Node Exporter용)라는 작업이 있고, targets.json 파일에서 Node Exporter 인스턴스의 호스트·포트 정보를 가져온다고 지정합니다.
이제 targets.json 파일을 만들고 이 내용을 추가합니다:
[
{
"labels": {
"job": "node"
},
"targets": [
"localhost:9100"
]
}
]
참고: 이 가이드에서는 간결함을 위해 JSON 서비스 디스커버리 구성을 수동으로 다룹니다. 일반적으로는 어떤 종류의 JSON 생성 프로세스나 도구를 사용하는 것을 권장합니다.
이 구성은 하나의 대상 localhost:9100을 가진 node 작업이 있다고 지정합니다.
이제 Prometheus를 시작할 수 있습니다:
./prometheus
Prometheus가 성공적으로 시작되면 로그에 이런 줄이 보여야 합니다:
level=info ts=2018-08-13T20:39:24.905651509Z caller=main.go:500 msg="Server is ready to receive web requests."
발견된 서비스의 메트릭 탐색
Prometheus가 실행 중이면 Prometheus 표현식 브라우저로 node 서비스가 노출하는 메트릭을 탐색할 수 있습니다. 예를 들어 up{job="node"} 메트릭을 탐색하면 Node Exporter가 적절히 발견되고 있음을 확인할 수 있습니다.
대상 목록을 동적으로 변경하기
Prometheus의 파일 기반 서비스 디스커버리를 사용하면 Prometheus 인스턴스가 파일의 변경을 감시하고 인스턴스를 재시작하지 않고도 스크레이프 대상 목록을 자동으로 업데이트합니다. 이를 보여주기 위해 포트 9200에서 두 번째 Node Exporter 인스턴스를 시작합니다. 먼저 Node Exporter 바이너리가 있는 디렉터리로 이동해 새 터미널 창에서 이 명령을 실행합니다:
./node_exporter --web.listen-address=":9200"
이제 targets.json의 구성을 수정해 새 Node Exporter 항목을 추가합니다:
[
{
"targets": [
"localhost:9100"
],
"labels": {
"job": "node"
}
},
{
"targets": [
"localhost:9200"
],
"labels": {
"job": "node"
}
}
]
변경 사항을 저장하면 Prometheus가 새 대상 목록을 자동으로 통지받습니다. up{job="node"} 메트릭은 instance 라벨이 localhost:9100과 localhost:9200인 두 인스턴스를 표시해야 합니다.
요약 (Summary)
이 가이드에서는 Prometheus Node Exporter를 설치·실행하고, 파일 기반 서비스 디스커버리를 사용해 Node Exporter에서 메트릭을 발견하고 스크레이프하도록 Prometheus를 구성했습니다.
더 알아보기 (Learn more)
- file_sd 설정 —
file_sd_configs옵션 전체 - node_exporter 가이드 — Node Exporter 설치·실행
- 표현식 브라우저 — Prometheus UI에서 메트릭 탐색
- 컨트리뷰팅 가이드 — 다른 서비스 디스커버리 기여 방법