구성
구성 (Configuration)
프로메테우스는 커맨드라인 플래그와 구성 파일로 구성돼요. 커맨드라인 플래그는 저장 위치, 디스크와 메모리에 보관할 데이터 양 같은 불변의 시스템 파라미터를 구성하고, 구성 파일은 잡과 인스턴스 스크래핑과 관련된 모든 것, 그리고 어떤 규칙 파일을 로드할지를 정의해요. 이 문서는 prometheus.yml 구성 파일의 모든 옵션을 담은 거대한 참고 페이지예요.
이 페이지는 공식 문서 중에서도 가장 방대한 참고 문서 중 하나예요. 원문은 200KB가 넘는 YAML 옵션 사양이므로, 여기서는 구성의 전체 구조와 각 핵심 옵션을 충실하게 정리해 드릴게요. 구체적인 개별 옵션 하나하나가 필요하면 원문 페이지를 함께 보세요.
출처: 문서
본문
Prometheus는 커맨드라인 플래그와 구성 파일로 구성돼요. 커맨드라인 플래그는 불변의 시스템 파라미터(저장 위치, 디스크와 메모리에 보관할 데이터 양 등)를 구성하는 반면, 구성 파일은 잡과 그들의 인스턴스 스크래핑과 관련된 모든 것, 그리고 어떤 규칙 파일을 로드할지를 정의해요.
사용 가능한 모든 커맨드라인 플래그를 보려면 ./prometheus -h를 실행하세요.
Prometheus는 런타임에 구성을 리로드할 수 있어요. 새 구성이 잘 구성되지 않았으면 변경이 적용되지 않아요.
구성 리로드는 Prometheus 프로세스에 SIGHUP을 보내거나 /-/reload 엔드포인트에 HTTP POST 요청을 보내서(--web.enable-lifecycle 플래그가 활성화된 경우) 트리거돼요. 이렇게 하면 구성된 규칙 파일도 함께 리로드돼요.
구성 파일 (Configuration file)
로드할 구성 파일을 지정하려면 --config.file 플래그를 사용하세요.
파일은 아래 설명된 스키마로 정의된 YAML 형식으로 작성돼요. 대괄호는 파라미터가 선택 사항임을 나타내요. 리스트가 아닌 파라미터의 값은 지정된 기본값으로 설정돼요.
일반 자리표시자(placeholder)는 다음과 같이 정의돼요.
<boolean>:true또는false값을 가질 수 있는 불리언<duration>: 정규식((([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?|0)와 일치하는 지속시간. 예:1d,1h30m,5m,10s<path>: 현재 작업 디렉터리의 유효한 경로<float>: 부동소수점 숫자<host>: 호스트네임 또는 IP 뒤에 선택적 포트 번호로 구성된 유효한 문자열<int>: 정수 값<labelname>: 정규식[a-zA-Z_][a-zA-Z0-9_]*와 일치하는 문자열. 소스 라벨의 다른 지원되지 않는 문자는 밑줄로 변환해야 해요. 예를 들어app.kubernetes.io/name라벨은app_kubernetes_io_name으로 써야 해요.<labelvalue>: 유니코드 문자 문자열<filename>: 유효한 URL 경로<scheme>:http또는https값을 가질 수 있는 문자열<secret>: 비밀번호 같은 시크릿인 일반 문자열<string>: 일반 문자열<size>: 바이트 단위 크기. 예:512MB. 단위 필수. 지원 단위: B, KB, MB, GB, TB, PB, EB.<tmpl_string>: 사용 전에 템플릿 확장되는 문자열
다른 자리표시자는 별도로 지정돼요.
유효한 예제 파일은 여기에서 찾을 수 있어요.
전역 구성은 다른 모든 구성 컨텍스트에서 유효한 파라미터를 지정해요. 이것들은 또한 다른 구성 섹션의 기본값 역할을 해요.
global:
# 기본적으로 타깃을 스크랩하는 빈도.
[ scrape_interval: <duration> | default = 1m ]
# 스크랩 요청이 타임아웃되기까지의 시간.
# 스크랩 간격보다 클 수 없음.
[ scrape_timeout: <duration> | default = 10s ]
# 스크랩 중 클라이언트와 협상할 프로토콜.
# 지원 값(대소문자 구분): PrometheusProto, OpenMetricsText0.0.1,
# OpenMetricsText1.0.0, PrometheusText0.0.4, PrometheusText1.0.0.
# 여기와 개별 스크랩 구성 둘 다에서 설정하지 않으면, 그 스크랩 구성에서
# 사용되는 협상 순서는 그 스크랩 구성의 scrape_native_histograms의
# 유효값에 따라 달라짐.
# scrape_native_histograms가 false면 순서는
# [ OpenMetricsText1.0.0, OpenMetricsText0.0.1, PrometheusText1.0.0, PrometheusText0.0.4 ].
# true면 순서는
# [ PrometheusProto, OpenMetricsText1.0.0, OpenMetricsText0.0.1, PrometheusText1.0.0, PrometheusText0.0.4 ].
[ scrape_protocols: [ <string>, ... ] ]
# 규칙을 평가하는 빈도.
[ evaluation_interval: <duration> | default = 1m ]
# 이 특정 그룹의 규칙 평가 타임스탬프를 지정된 기간만큼 과거로 오프셋해
# 기본 메트릭이 수신됐는지 보장.
# 메트릭 가용성 지연은 Prometheus가 remote write 타깃으로 실행될 때 더 발생할
# 가능성이 높지만, 스크래핑에 이상이 있을 때도 발생할 수 있음.
[ rule_query_offset: <duration> | default = 0s ]
# 외부 시스템(페더레이션, 원격 저장소, Alertmanager)과 통신할 때
# 어떤 타임시리즈나 알림에 추가할 라벨.
# 환경 변수 참조 `${var}` 또는 `$var`는 현재 환경 변수의 값에 따라 치환됨.
# 정의되지 않은 변수에 대한 참조는 빈 문자열로 치환됨.
# `$` 문자는 `$$`로 이스케이프할 수 있음.
external_labels:
[ <labelname>: <labelvalue> ... ]
# PromQL 쿼리가 기록되는 파일.
# 구성 리로드 시 파일이 다시 열림.
[ query_log_file: <string> ]
# 스크랩 실패가 기록되는 파일.
# 구성 리로드 시 파일이 다시 열림.
[ scrape_failure_log_file: <string> ]
# 이 바이트 수보다 큰 압축되지 않은 응답 본문은 스크랩을 실패시킴.
# 0은 무제한. 예: 100MB.
# 이것은 실험적 기능이며, 동작이 미래에 바뀌거나 제거될 수 있음.
[ body_size_limit: <size> | default = 0 ]
# 수락될 스크랩 샘플 수에 대한 스크랩별 제한.
# 메트릭 relabeling 후 이 숫자보다 많은 샘플이 있으면 전체 스크랩이
# 실패로 처리됨. 0은 무제한.
[ sample_limit: <int> | default = 0 ]
# 샘플당 수락될 라벨 수 제한. 메트릭 relabeling 후 어떤 샘플에도
# 이 숫자보다 많은 라벨이 있으면 전체 스크랩이 실패로 처리됨. 0은 무제한.
[ label_limit: <int> | default = 0 ]
# 각 개별 라벨 이름의 길이(바이트) 제한. 스크랩에서 어떤 라벨 이름이
# 메트릭 relabeling 후 이 숫자보다 길면 전체 스크랩이 실패로 처리됨.
# 라벨 이름은 UTF-8로 인코딩되며 문자는 최대 4바이트를 차지할 수 있음. 0은 무제한.
[ label_name_length_limit: <int> | default = 0 ]
# 각 개별 라벨 값의 길이(바이트) 제한. 스크랩에서 어떤 라벨 값이
# 메트릭 relabeling 후 이 숫자보다 길면 전체 스크랩이 실패로 처리됨.
# 라벨 값은 UTF-8로 인코딩되며 0은 무제한.
[ label_value_length_limit: <int> | default = 0 ]
# 스크랩 구성당 수락될 고유 타깃 수 제한. 타깃 relabeling 후
# 이 숫자보다 많은 타깃이 있으면 Prometheus는 스크랩하지 않고 타깃을
# 실패로 표시함. 0은 무제한. 실험적 기능.
[ target_limit: <int> | default = 0 ]
# relabeling으로 버려진 타깃 중 메모리에 유지될 수의 스크랩 구성당 제한.
# 0은 무제한.
[ keep_dropped_targets: <int> | default = 0 ]
# 메트릭과 라벨 이름의 검증 스킴 지정. 전체 UTF-8 지원을 위해 비어 있거나
# "utf8", 문자/숫자/콜론/밑줄을 위해 "legacy".
[ metric_name_validation_scheme: <string> | default = "utf8" ]
# true면 타깃이 노출하는 네이티브 히스토그램이 스크랩 중 인식되어
# 그대로 수집됨. false면 히스토그램의 네이티브 부분은 무시되고
# 클래식 부분만 인식됨(명시적 클래식 버킷이 없으면 +Inf 버킷만 있는
# 클래식 히스토그램일 수 있음).
[ scrape_native_histograms: <boolean> | default = false ]
# 스크랩된 클래식 히스토그램을 커스텀 버킷을 가진 네이티브 히스토그램으로
# 변환할지 지정.
[ convert_classic_histograms_to_nhcb: <boolean> | default = false ]
# 히스토그램이 네이티브 부분으로도 노출되거나 커스텀 버킷을 가진
# 네이티브 히스토그램으로 변환되더라도, 그 클래식 부분을 추가로
# 스크랩할지 지정.
[ always_scrape_classic_histograms: <boolean> | default = false ]
# 활성화되면 Prometheus가 각 스크랩에 대해 추가 타임시리즈를 저장:
# scrape_timeout_seconds, scrape_sample_limit, scrape_body_size_bytes.
# 이 메트릭들은 타깃이 구성된 한도에 얼마나 가까운지 모니터링하는 데 도움.
# 이 옵션은 스크랩 구성별로 재정의할 수 있음.
[ extra_scrape_metrics: <boolean> | default = false ]
runtime:
# Go 가비지 컬렉터 GOGC 파라미터 구성
# 참조: https://tip.golang.org/doc/gc-guide#GOGC
# 이 숫자를 낮추면 CPU 사용이 늘어남.
[ gogc: <int> | default = 75 ]
# 규칙 파일은 glob 목록을 지정. 모든 일치하는 파일에서 규칙과 알림이 읽힘.
rule_files:
[ - <filepath_glob> ... ]
# 스크랩 구성 파일은 glob 목록을 지정. 모든 일치하는 파일에서 스크랩 구성이
# 읽혀 스크랩 구성 목록에 추가됨.
scrape_config_files:
[ - <filepath_glob> ... ]
# 스크랩 구성 목록.
scrape_configs:
[ - <scrape_config> ... ]
# Alerting은 Alertmanager와 관련된 설정을 지정.
alerting:
alert_relabel_configs:
[ - <relabel_config> ... ]
alertmanagers:
[ - <alertmanager_config> ... ]
scrape_config (스크랩 구성)
각 scrape_config는 타깃을 식별하고 매개변수화하는 방법을 지정해요. 여기에는 다음이 포함돼요.
job_name: 기본적으로 스크랩된 메트릭에 할당되는 잡 이름.scrape_interval: 이 잡에서 타깃을 스크랩하는 빈도(전역에서 상속).scrape_timeout: 스크랩별 타임아웃. 스크랩 간격보다 클 수 없음.scrape_protocols: 스크랩 중 클라이언트와 협상할 프로토콜 목록.fallback_scrape_protocol: 스크랩이 빈/파싱 불가능/유효하지 않은 Content-Type을 반환할 때 사용할 폴백 프로토콜.metrics_path: 타깃에서 메트릭을 가져올 HTTP 리소스 경로(기본/metrics).honor_labels: 스크랩된 데이터에 이미 있는 라벨과 Prometheus가 서버 측에서 붙이는 라벨("job", "instance", 수동 타깃 라벨, 서비스 디스커버리 라벨) 사이의 충돌을 어떻게 처리할지 제어.true면 스크랩 데이터의 라벨 값을 유지하고,false면 충돌 라벨을exported_로 이름 바꿔 붙임(예:exported_instance). 페더레이션과 Pushgateway 스크랩에 유용.honor_timestamps: 스크랩 데이터의 타임스탬프를 존중할지 제어.track_timestamps_staleness: 명시적 타임스탬프가 있는 메트릭의 staleness 추적을 제어.scheme: 요청에 사용할 프로토콜 스킴(http/https).params: 선택적 HTTP URL 파라미터.enable_compression:false면 Prometheus가 스크랩 타깃에 압축되지 않은 응답을 요청.scrape_failure_log_file: 스크랩 실패가 기록되는 파일.http_config: basic auth, 인증, 프록시, TLS, 커스텀 HTTP 헤더 등 HTTP 클라이언트 설정.sample_limit,label_limit,label_name_length_limit,label_value_length_limit,body_size_limit,target_limit,keep_dropped_targets: 각종 스크랩 제한.service discovery mechanisms:azure_sd_configs,consul_sd_configs,dns_sd_configs,ec2_sd_configs,file_sd_configs,gce_sd_configs,http_sd_configs,kubernetes_sd_configs,static_configs등 수많은 서비스 디스커버리 구성.relabel_configs,metric_relabel_configs: 타깃 라벨 재작성 스크립트.static_configs: 정적으로 지정된 타깃 목록.
alerting
alerting 섹션은 Alertmanager와 관련된 설정을 지정해요. alert_relabel_configs는 Alertmanager로 보내기 전에 알림에 적용되는 relabel링이고, alertmanagers는 Alertmanager 인스턴스를 구성하는데 static_configs 또는 서비스 디스커버리로 지정하며 TLS, basic auth, api_version 같은 설정을 가져요.
remote_write / remote_read (원격 쓰기 / 원격 읽기)
원격 저장소와의 통신을 구성해요.
remote_write: 수집된 샘플을 원격 저장소로 보내는 구성.url(원격 엔드포인트),write_relabel_configs(전송 전 샘플 재작성),remote_timeout,queue_config(capacity, max_shards, min_shards, max_samples_per_send, batch_send_deadline, min_backoff, max_backoff),tls_config,basic_auth/authorization/oauth2,send_exemplars,send_native_histograms같은 옵션을 포함.remote_read: 원격 저장소에서 시리즈를 읽어 쿼리에 통합하는 구성.url,remote_timeout,read_recent,required_matchers,tls_config같은 옵션.
storage (TSDB)
TSDB 저장소와 관련된 실행 시 재로드 가능한 설정. storage.tsdb 아래에 보존 기간(retention.time), 보존 크기(retention.size), lockfile_allow_relative, chunk_encoding.floats(xor/xor2) 등이 있어요. 이전에는 플래그였던 보존 설정이 이제 구성 파일에서 관리돼요.
exemplars
exemplars 섹션은 exemplar 저장의 원형 버퍼 크기를 exemplar 수로 제어해요(max_exemplars).
otlp / tracing / 기타
otlp: OTLP 수신기 관련 설정. 수집된 메트릭에 대한 설정. 가이드는 여기에서.tracing: OpenTelemetry로 트레이스 내보내기 구성(endpoint,sampling_fraction등).feature flags:enable_feature필드로 기능 플래그를 활성화할 수 있어요.
더 알아보기 (Learn more)
- 커맨드라인 — 서버 실행 플래그
- 알림 규칙 (Alerting rules) — 알림 규칙 정의
- 기록 규칙 (Recording rules) — 기록 규칙 정의
- 마이그레이션 (Migration) — 2.x에서 3.x로의 구성 변경
- 원격 쓰기 튜닝 — remote_write 옵션 설명