GitLab Runner 사용량 모니터링

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed

Prometheus를 사용하여 GitLab Runner를 모니터링할 수 있습니다.

내장된 프로메테우스 지표

  • 내장된 HTTP 통계 서버와 프로메테우스 지표가 GitLab Runner 1.8.0에서 소개되었습니다.

GitLab Runner는 고유의 프로메테우스 지표로 계측되어 /metrics 경로에 있는 내장된 HTTP 서버를 통해 노출될 수 있습니다. 이 서버는 활성화되면 프로메테우스 모니터링 시스템에 의해 수집되거나 다른 HTTP 클라이언트로 액세스할 수 있습니다.

노출된 정보에는 다음이 포함됩니다.

  • Runner 비즈니스 로직 지표(예: 현재 실행 중인 작업 수)
  • Go 특정 프로세스 지표(가비지 컬렉션 통계, 고루틴, 메모리 통계 등)
  • 일반 프로세스 지표(메모리 사용, CPU 사용, 파일 디스크립터 사용 등)
  • 빌드 버전 정보

지표 형식은 프로메테우스의 노출 형식 명세서에 문서화되어 있습니다.

이러한 지표는 운영자가 Runner를 모니터링하고 이해하는 방법으로 의도되었습니다. 예를 들어, Runner 호스트의 부하 평균 증가가 처리된 작업 증가와 관련이 있는지 여부를 알아보고 싶을 수 있습니다. 또는 여러 대의 컴퓨터 클러스터를 실행 중이며 인프라에 변경을 가할 수 있도록 빌드 추세를 추적하고 싶을 수도 있습니다.

프로메테우스에 대해 더 알아보기

이 HTTP 엔드포인트를 스크래핑하고 수집된 지표를 활용하는 프로메테우스 서버를 설정하는 방법에 대해 알아보려면 프로메테우스의 시작하기 가이드를 참조하세요. 또한 Prometheus의 구성 섹션에서 프로메테우스를 구성하는 방법에 대해 더 많은 세부 정보를 확인할 수 있으며 알림 규칙 섹션과 Alertmanager 설정에 대한 섹션도 확인하세요.

사용 가능한 지표

구성 및 활성화된 지표 엔드포인트를 curl한 후 사용 가능한 지표의 전체 목록을 찾을 수 있습니다. 예를 들어, 리스닝 포트 9252로 구성된 로컬 Runner의 경우 다음과 같습니다.

$ curl -s "http://localhost:9252/metrics" | grep -E "# HELP"

# HELP gitlab_runner_api_request_statuses_total The total number of api requests, partitioned by runner, endpoint and status.
# HELP gitlab_runner_autoscaling_machine_creation_duration_seconds Histogram of machine creation time.
# HELP gitlab_runner_autoscaling_machine_states The current number of machines per state in this provider.
# HELP gitlab_runner_concurrent The current value of concurrent setting
# HELP gitlab_runner_errors_total The number of caught errors.
# HELP gitlab_runner_limit The current value of limit setting
# HELP gitlab_runner_request_concurrency The current number of concurrent requests for a new job
# HELP gitlab_runner_request_concurrency_exceeded_total Count of excess requests above the configured request_concurrency limit
# HELP gitlab_runner_version_info A metric with a constant '1' value labeled by different build stats fields.
...

사용 가능한 지표의 전체 목록을 보려면 Runner 모니터링을 참조하세요.

pprof HTTP 엔드포인트

  • pprof 통합은 GitLab Runner 1.9.0에서 소개되었습니다.

GitLab Runner 프로세스의 내부 상태에 대한 지표를 갖는 것은 유용하지만, 실시간으로 실행 프로세스 내부에서 무슨 일이 일어나고 있는지 확인하는 것이 좋을 때가 있는 것으로 밝혀졌습니다. 따라서 pprof HTTP 엔드포인트를 소개하였습니다.

pprof 엔드포인트는 /debug/pprof/ 경로에 있는 내장된 HTTP 서버를 통해 제공됩니다.

pprof 사용에 대해 더 알아보려면 문서를 참조하세요.

지표 HTTP 서버의 구성

참고: 지표 서버는 GitLab Runner 프로세스의 내부 상태에 대한 데이터를 노출하며 공개적으로 이용 가능해서는 안 됩니다!

지표 HTTP 서버는 다음과 같은 방법으로 구성할 수 있습니다.

  • config.toml 파일의 listen_address 전역 구성 옵션으로,
  • run 명령어의 --listen-address 명령행 옵션으로,
  • Helm Chart를 사용하는 Runner의 values.yaml에서 metricsservice 구성 옵션으로.

config.toml 파일에 주소를 추가하면 지표 HTTP 서버를 시작하려면 Runner 프로세스를 다시 시작해야 합니다.

이 두 경우 모두 옵션은 [host]:<port> 형식의 문자열을 허용하며,

  • host는 IP 주소나 호스트명이 될 수 있으며,
  • port는 유효한 TCP 포트나 심볼릭 서비스 이름(예: http)이 될 수 있습니다. 이미 프로메테우스에서 할당된 9252 포트를 사용하는 것을 권장합니다.

주소의 예시:

  • :9252 - 모든 인터페이스의 모든 IP에서 포트 9252로 수신 대기
  • localhost:9252 - 루프백 인터페이스에서만 포트 9252로 수신 대기
  • [2001:db8::1]:http - IPv6 주소 [2001:db8::1]에서 HTTP 포트 80으로 수신 대기

주의: 1024 아래의 포트에서 듣기 위해서는 - 적어도 Linux/Unix 시스템에서 - root/관리자 권한이 필요합니다.

선택한 host:port에 HTTP 서버가 인증 없이 열립니다. 지표 서버를 공개적으로 사용하고자 할 경우 방화벽을 사용하여 서버 액세스를 제한하거나 인증 및 액세스 제어 레이어를 추가하는 HTTP 프록시를 추가하는 것을 고려해야 합니다.