서비스 핑 문제 해결
로컬에서 서비스 핑 설정 및 테스트
로컬에서 서비스 핑을 설정하려면 다음을 수행해야 합니다.
로컬 리포지터리 설정
- GitLab을 복제하고 시작합니다.
-
버전 애플리케이션을 복제하고 시작합니다.
PostgreSQL 및 Redis 인스턴스를 시작하려면
docker-compose up
을 실행하세요. - 기본 엔드포인트 대신 GitLab을 버전 애플리케이션 엔드포인트로 지정합니다:
- 로컬에서 service_ping/submit_service.rb을 열고
STAGING_BASE_URL
을 수정하세요. - 로컬 버전 애플리케이션 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 컴포넌트에서 프로세스 메트릭을 내보냄. - 다른 여러 GitLab 서비스, 예를 들어 Sidekiq 및 Rails 서버, 이들은 자체 메트릭을 내보냄.
Omnibus 컨테이너로 테스트
이는 Prometheus 기반 서비스 핑을 테스트하는 권장 방법입니다.
변경 사항을 확인하려면 CI/CD를 사용하여 코드 브랜치에서 새 Omnibus 이미지를 빌드하고 이미지를 다운로드하여 로컬 컨테이너 인스턴스를 실행하세요:
- Merge Request에서
qa
단계를 선택한 후e2e:package-and-test
작업을 트리거하세요. 이 작업은 하위 파이프라인 내에서 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
을 실행할 수 없습니다. 이를 원할 경우, 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 인스턴스의 구성 파일을 확인하여 확인할 수 있습니다.
-
관리 영역을 사용하는 경우:
- 왼쪽 사이드바에서 아래쪽에 Admin Area를 선택합니다.
- 왼쪽 사이드바에서 Settings > Metrics and profiling을 선택합니다.
- Usage statistics를 확장합니다.
-
서비스 핑을 비활성화하려면 확인란을 선택하거나 선택 해제할 수 있습니까?
- 예라면, 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 인스턴스가 해당 버그의 영향을 받을 수 있습니다. 그렇지 않으면 인스턴스에 영향을 받지 않습니다.
- Linux 패키지 설치 및 Docker의 경우
“서비스 핑 비활성화할 수 없음” 버그 수정 방법
이 버그를 해결하려면 두 가지 옵션이 있습니다:
- 이 버그를 수정하려면 GitLab 13.12.4 이상으로 업데이트하세요.
-
GitLab 13.12.4 이상으로 업데이트할 수 없는 경우, 구성 파일에서 서비스 핑을 활성화한 다음 UI에서 서비스 핑을 비활성화합니다. 예를 들어, Linux 패키지를 사용하는 경우:
-
/etc/gitlab/gitlab.rb
파일을 편집합니다:gitlab_rails['usage_ping_enabled'] = true
-
GitLab을 다시 구성합니다:
sudo gitlab-ctl reconfigure
- 왼쪽 사이드바에서 아래쪽에 Admin Area를 선택합니다.
- 왼쪽 사이드바에서 Settings > Metrics and profiling을 선택합니다.
- Usage statistics를 확장합니다.
- Enable Service Ping 확인란을 지웁니다.
- 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