서비스 핑 문제 해결

로컬에서 서비스 핑 설정 및 테스트

로컬에서 서비스 핑을 설정하려면 다음을 수행해야 합니다:

  1. 로컬 리포지터리 설정.
  2. 로컬 설정 테스트.
  3. 선택 사항. Prometheus 기반 서비스 핑 테스트.

로컬 리포지터리 설정

  1. GitLab을 클론하고 시작합니다.
  2. Versions Application을 클론하고 시작합니다. PostgreSQL 및 Redis 인스턴스를 시작하려면 docker-compose up을 실행해야 합니다.
  3. 기본 엔드포인트 대신 GitLab을 Versions Application 엔드포인트로 지정합니다:
    1. 로컬에서 service_ping/submit_service.rb을 열고 STAGING_BASE_URL을 수정합니다.
    2. 이를 로컬 Versions Application URL로 설정하세요: http://localhost:3000.

로컬 설정 테스트

  1. gitlab Rails 콘솔을 사용하여 매뉴얼으로 서비스 핑을 트리거합니다:

    GitlabServicePingWorker.new.perform('triggered_from_cron' => false)
    
  2. versions Rails 콘솔을 사용하여 서비스 핑이 성공적으로 수신되고 파싱되어 Versions 데이터베이스에 저장되었는지 확인하세요:

    UsageData.last
    

Prometheus 기반 서비스 핑 테스트

전송된 데이터에 Prometheus에서 조회된 메트릭이 포함되어 있는지 확인하고 검증하려면 다음을 수행해야 합니다:

  • 로컬에서 Prometheus 서버가 실행 중인지 확인하세요.
  • 해당 GitLab 컴포넌트가 Prometheus 서버로 메트릭을 익스포트하는지 확인하세요.

만약 Prometheus에서 오는 데이터를 테스트할 필요가 없다면 추가 조치가 필요하지 않습니다. Prometheus 서버가 실행되지 않은 상태에서 서비스 핑은 안정적으로 작동해야 합니다.

세 가지 종류의 컴포넌트가 Prometheus로 데이터를 익스포트하며, 서비스 핑에 포함됩니다:

  • node_exporter: 호스트 머신에서 노드 메트릭을 익스포트합니다.
  • gitlab-exporter: 다양한 GitLab 컴포넌트에서 프로세스 메트릭을 익스포트합니다.
  • Sidekiq 및 Rails 서버와 같은 다양한 GitLab 서비스가 자체 메트릭을 익스포트합니다.

Omnibus 컨테이너로 테스트

이것은 Prometheus 기반 서비스 핑을 테스트하기 위해 권장되는 방법입니다.

변경 사항을 확인하려면 CI/CD를 사용하여 코드 브랜치에서 새 Omnibus 이미지를 빌드하고, 이미지를 다운로드하고 로컬 컨테이너 인스턴스를 실행하세요:

  1. Merge Request에서 qa 단계를 선택한 후 e2e:package-and-test 작업을 트리거하세요. 이 작업은 omnibus-gitlab-mirror 프로젝트의 하위 파이프라인에서 Omnibus를 빌드합니다.
  2. 하위 파이프라인에서 gitlab-docker 작업이 완료될 때까지 기다립니다.
  3. 작업 로그를 열고 버전을 포함한 전체 컨테이너 이름을 찾습니다. 다음 형식을 사용합니다: registry.gitlab.com/gitlab-org/build/omnibus-gitlab-mirror/gitlab-ee:<VERSION>.
  4. 로컬 환경에서 GitLab Docker 레지스트리에 로그인되어 있는지 확인하세요. 이에 대한 지침은 GitLab 컨테이너 레지스트리에 인증에서 확인할 수 있습니다.
  5. 로그인한 후 새 이미지를 다운로드하려면 docker pull registry.gitlab.com/gitlab-org/build/omnibus-gitlab-mirror/gitlab-ee:<VERSION>을 사용하세요.
  6. Docker에서 Omnibus GitLab 컨테이너를 실행하는 방법 및 작업에 대한 자세한 내용은 GitLab Docker 이미지 문서를 참조하세요.

GitLab 개발 툴킷으로 테스트

이것은 실제 GitLab 배포를 흉내 내는 데 일부 어려움을 겪을 수 있기 때문에 권장되지 않는 방법입니다.

GDK는 Prometheus 서버나 node_exporter를 다른 GitLab 컴포넌트와 함께 실행하도록 설정되어 있지 않습니다. 이를 원한다면, Prometheus로 GDK 모니터링을 참고하세요.

GCK은 Prometheus 기반 서비스 핑을 테스트하는 데 한정적인 지원을 제공합니다. 기본적으로 몇 가지 컴포넌트를 스크래핑하는 완전히 구성된 Prometheus 서비스가 함께 제공됩니다. 그러나 다음과 같은 제한 사항이 있습니다:

  • gitlab-exporter 인스턴스가 실행되지 않으며, 따라서 Gitaly와 같은 여러 process_* 메트릭이 누락될 수 있습니다.
  • node_exporter가 실행되지만 docker-compose 서비스는 호스트를 흉내내므로 일반적으로 다른 실행 중인 서비스와 관련이 없는 것으로 보고됩니다. 이는 node_exporter가 어떤 노드에서도 항상 프로세스로 실행되는 프로덕션 설정과는 다르기 때문에 발생하는 문제입니다. 따라서 Service Ping에서는 모든 노드 데이터가 서비스를 실행하는 어떤 호스트에도 연결되지 않는 것으로 보입니다. 이 문제를 완화하기 위해 GCK의 node_exporter는 임의로 web 서비스에 “할당”되었으며, 그 결과 node_* 메트릭은 해당 서비스에만 표시됩니다.

서비스 핑 생성

Rails 콘솔에서 캐시된 서비스 핑 생성 또는 가져오기

rails console의 다음 방법을 사용하세요.

Gitlab::Usage::ServicePingReport.for(output: :all_metrics_values, cached: true)

새로운 서비스 핑 생성

rails console의 다음 방법을 사용하세요.

이 방법은 Admin Area에 표시된 캐시된 서비스 핑을 새롭게 갱신합니다.

Gitlab::Usage::ServicePingReport.for(output: :all_metrics_values)

오늘의 사용 데이터를 포함하여 새로운 서비스 핑 생성

rails console의 다음 방법을 사용하세요.

require_relative 'spec/support/helpers/service_ping_helpers.rb'

ServicePingHelpers.get_current_service_ping_payload

# 특정 메트릭의 값을 얻으려면 메트릭의 key_path를 제공하세요:
ServicePingHelpers.get_current_usage_metric_value('counts.count_total_render_duo_pro_lead_page')

생성 및 출력

JSON 형식으로 서비스 핑 데이터를 생성합니다.

gitlab-rake gitlab:usage_data:generate

YAML 형식으로 서비스 핑 데이터를 생성합니다:

gitlab-rake gitlab:usage_data:dump_sql_in_yaml

생성 및 전송

conversational_development_index_metrics에 저장된 메트릭을 출력합니다.

gitlab-rake gitlab:usage_data:generate_and_send