서비스 핑 문제 해결

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

로컬에서 서비스 핑을 설정하려면 다음과 같이 해야합니다.

  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 레일즈 콘솔을 사용하여 서비스 핑을 수동으로 트리거합니다:

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

    UsageData.last
    

Prometheus 기반의 서비스 핑 테스트

제출된 데이터에 메트릭이 포함되어 있고 Prometheus에서 쿼리됨 검사하고 확인하려면 다음을 수행해야합니다:

  • 로컬에서 Prometheus 서버가 실행 중인지 확인합니다.
  • 해당 GitLab 구성 요소가 Prometheus 서버로 메트릭을 내보내도록합니다.

Prometheus로부터 데이터를 테스트 할 필요가 없는 경우 추가 조치가 필요하지 않습니다. Prometheus 서버가 실행 중이지 않을 때 Service Ping은 우아하게 저하되어야합니다.

세 종류의 구성 요소가 Prometheus로 데이터를 내보내어 Service Ping에 포함될 수 있습니다.

  • node_exporter: 호스트 머신에서 노드 메트릭을 내보냅니다.
  • gitlab-exporter: 다양한 GitLab 구성 요소에서 프로세스 메트릭을 내보냅니다.
  • 기타 다양한 GitLab 서비스(Sidekiq 및 Rails 서버 등)는 고유한 메트릭을 내보냅니다.

Omnibus 컨테이너로 테스트

이것은 Prometheus 기반의 서비스 핑을 테스트하는 권장 접근 방식입니다.

귀하의 변경 사항을 확인하기 위해 CI/CD를 사용하여 코드 브랜치에서 새 Omnibus 이미지를 빌드 한 후 이미지를 다운로드하고 로컬 컨테이너 인스턴스를 실행합니다:

  1. 병합 요청에서 qa 단계를 선택하여 e2e:test-on-omnibus 작업을 트리거하세요. 이 작업은 Omnibus에서의 하향식 파이프라인에서 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 컨테이너를 다운로드하여 실행하는 방법 및 Omnibus GitLab 컨테이너를 사용하는 방법에 대한 자세한 내용은 GitLab Docker 이미지 설명서를 참조하세요.

GitLab 개발 툴킷으로 테스트

이것은 실제 GitLab 배포를 에뮬레이션할 때 일부 어려움을 가지고 있는 접근 방식으로 권장되지 않습니다.

GDK(https://gitlab.com/gitlab-org/gitlab-development-kit)는 다른 GitLab 구성 요소와 함께 Prometheus 서버 또는 node_exporter를 실행하도록 설정되어 있지 않습니다. 만약 그렇게 하고 싶다면 Prometheus를 통한 GDK 모니터링을 참조하세요.

GCK(https://gitlab.com/gitlab-org/gitlab-compose-kit)은 Prometheus 기반의 서비스 핑을 테스트하는 데 제한된 지원을 제공합니다. 기본적으로 일부 구성 요소를 스크래핑하도록 구성된 완전히 구성된 Prometheus 서비스가 함께 제공됩니다. 그러나 다음과 같은 제한 사항이 있습니다:

  • gitlab-exporter 인스턴스를 실행하지 않으므로 Gitaly와 같은 여러 process_* 메트릭이 누락 될 수 있습니다.
  • node_exporter를 실행하긴하지만 docker-compose 서비스는 호스트를 흉내내기 때문에 일반적으로 다른 실행 중인 서비스와 관련이없다는 것을 나타냽니다. 이것은 프로덕션 설정에서 노드 메트릭이 보고되는 방식이 아니며 node_exporter가 어떤 노드에서든 다른 GitLab 구성 요소와 함께 처리될 때 항상 프로세스로 실행된다. 서비스 핑에 대해, 결과적으로 노드 데이터 중에는 실행 중인 서비스와 연관되지 않는 것으로 보입니다. 따라서 이 문제를 완화시키기 위해 GCK의 node_exporter가 임의로 web 서비스에 “할당”되어 모든 서비스 중에 node_* 메트릭만 서비스 핑에 표시됩니다.

서비스 핑 생성

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

다음 방법을 사용하여 레일즈 콘솔에서 메소드를 사용합니다.

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

새로운 서비스 핑 생성

다음 방법을 사용하여 레일즈 콘솔에서 메소드를 사용합니다.

이것은 관리자 영역에 표시된 캐시된 서비스 핑을 새로 고치기도합니다.

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

# 단일 메트릭의 값을 얻으려면 다음과 같이 메트릭의 키 경로를 제공합니다:
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