웹 익스포터 (전용 메트릭 서버)

Tier: Free, Premium, Ultimate Offering: Self-managed

Prometheus를 사용하여 GitLab을 모니터링할 때, GitLab은 다양한 수집기를 실행하여 사용, 부하 및 성능과 관련된 데이터를 샘플링합니다. 그런 다음 GitLab은 하나 이상의 Prometheus 익스포터를 실행하여 이 데이터를 Prometheus 스크레이퍼가 이해할 수 있는 형식으로 제공할 수 있습니다. Prometheus 익스포터는 메트릭 데이터를 웹 서버로 직렬화하여 Prometheus 스크레이퍼가 이해할 수 있는 형식으로 만드는 HTTP 서버입니다.

note
이 페이지는 웹 애플리케이션 메트릭에 관한 것입니다. 백그라운드 작업 메트릭을 익스포트하려면 Sidekiq 메트릭 서버를 구성하는 방법을 알아보세요.

웹 애플리케이션 메트릭을 익스포트할 수 있는 두 가지 메커니즘을 제공합니다.

  • 메인 Rails 애플리케이션을 통해. 이는 우리가 사용하는 애플리케이션 서버인 Puma가 자체 /-/metrics 엔드포인트를 통해 메트릭 데이터를 제공하는 것을 의미합니다. 이것은 기본값이며, 수집된 메트릭의 양이 적은 소규모 GitLab 설치에 권장됩니다.
  • 전용 메트릭 서버를 통해. 이 서버를 활성화하면 Puma가 메트릭을 제공하는 유일한 프로세스를 추가로 실행합니다. 이 접근 방식은 매우 큰 GitLab 설치에 대해 더 나은 오류 격리 및 성능을 제공하지만 추가적인 메모리 사용량을 동반합니다. 이 접근 방식은 높은 성능과 가용성을 원하는 중대형 GitLab 설치에 권장됩니다.

전용 서버와 Rails /-/metrics 엔드포인트는 동일한 데이터를 제공하므로 기능적으로 동등하며 성능 특성만 다를 뿐입니다.

전용 서버를 활성화하려면:

  1. Prometheus를 활성화합니다.
  2. /etc/gitlab/gitlab.rb를 편집하여 다음 라인을 추가하거나 찾아서 주석 처리합니다. puma['exporter_enabled']true로 설정되었는지 확인하세요.

    puma['exporter_enabled'] = true
    puma['exporter_address'] = "127.0.0.1"
    puma['exporter_port'] = 8083
    
  3. GitLab 번들 Prometheus를 사용하는 경우, 해당 scrape_configlocalhost:8083/metrics를 가리키도록 확인합니다. 스크레이퍼 대상을 구성하는 방법에 대해서는 사용자 정의 스크래이퍼 구성 추가 페이지를 참조하세요. 외부 Prometheus 설정을 사용하는 경우, 외부 Prometheus 서버 사용을 대신 참조하세요.
  4. 파일을 저장하고 GitLab을 다시 구성하여 변경 사항이 적용되도록 합니다.

이제 localhost:8083/metrics에서 메트릭을 제공하고 스크레이핑할 수 있습니다.

HTTPS 활성화

  • GitLab 15.2에서 소개되었습니다.

HTTPS를 통해 메트릭을 제공하려면 HTTP 대신에 익스포터 설정에서 TLS를 활성화합니다.

  1. /etc/gitlab/gitlab.rb를 편집하여 다음 라인을 추가하거나 찾아서 주석 처리합니다.

    puma['exporter_tls_enabled'] = true
    puma['exporter_tls_cert_path'] = "/path/to/certificate.pem"
    puma['exporter_tls_key_path'] = "/path/to/private-key.pem"
    
  2. 파일을 저장하고 GitLab을 다시 구성하여 변경 사항이 적용되도록 합니다.

TLS가 활성화되면 위에서 설명한 것과 동일한 portaddress가 사용됩니다. 메트릭 서버는 동시에 HTTP와 HTTPS를 제공할 수 없습니다.

문제 해결

Docker 컨테이너 공간 부족

Docker에서 GitLab을 실행하는 경우, 컨테이너 공간이 부족할 수 있습니다. 이는 웹 익스포터와 같이 공간 소비를 증가시키는 특정 기능을 활성화하는 경우 발생할 수 있습니다.

이 문제를 해결하려면 shm-size를 업데이트하세요.