Exporter
Exporter는 "Prometheus가 무엇을 수집할 수 있는가"를 결정하는 존재다. PromQL 문법이나 Alert rule을 먼저 설계하는 대신, 어떤 Exporter를 어떤 네트워크에 붙일 것인가를 먼저 정하면 자연스럽게 scrape_configs target 목록과 검증 절차가 따라온다는 관점에서 보면, Exporter 선택은 곧 "모니터링 스택이 다루는 가시성 영역의 경계"를 정하는 일이다.
수집 대상마다 다른 Exporter를 쓴다
Exporter는 Prometheus가 pull할 수 있도록 텍스트 포맷의 /metrics 엔드포인트를 노출하는 사이드카/에이전트다. 대상 종류에 따라 노출하는 정보와 구성이 다르다.
| Exporter | 수집 대상 | 주요 메트릭 | 기본 포트 |
|---|---|---|---|
node-exporter |
호스트 OS | CPU, RAM, 디스크, 네트워크, 온도 | 9100 |
cAdvisor |
Docker 컨테이너 | 컨테이너별 CPU, 메모리, I/O, 파일시스템, 재시작 수 | 8080 |
blackbox-exporter |
HTTP/TCP/ICMP 프로브 | 가용성, 응답 지연, 인증서 만료 | 9115 |
mysqld_exporter |
MySQL | 연결 수, QPS, 슬로우 쿼리, 핸들러 카운터 | 9104 |
redis_exporter |
Redis | 연결 수, 메모리, evicted keys, AOF/RDB 상태 | 9121 |
node-exporter는 호스트(도커 호스트) 메트릭을/metrics에 노출하고, Linux에서 텍스트파일 컬렉터로 커스텀 메트릭 추가가 가능하다.[1]cAdvisor는 도커 컨테이너 메트릭을/metrics에 노출하고 컨테이너 리소스/IO/파일시스템/재시작 횟수를 확인하며, 최신 Docker/커널 일부 환경에서는privileged: true가 필요하다.[2]blackbox-exporter는 프로브 대상을 파라미터로 받아 HTTP 2xx, TCP 포트 오픈, TLS 인증서 만료 같은 가용성 체크를 수행한다.[3]mysqld_exporter는 DSN(user:pass@(host:port)/) 형태의 인증 정보가 필요하며, 최소 권한 계정(PROCESS, REPLICATION CLIENT, SELECT)을 써야 한다.[4]redis_exporter는REDIS_ADDR과REDIS_PASSWORD환경변수로 Redis 연결을 설정한다.[5]
node-exporter와 cAdvisor는 관측 대상 자신의 metric을 노출하지만, blackbox-exporter는 외부 target을 probe한 결과를 노출한다는 점에서 다른 세 Exporter와 역할이 다르다.
공통 컨벤션: monitoring_net과 서비스명:포트
모든 Exporter는 같은 컨벤션을 따른다 — monitoring_net에 붙이고, Prometheus scrape_configs에 서비스명:포트 기준으로 target을 등록한다. 검증은 컨테이너 내부/네트워크에서 curl http://<container>:<port>/metrics로 확인한다.[6]
보안 팁으로는 외부 포트 노출을 최소화하고, node-exporter의 호스트 마운트는 read-only로 유지하며, 자격증명은 .env 대신 Docker secrets를 사용하는 것을 권장한다.[7]
Blackbox relabel_configs 패턴
blackbox-exporter는 일반 scrape와 달리 metrics_path: /probe + relabel_configs 패턴이 필수다.[8] 설정 예시를 읽은 이 page의 해석으로는, __address__를 실제 probe 대상(__param_target)으로 보내고 Prometheus가 scrape하는 주소를 blackbox:9115로 교체해야 하기 때문이다.[9]
- job_name: 'api-probe'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- http://app:3000/health
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- target_label: instance
replacement: api
- target_label: __address__
replacement: blackbox:9115
설정 예시의 경계
- port, volume mount, DB 권한, relabel rule은 source의 compose 환경 예시이며 대상과 보안 정책에 맞게 다시 검토해야 한다.
실패 모드
- Exporter 컨테이너와 Prometheus가 다른 Docker 네트워크에 있어
/metrics가 unreachable인 경우 (→monitoring_net사용). node-exporter호스트 마운트를 read-write로 설정해 호스트 FS를 의도치 않게 수정할 수 있는 경우.cAdvisor를privileged: true없이 최신 Docker 드라이버 환경에 두어 권한 오류로 메트릭이 비어 있는 경우.mysqld_exporterDSN에 루트 계정을 쓰거나 불필요 권한을 부여하는 경우.- Blackbox
relabel_configs를 빠뜨려 Prometheus가 직접app:3000/health를 scrape 시도하는 경우.
관련
- Prometheus: Exporter의
/metrics를 pull하는 주체.scrape_configs에 Exporter target을 등록한다. - PromQL: Exporter가 노출한 메트릭에서 값을 추출하는 쿼리 언어.
출처
테스트 질문
node-exporter,cAdvisor,blackbox-exporter의 역할 차이는 무엇인가?- Blackbox exporter에서
relabel_configs가 왜 필수인가? mysqld_exporter인증에 루트 계정을 쓰면 안 되는 이유는 무엇인가?- Exporter 간 공통 컨벤션(
monitoring_net, 서비스명:포트 target)이 왜 중요한가?
Exporter.md — 1) node-exporter 개념 요약, "호스트(도커 호스트)의 메트릭을
/metrics에 노출", "텍스트파일 컬렉터로 커스텀 메트릭 추가 가능" ↩︎Exporter.md — 2) cAdvisor 개념 요약, "최신 Docker/커널 일부 환경에서 필요" (
privileged: true) ↩︎Exporter.md — 3) blackbox-exporter 개념 요약, "프로브 대상을 파라미터로 받아 가용성 체크" ↩︎
Exporter.md — 4) mysqld_exporter 개념 요약, DSN 형식, MySQL 권한 최소 예시 ↩︎
Exporter.md — 5) redis_exporter 개념 요약, REDIS_ADDR/REDIS_PASSWORD ↩︎
Exporter.md — 0) 공통 컨벤션 ↩︎
Exporter.md — 6) 보안/권한 팁 ↩︎
PromQL.md — "Blackbox는
metrics_path: /probe+relabel_configs패턴 필수"(L352) ↩︎Exporter.md — 3) Prometheus 타깃(HTTP 헬스체크 예시) relabel_configs(L183-189:
source_labels: [__address__]→target_label: __param_target,target_label: __address__→replacement: blackbox:9115) ↩︎