Prometheus 메트릭 개발 가이드라인
라이브러리에 추가하기
우리는 Prometheus를 지원하는 공통 시스템 서비스마다 가장 중요한 2-4개의 메트릭을 지원하기 위해 노력합니다. 라이브러리에 추가되지 않은 특정 익스포터에 대한 지원이 필요하다면, 여기의 common_metrics.yml
파일에 추가할 수 있습니다.
쿼리 식별자
새로운 메트릭을 추가할 때 요구되는 것은 변경된 후 메트릭을 업데이트하는 데 사용되는 고유 식별자를 가진 개별 쿼리를 만드는 것입니다:
- 그룹: 응답 메트릭 (NGINX Ingress)
메트릭:
- 제목: "처리량"
y_축:
이름: "초당 요청"
형식: "숫자"
정밀도: 2
쿼리:
- id: response_metrics_nginx_ingress_throughput_status_code
query_range: 'sum(rate(nginx_upstream_responses_total{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) by (status_code)'
단위: req / sec
레이블: 상태 코드
기존 메트릭 업데이트
새로운 공통 메트릭을 추가하거나 기존 메트릭을 변경한 후에는 가져온 스크립트를 다시 실행하여 모든 기존 메트릭을 쿼리 및 업데이트해야 합니다.
또는, 데이터베이스 마이그레이션을 생성할 수 있습니다:
class ImportCommonMetrics < Gitlab::Database::Migration[2.1]
def up
::Gitlab::DatabaseImporters::CommonMetrics::Importer.new.execute
end
def down
# 아무 작업도 수행하지 않음
end
end
쿼리 메트릭 (id:
로 식별되는)이 제거된 경우, 기본적으로 데이터베이스에서 제거되지 않습니다.
제거된 메트릭에 대해 어떻게 처리할지 결정하는 추가 데이터베이스 마이그레이션을 추가할 수 있습니다.
예를 들어: 종속 데이터를 다른 메트릭으로 마이그레이션하는 것에 관심이 있을 수 있습니다.
GitLab Prometheus 메트릭
GitLab은 자체 모니터링을 위한 Prometheus 메트릭을 제공합니다.
새로운 메트릭 추가
이 섹션에서는 자체 모니터링을 위한 새로운 메트릭을 추가하는 방법을 설명합니다 (예시).
-
메트릭 유형을 선택합니다:
Gitlab::Metrics.counter
Gitlab::Metrics.gauge
Gitlab::Metrics.histogram
Gitlab::Metrics.summary
- 메트릭에 적절한 이름을 선택합니다. Prometheus 메트릭 이름에 대한 지침을 참조하세요.
- GitLab Prometheus 메트릭 목록을 업데이트합니다.
- 메트릭에 추가할 레이블을 신중하게 선택하세요. 프로젝트 경로 또는 프로젝트 ID와 같이 고카디널리티(고카디널리티를 갖는 값은 각 레이블 집합이
/metrics
엔드포인트에 새 항목으로 노출되는 사실 때문에)를 갖는 값은 우리 서비스 가용성에 영향을 미칠 수 있기 때문에 강력히 권장되지 않습니다. 예를 들어, 10개의 버킷과 100개의 값이 있는 레이블이 있는 히스토그램은 익스포트 엔드포인트에 1000개의 항목을 생성합니다. - 새로운 메트릭을 기록하는 관련 페이지 또는 코드를 트리거합니다.
- 새 메트릭이
/-/metrics
에 나타나는지 확인합니다.
특정 컨텍스트에 바운드되지 않은 메트릭(request
, process
, machine
, namespace
등)에 대한 메트릭은 cron을 기반으로 한 Sidekiq 작업에서 생성합니다:
- 지오 관련 메트릭의 경우,
Geo::MetricsUpdateService
를 확인합니다. - 다른 “전역” / 인스턴스 전체 메트릭의 경우,
Metrics::GlobalMetricsUpdateService
를 확인합니다.
하나 이상의 Sidekiq 인스턴스를 갖는 설치에서 Sidekiq에서 데이터를 익스포트할 때, 항상 동일한 익스포터가 쿼리될 것이라는 보장이 없습니다.
issue 406583에서 더 많은 내용과 주의사항을 확인할 수 있으며, push-gateway를 사용한 가능한 솔루션에 대해 논의합니다.