Prometheus에는 Service Discovery라는 기능이 있다.
해당 기능은 scrape할 타겟의 리스트들을 변경하는 기능이다.
SD 기반 방식은 아래와 같이 있다.
- DNS 기반 SD
- DNS에 query 결과를 기반으로 타겟들을 정의하여 scrape
- File 기반 SD
- inotify 기반으로 동작하므로 타겟 변경시 변경 이벤트 기반으로 즉시 적용 가능
- HTTP 기반 SD
inotify: 파일 시스템 이벤트 통보 기능을 제공해주는 리눅스 커널 서브 시스템
HTTP Service Discovery
HTTP endpoint로 Target을 검색할 수 있는 방법으로, 파일 File based service discovery 방식의 대안이다.
HTTP 기반 Service discovery 방식은 아래 특징이 있다.
- 지정된 interval마다 타겟리스트를 받아옴.
- 수신된 target list들은 캐시되며, 1분 간격으로 프로메테우스의 scrape에 적용
- 갱신시, HTTP로 수신한 리스트에 에러가 있으면 기존 리스트를 그대로 사용.
- 갱신 실패시, prometheus_sd_http_failures_total에 저장됨
- 캐시된 타겟들은 prometheus 재시작시 저장되지 않음
- 타겟 추가시에도 전체 타겟들을 포함해서 http endpoint로 다시 보내줘야함
- HTTP Header의 Content-Type: application/json 필수이며, body의 데이터는 반드시 json 형식이어야 한다.
- Response는 200 code와 함께 Request에서 포함된 target json list가 그대로 회신됨
참고자료: https://prometheus.io/docs/prometheus/latest/http_sd/