서비스 핑 문제 해결

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

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

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

로컬 리포지터리 설정

  1. GitLab을 복제하고 시작합니다.
  2. 버전 애플리케이션을 복제하고 시작합니다. PostgreSQL 및 Redis 인스턴스를 시작하려면 docker-compose up을 실행하세요.
  3. 기본 엔드포인트 대신 GitLab을 버전 애플리케이션 엔드포인트로 지정합니다:
    1. 로컬에서 service_ping/submit_service.rb을 열고 STAGING_BASE_URL을 수정하세요.
    2. 로컬 버전 애플리케이션 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 컴포넌트에서 프로세스 메트릭을 내보냄.
  • 다른 여러 GitLab 서비스, 예를 들어 Sidekiq 및 Rails 서버, 이들은 자체 메트릭을 내보냄.

Omnibus 컨테이너로 테스트

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

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

  1. Merge Request에서 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는 Prometheus 서버나 node_exporter을 실행할 수 없습니다. 이를 원할 경우, Prometheus로 GDK 모니터링을 참조하세요.

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

  • gitlab-exporter 인스턴스가 실행되지 않으므로 Gitaly와 같은 몇 가지 서비스의 process_* 메트릭이 누락될 수 있습니다.
  • node_exporter는 실행되지만, docker-compose 서비스는 호스트를 흉내내기 때문에 일반적으로 다른 실행중인 서비스와 연관되어 있지 않다고 보고합니다. 이는 프로덕션 환경에서 노드 데이터가 보고되는 방식이 아니며, node_exporter가 항상 특정 노드에서 다른 GitLab 컴포넌트와 함께 실행되는 프로세스로 실행되는 경우입니다. 이로 인해 서비스 핑에서 노드 데이터가 다른 서비스에 연결되지 않는 것처럼 보일 수 있습니다. 이 문제를 완화하기 위해 GCK의 node_exporter가 임의로 web 서비스에 “할당”되었으므로, 이 서비스만 독자적으로 node_* 메트릭이 서비스 핑에 표시됩니다.

문제 해결

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

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

GitLab의 기능과 응용 프로그램 설정은 네트워크 레이어의 제약사항을 무시하거나 우회할 수 없습니다. 따라서 방화벽으로 인해 서비스 핑이 차단된 경우에는 이 버그에 영향을 받지 않습니다.

영향 여부 확인

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

  • 관리 영역을 사용하는 경우:

    1. 왼쪽 사이드바에서 아래쪽에 Admin Area를 선택합니다.
    2. 왼쪽 사이드바에서 Settings > Metrics and profiling을 선택합니다.
    3. Usage statistics를 확장합니다.
    4. 서비스 핑을 비활성화하려면 확인란을 선택하거나 선택 해제할 수 있습니까?

      • 라면, GitLab 인스턴스는 해당 버그의 영향을 받지 않습니다.
      • 확인란을 선택하거나 선택 해제할 수 없다면, 해당 버그의 영향을 받은 것입니다. 이를 고치는 방법을 참조하십시오.
  • GitLab 인스턴스 구성 파일을 확인하는 경우:

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

    • Linux 패키지 설치 및 Docker의 경우 /etc/gitlab/gitlab.rb
    • GitLab Helm 및 클라우드 네이티브 Kubernetes 배포의 경우 charts.yaml
    • 직접 컴파일한 설치의 경우 gitlab.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. 왼쪽 사이드바에서 Settings > Metrics and profiling을 선택합니다.
    5. Usage statistics를 확장합니다.
    6. Enable Service Ping 확인란을 지웁니다.
    7. Save Changes를 선택합니다.

서비스 핑 생성

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

다음 방법을 Rails 콘솔에서 사용합니다.

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

새로운 서비스 핑 생성

다음 방법을 Rails 콘솔에서 사용합니다.

이는 관리 영역에 표시된 캐시된 서비스 핑을 새로 고칩니다.

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