서비스 핑 문제 해결
로컬에서 서비스 핑 설정 및 테스트
로컬에서 서비스 핑을 설정하려면 다음을 수행해야 합니다:
- 로컬 리포지터리 설정.
- 로컬 설정 테스트.
- 선택 사항. Prometheus 기반 서비스 핑 테스트.
로컬 리포지터리 설정
- GitLab을 클론하고 시작합니다.
-
Versions Application을 클론하고 시작합니다.
PostgreSQL 및 Redis 인스턴스를 시작하려면
docker-compose up
을 실행해야 합니다. - 기본 엔드포인트 대신 GitLab을 Versions Application 엔드포인트로 지정합니다:
- 로컬에서 service_ping/submit_service.rb을 열고
STAGING_BASE_URL
을 수정합니다. - 이를 로컬 Versions Application URL로 설정하세요:
http://localhost:3000
.
- 로컬에서 service_ping/submit_service.rb을 열고
로컬 설정 테스트
-
gitlab
Rails 콘솔을 사용하여 매뉴얼으로 서비스 핑을 트리거합니다:GitlabServicePingWorker.new.perform('triggered_from_cron' => false)
-
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 이미지를 빌드하고, 이미지를 다운로드하고 로컬 컨테이너 인스턴스를 실행하세요:
- Merge Request에서
qa
단계를 선택한 후e2e:package-and-test
작업을 트리거하세요. 이 작업은 omnibus-gitlab-mirror 프로젝트의 하위 파이프라인에서 Omnibus를 빌드합니다. - 하위 파이프라인에서
gitlab-docker
작업이 완료될 때까지 기다립니다. - 작업 로그를 열고 버전을 포함한 전체 컨테이너 이름을 찾습니다. 다음 형식을 사용합니다:
registry.gitlab.com/gitlab-org/build/omnibus-gitlab-mirror/gitlab-ee:<VERSION>
. - 로컬 환경에서 GitLab Docker 레지스트리에 로그인되어 있는지 확인하세요. 이에 대한 지침은 GitLab 컨테이너 레지스트리에 인증에서 확인할 수 있습니다.
- 로그인한 후 새 이미지를 다운로드하려면
docker pull registry.gitlab.com/gitlab-org/build/omnibus-gitlab-mirror/gitlab-ee:<VERSION>
을 사용하세요. - 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