서비스 핑 문제 해결

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

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

  1. 로컬 저장소 설정.
  2. 로컬 설정 테스트.
  3. 선택 사항. 프로메테우스 기반 서비스 핑 테스트.

로컬 저장소 설정

  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
    

프로메테우스 기반 서비스 핑 테스트

제출된 데이터에 프로메테우스에서 쿼리한 메트릭이 포함되어 있는지 확인하려면 다음을 수행해야 합니다:

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

프로메테우스에서 나오는 데이터를 테스트할 필요가 없다면, 추가 조치가 필요하지 않습니다. 프로메테우스 서버가 실행되지 않을 경우 서비스 핑이 원활하게 저하됩니다.

세 가지 종류의 구성 요소가 프로메테우스에 데이터를 내보낼 수 있으며, 서비스 핑에 포함됩니다:

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

Omnibus 컨테이너로 테스트

프로메테우스 기반 서비스 핑을 테스트하기 위해 이 방법을 권장합니다.

변경 사항을 확인하려면 코드 브랜치에서 새 Omnibus 이미지를 빌드하여 CI/CD를 사용하여 다운로드한 이미지를 실행하는 방법을 사용하세요:

  1. 병합 요청에서 qa 단계를 선택한 다음 e2e:package-and-test 작업을 트리거하세요. 이 작업은 체인화된 파이프라인 내에서 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는 다른 GitLab 구성 요소와 함께 프로메테우스 서버나 node_exporter를 실행하도록 설정되어 있지 않습니다. 만약 그렇게 하려면, Prometheus로 GDK 모니터링을 참고하시기 바랍니다.

GCK은 프로메테우스 기반 서비스 핑을 테스트하기 위한 제한적인 지원을 제공합니다. 기본적으로 일부 구성 요소에 대한 메트릭 수집이 설정된 완전 구성된 프로메테우스 서비스를 갖추고 있습니다. 그러나 다음과 같은 제한 사항이 있습니다:

  • gitlab-exporter 인스턴스가 실행되지 않으므로 Gitaly와 같은 여러 서비스의 process_* 메트릭이 누락될 수 있습니다.
  • node_exporter를 실행하지만 docker-compose 서비스는 호스트를 흉내냄으로써 일반적으로 다른 실행 중인 서비스와 관련이 없는 것으로 보고합니다. 이는 프로덕션 설정에서 호스트와 함께 다른 GitLab 구성요소를 실행하는 프로세스로 항상 실행되기 때문에 node_exporter가 어떤 노드 데이터를 내보내야 할지 항상 모든 제공되는 서비스와 관련이 있는 것으로 나타납니다. 따라서 서비스 핑에 있어서 호스트 데이터는 서비스가 다른 호스트에서 실행되는 것처럼 보이기 때문에 알려진 문제를 완화하기 위해 GCK의 node_exporter는 임의로 web 서비스에 “할당”되었으며, 이로 인해 node_* 메트릭의 경우 이 서비스만 서비스 핑에 나타납니다.

문제 해결

설정 파일을 사용하여 서비스 핑을 비활성화할 수 없음

GitLab 구성 파일을 사용하여 서비스 핑을 비활성화하는 방법은 GitLab 버전 9.3.0에서 13.12.3까지 작동하지 않습니다. 비활성화하려면 관리자 페이지를 사용하여 GitLab UI에서 해야 합니다. 자세한 정보는 이 이슈를 참조하세요.

GitLab 기능 및 응용 프로그램 설정은 네트워크 계층의 제한을 재정의하거나 우회할 수 없습니다. 방화벽에서 서비스 핑이 차단된 경우에는 이 버그에 영향을 받지 않습니다.

영향 여부 확인

관리자 페이지를 사용하거나 GitLab 인스턴스의 구성 파일을 확인하여 이 버그에 영향을 받았는지 확인할 수 있습니다.

  • 관리자 페이지 사용:

    1. 왼쪽 사이드바에서 가장 아래에서 관리자 영역(Admin Area)을 선택합니다.
    2. 왼쪽 사이드바에서 설정 > 지표 및 프로파일링(Profiling)을 선택합니다.
    3. 사용 통계(Usage statistics)를 확장합니다.
    4. 서비스 핑을 비활성화하려면 확인란을 선택하거나 선택 해제할 수 있습니까?

      • : GitLab 인스턴스에는 이 버그가 영향을주지 않습니다.
      • 확인란을 선택하거나 선택 해제할 수 없는 경우, 이 버그에 영향을 받습니다. 이 문제를 해결하는 방법을 참조하세요.
  • GitLab 인스턴스 구성 파일 확인:

    이 버그에 영향을 받았는지 확인하려면 인스턴스 구성을 확인하세요. 서비스 핑을 비활성화할 수있는 구성 파일은 설치 및 배포 방법에 따라 다르지만 일반적으로 다음 중 하나입니다:

    • Linux 패키지 설치 및 Docker의 경우 /etc/gitlab/gitlab.rb
    • GitLab Helm 및 원격 원래 Kubernetes 배포의 경우 charts.yaml
    • 소스로 설치한 경우 gitlab/config.yml입니다.

    서비스 핑이 비활성화되었는지 나타내는 문자열을 확인하기 위해 해당 구성 파일을 검사할 수 있습니다. grep을 사용할 수 있습니다:

    # Linux 패키지
    grep "usage_ping_enabled'\] = false" /etc/gitlab/gitlab.rb
    
    # Kubernetes 차트
    grep "enableUsagePing: false" values.yaml
    
    # 소스에서
    grep "usage_ping_enabled'\] = false" gitlab/config.yml
    

    관련 명령을 실행한 후에 출력을 볼 수 있다면 GitLab 인스턴스에 영향을 받을 수 있습니다. 그렇지 않으면 영향을 받지 않습니다.

“서비스 핑을 비활성화할 수 없음” 버그 해결법

이 버그를 해결하기 위해 두 가지 옵션이 있습니다.

  • 이 버그를 수정하려면 GitLab 13.12.4 이상으로 업데이트하세요.
  • GitLab 13.12.4 이상으로 업데이트할 수 없는 경우 구성 파일에서 서비스 핑을 활성화한 다음 UI에서 서비스 핑을 비활성화합니다. 예를 들어, Linux 패키지를 사용하는 경우:

    1. /etc/gitlab/gitlab.rb 파일을 편집합니다:

      gitlab_rails['usage_ping_enabled'] = true
      
    2. GitLab을 다시 구성합니다:

      sudo gitlab-ctl reconfigure
      
    3. 왼쪽 사이드바에서 가장 아래에서 관리자 영역(Admin Area)을 선택합니다.
    4. 왼쪽 사이드바에서 설정 > 지표 및 프로파일링(Profiling)을 선택합니다.
    5. 사용 통계(Usage statistics)를 확장합니다.
    6. 서비스 핑 활성화 확인란을 지웁니다.
    7. 변경 사항 저장을 선택합니다.

서비스 핑 생성

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

다음 메서드를 레일즈 콘솔에서 사용하세요.

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

새로운 서비스 핑 생성

다음 메서드를 레일즈 콘솔에서 사용하세요.

이는 관리자 영역에 표시된 캐시된 서비스 핑을 새롭게 갱신합니다.

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

생성 및 출력

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