InfoGrab DocsInfoGrab Docs

분산 추적 개발 가이드라인

요약

GitLab은 분산 추적(distributed tracing)을 위해 계측(instrumentation)되어 있습니다. 분산 요청 추적(distributed request tracing)이라고도 불리는 분산 추적은 애플리케이션, 특히 마이크로서비스 아키텍처로 구축된 애플리케이션을 프로파일링하고 모니터링하는 데 사용되는 방법입니다.

GitLab은 분산 추적(distributed tracing)을 위해 계측(instrumentation)되어 있습니다. GitLab의 분산 추적은 GitLab.com에서 대규모로 아직 테스트되지 않았기 때문에 현재 실험적인 것으로 간주됩니다.

Open Tracing에 따르면:

분산 요청 추적(distributed request tracing)이라고도 불리는 분산 추적은 애플리케이션, 특히 마이크로서비스 아키텍처로 구축된 애플리케이션을 프로파일링하고 모니터링하는 데 사용되는 방법입니다. 분산 추적은 장애가 발생하는 위치와 성능 저하의 원인을 정확히 파악하는 데 도움을 줍니다.

분산 추적은 특히 요청이 GitLab 애플리케이션의 다양한 구성 요소를 통과하는 생명 주기를 이해하는 데 유용합니다. 현재 Workhorse, Rails, Sidekiq, Gitaly가 추적 계측을 지원합니다.

분산 추적은 비활성화된 경우 오버헤드가 최소화되며, 활성화된 경우에도 오버헤드가 매우 작기 때문에 프로덕션 환경을 포함한 모든 환경에서 사용 가능합니다. 이러한 이유로 프로덕션 문제, 특히 성능 문제를 진단하는 데 유용하게 활용할 수 있습니다.

서비스별로 분산 추적 지원 수준이 다릅니다. 가장 일반적인 라이브러리를 위한 기본 제공(pre-built) 계측 외에도 애플리케이션 레이어에 커스텀 계측 코드를 추가해야 합니다.

서비스별 정보는 다음을 참조하세요:

상관 관계 ID를 사용한 분산 요청 조사#

GitLab 애플리케이션은 요청의 다양한 구성 요소 간에 상관 관계 ID(correlation ID)를 전달합니다. 상관 관계 ID는 단일 요청에 고유한 토큰으로, 서로 다른 GitLab 하위 시스템(예: Rails, Workhorse) 간의 단일 요청을 연관 짓는 데 사용됩니다. 상관 관계 ID는 로그 출력에 포함되기 때문에 엔지니어는 상관 관계 ID를 이용해 서로 다른 하위 시스템의 로그를 연관 짓고 시스템을 통한 요청의 엔드투엔드 경로를 더 잘 이해할 수 있습니다. 요청이 프로세스 경계를 넘을 때 상관 관계 ID가 나가는 요청에 주입됩니다. 이를 통해 각 다운스트림 하위 시스템으로 상관 관계 ID가 전파됩니다.

상관 관계 ID는 일반적으로 특정 웹 요청에 대한 응답으로 Rails 애플리케이션에서 생성됩니다. 일부 사용자 대면 시스템은 사용자 요청(예: SSH를 통한 Git push)에 대한 응답으로 상관 관계 ID를 생성하지 않습니다.

상관 관계 ID 작업을 위한 개발자 가이드라인#

새로운 시스템에 추적을 통합할 때 개발자는 상관 관계 ID에 대한 특정 가정을 피해야 합니다. 다음 가이드라인은 GitLab의 모든 하위 시스템에 적용됩니다:

  • 상관 관계 ID는 항상 선택 사항(optional)입니다.

추적이 아닌 기능이 업스트림 시스템의 상관 관계 ID 존재에 의존하게 해서는 안 됩니다.

  • 상관 관계 ID는 항상 자유 텍스트(free text)입니다.

상관 관계 ID는 컨텍스트(예: 사용자 이름 또는 IP 주소)를 전달하는 데 절대 사용해서는 안 됩니다.

  • 상관 관계 ID는 파싱하거나 다른 방식(예: 분할)으로 조작해서는 안 됩니다.

LabKit 라이브러리는 Go 프로그래밍 언어에서 GitLab 상관 관계 ID를 작업하기 위한 표준화된 인터페이스를 제공합니다. LabKit은 Go가 아닌 GitLab 하위 시스템에서 추적 및 상관 관계 ID를 작업하는 개발자를 위한 참조 구현으로 활용될 수 있습니다.

분산 추적 활성화#

GitLab은 분산 추적을 구성하기 위해 GITLAB_TRACING 환경 변수를 사용합니다. 동일한 구성이 모든 구성 요소(예: Workhorse, Rails 등)에 사용됩니다.

GITLAB_TRACING이 설정되지 않은 경우, 애플리케이션은 계측되지 않으며 오버헤드가 전혀 없습니다.

GITLAB_TRACING을 활성화하려면 URL과 유사한 형식의 유효한 "configuration-string" 값을 설정해야 합니다:

GITLAB_TRACING=opentracing://<driver>?<param_name>=<param_value>&<param_name_2>=<param_value_2>

이 예시에서는 다음과 같은 가상의 값을 사용합니다:

  • driver: Jaeger와 같은 드라이버.

  • param_name, param_value: 드라이버별 구성 값입니다. Jaeger의 구성 파라미터는 이 문서의 뒷부분에 문서화되어 있으며 URL 인코딩되어야 합니다. 여러 값은 URL처럼 & 문자로 구분해야 합니다.

GitLab Rails는 일반적인 유형의 작업에 대해 사전 구현된 계측을 제공하여 요청에 대한 상세한 뷰를 제공합니다. 그러나 상세한 정보에는 비용이 따릅니다. 결과 트레이스가 길어지고 처리하기 어려워져 더 큰 근본적인 문제를 파악하기 어렵게 만들 수 있습니다. 이러한 우려를 해소하기 위해 일부 계측은 기본적으로 비활성화되어 있습니다. 비활성화된 계측을 활성화하려면 다음 환경 변수를 설정하세요:

  • GITLAB_TRACING_TRACK_CACHES: 캐시 읽기, 쓰기, 삭제와 같은 캐시 작업 추적을 활성화합니다.

  • GITLAB_TRACING_TRACK_REDIS: Redis 작업 추적을 활성화합니다. 대부분의 Redis 작업은 캐싱을 위한 것입니다.

GitLab Development Kit에서 Jaeger 사용#

GitLab이 지원하는 첫 번째 추적 구현은 Jaeger이며, GitLab Development Kit은 기본적으로(out-of-the-box) Jaeger를 사용한 분산 추적을 지원합니다. GDK는 서비스에 추가하기 위한 GITLAB_TRACING 환경 변수를 자동으로 추가합니다.

gdk.yml 파일을 편집하고 다음 설정을 추가하여 Jaeger를 위한 GDK를 구성하세요:

tracer:
  build_tags: tracer_static tracer_static_jaeger
  jaeger:
    enabled: true
    listen_address: 127.0.0.1
    version: 1.66.0

gdk.yml 파일을 수정한 후 gdk reconfigure 명령을 실행하여 GDK를 재구성하세요. 이렇게 하면 GDK가 올바르게 구성되고 사용 준비가 됩니다.

위의 구성은 처음으로 Go로 작성된 서비스를 재빌드할 때 tracer_statictracer_static_jaeger 빌드 태그를 설정합니다. 이후에 변경 사항이 있으면 해당 빌드 태그로 다시 빌드해야 합니다. 다음 중 하나를 선택할 수 있습니다:

  • 기본 빌드 태그 세트에 해당 빌드 태그를 추가합니다.

  • 빌드 명령에 수동으로 추가합니다. 예를 들어, Gitaly는 기본적으로 빌드 태그 추가를 지원합니다. make all WITH_BUNDLED_GIT=YesPlease BUILD_TAGS="tracer_static tracer_static_jaeger"를 실행할 수 있습니다.

재구성 후 Jaeger 대시보드는 http://localhost:16686에서 사용할 수 있습니다. GDK 환경에서 추적에 접근하는 또 다른 방법은 performance-bar를 통하는 것입니다. 브라우저 창에서 p b를 입력하면 표시됩니다.

performance bar가 활성화되면 performance bar에서 Trace를 선택하여 Jaeger UI로 이동합니다.

Jaeger 검색 UI는 현재 요청의 Correlation-ID에 대한 쿼리를 반환합니다. 이 검색은 단일 트레이스 결과를 반환해야 합니다. 이 결과를 선택하면 계층적 타임라인에서 트레이스의 세부 정보가 표시됩니다.

[

](/19.1/development/img/distributed_tracing_jaeger_ui_v11_9.png)

GitLab Developer Kit 없이 Jaeger 사용#

분산 추적은 비 GDK 개발 환경뿐만 아니라 트러블슈팅을 위해 프로덕션 또는 스테이징 환경에서도 활성화할 수 있습니다. 현재 이 기능은 실험적이며 현재 프로덕션 환경에서는 지원되지 않습니다. 이 첫 번째 릴리즈에서는 개발 환경에서의 디버깅에만 사용하도록 의도되었습니다.

Jaeger 추적은 세 단계 프로세스를 통해 활성화할 수 있습니다:

1. Jaeger 시작#

Jaeger는 많은 구성 옵션을 가지고 있지만, 트레이스 저장에 메모리를 사용하는(따라서 비영속적인) "all-in-one" 모드로 시작하기 매우 쉽습니다. "all-in-one" 모드의 주요 장점은 사용 편의성입니다.

더 자세한 구성 옵션은 Jaeger 문서를 참조하세요.

Docker 사용#

Docker가 있다면 다음 명령을 사용하여 Docker를 통해 Jaeger all-in-one을 실행하는 것이 더 쉬운 접근 방법입니다:

$ docker run \
  --rm \
  -e COLLECTOR_ZIPKIN_HTTP_PORT=9411  \
  -p 5775:5775/udp \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 14268:14268 \
  -p 9411:9411 \
  jaegertracing/all-in-one:latest

Jaeger 프로세스 사용#

Docker 없이도 all-in-one 프로세스를 설정하기 쉽습니다.

  • 해당 플랫폼용 최신 Jaeger 릴리즈를 다운로드합니다.

  • 아카이브를 압축 해제하고 bin/all-in-one 프로세스를 실행합니다.

이렇게 하면 기본 수신 포트로 프로세스가 시작됩니다.

2. GITLAB_TRACING 환경 변수 구성#

Jaeger가 실행 중이면 적절한 구성 문자열로 GITLAB_TRACING 변수를 구성합니다.

모든 것이 동일한 호스트에서 실행 중이라면 다음 값을 사용하세요:

export GITLAB_TRACING="opentracing://jaeger?http_endpoint=http%3A%2F%2Flocalhost%3A14268%2Fapi%2Ftraces&sampler=const&sampler_param=1"

이 구성 문자열은 다음 옵션과 함께 Jaeger 드라이버 opentracing://jaeger를 사용합니다:

이름 설명
http_endpoint http://localhost:14268/api/traces http://localhost:14268/에서 실행 중인 HTTP 엔드포인트로 트레이스 정보를 보내도록 Jaeger를 구성합니다. 또는 upd_endpoint를 사용할 수 있습니다.
sampler const 상수 샘플러(켜짐 또는 꺼짐)를 사용하도록 Jaeger를 구성합니다.
sampler_param 1 모든 트레이스를 샘플링하도록 const 샘플러를 구성합니다. 0을 사용하면 트레이스가 샘플링되지 않습니다.

다른 파라미터 값도 가능합니다:

이름 예시 설명
udp_endpoint localhost:6831 기본값입니다. compact thrift 프로토콜을 사용하여 포트 6831의 UDP 리스너로 트레이스 정보를 보내도록 Jaeger를 구성합니다. 이 프로토콜을 사용할 때 Ruby용 Jaeger 클라이언트에서 일부 문제를 경험한 적이 있습니다.
sampler probabilistic 확률적 랜덤 샘플러를 사용하도록 Jaeger를 구성합니다. 샘플 비율은 sampler_param 값으로 구성됩니다.
sampler_param 0.01 트레이스의 1%를 무작위로 샘플링하도록 확률적 샘플러를 구성하는 데 0.01 비율을 사용합니다.
service_name api Jaeger 백엔드에서 사용하는 서비스 이름을 재정의합니다. 이 파라미터는 애플리케이션에서 제공한 값보다 우선합니다.

동일한 GITLAB_TRACING 값이 Workhorse, Gitaly, Rails, Sidekiq을 포함한 모든 GitLab 프로세스의 환경 변수에 구성되어야 합니다.

3. GitLab 애플리케이션 시작#

GITLAB_TRACING 환경 변수가 모든 GitLab 서비스에 내보내진 후 애플리케이션을 시작합니다.

GITLAB_TRACING이 올바르게 구성되면 애플리케이션이 시작 시 다음을 로깅합니다:

13:41:53 gitlab-workhorse.1      | 2019/02/12 13:41:53 Tracing enabled
...
13:41:54 gitaly.1                | 2019/02/12 13:41:54 Tracing enabled
...

GITLAB_TRACING이 올바르게 구성되지 않은 경우 다음 문제가 로깅됩니다:

13:43:45 gitaly.1                | 2019/02/12 13:43:45 skipping tracing configuration step: tracer: unable to load driver mytracer

기본적으로 GitLab은 Jaeger 트레이서와 함께 제공되지만 컴파일 시 다른 트레이서를 포함할 수 있습니다. 이 작업을 수행하는 방법에 대한 세부 정보는 LabKit 추적 문서에 포함되어 있습니다.

추적에 관한 로그 메시지가 출력되지 않으면 GITLAB_TRACING 환경 변수가 설정되지 않은 것입니다.

4. Jaeger 검색 UI 열기#

기본적으로 Jaeger 검색 UI는 http://localhost:16686/search에서 사용할 수 있습니다.

Jaeger UI에 트레이스가 나타나려면 먼저 애플리케이션을 사용하여 트레이스를 생성해야 합니다.

분산 추적 개발 가이드라인

GitLab v19.1
원문 보기
요약

GitLab은 분산 추적(distributed tracing)을 위해 계측(instrumentation)되어 있습니다. 분산 요청 추적(distributed request tracing)이라고도 불리는 분산 추적은 애플리케이션, 특히 마이크로서비스 아키텍처로 구축된 애플리케이션을 프로파일링하고 모니터링하는 데 사용되는 방법입니다.

GitLab은 분산 추적(distributed tracing)을 위해 계측(instrumentation)되어 있습니다. GitLab의 분산 추적은 GitLab.com에서 대규모로 아직 테스트되지 않았기 때문에 현재 실험적인 것으로 간주됩니다.

Open Tracing에 따르면:

분산 요청 추적(distributed request tracing)이라고도 불리는 분산 추적은 애플리케이션, 특히 마이크로서비스 아키텍처로 구축된 애플리케이션을 프로파일링하고 모니터링하는 데 사용되는 방법입니다. 분산 추적은 장애가 발생하는 위치와 성능 저하의 원인을 정확히 파악하는 데 도움을 줍니다.

분산 추적은 특히 요청이 GitLab 애플리케이션의 다양한 구성 요소를 통과하는 생명 주기를 이해하는 데 유용합니다. 현재 Workhorse, Rails, Sidekiq, Gitaly가 추적 계측을 지원합니다.

분산 추적은 비활성화된 경우 오버헤드가 최소화되며, 활성화된 경우에도 오버헤드가 매우 작기 때문에 프로덕션 환경을 포함한 모든 환경에서 사용 가능합니다. 이러한 이유로 프로덕션 문제, 특히 성능 문제를 진단하는 데 유용하게 활용할 수 있습니다.

서비스별로 분산 추적 지원 수준이 다릅니다. 가장 일반적인 라이브러리를 위한 기본 제공(pre-built) 계측 외에도 애플리케이션 레이어에 커스텀 계측 코드를 추가해야 합니다.

서비스별 정보는 다음을 참조하세요:

상관 관계 ID를 사용한 분산 요청 조사#

GitLab 애플리케이션은 요청의 다양한 구성 요소 간에 상관 관계 ID(correlation ID)를 전달합니다. 상관 관계 ID는 단일 요청에 고유한 토큰으로, 서로 다른 GitLab 하위 시스템(예: Rails, Workhorse) 간의 단일 요청을 연관 짓는 데 사용됩니다. 상관 관계 ID는 로그 출력에 포함되기 때문에 엔지니어는 상관 관계 ID를 이용해 서로 다른 하위 시스템의 로그를 연관 짓고 시스템을 통한 요청의 엔드투엔드 경로를 더 잘 이해할 수 있습니다. 요청이 프로세스 경계를 넘을 때 상관 관계 ID가 나가는 요청에 주입됩니다. 이를 통해 각 다운스트림 하위 시스템으로 상관 관계 ID가 전파됩니다.

상관 관계 ID는 일반적으로 특정 웹 요청에 대한 응답으로 Rails 애플리케이션에서 생성됩니다. 일부 사용자 대면 시스템은 사용자 요청(예: SSH를 통한 Git push)에 대한 응답으로 상관 관계 ID를 생성하지 않습니다.

상관 관계 ID 작업을 위한 개발자 가이드라인#

새로운 시스템에 추적을 통합할 때 개발자는 상관 관계 ID에 대한 특정 가정을 피해야 합니다. 다음 가이드라인은 GitLab의 모든 하위 시스템에 적용됩니다:

  • 상관 관계 ID는 항상 선택 사항(optional)입니다.

추적이 아닌 기능이 업스트림 시스템의 상관 관계 ID 존재에 의존하게 해서는 안 됩니다.

  • 상관 관계 ID는 항상 자유 텍스트(free text)입니다.

상관 관계 ID는 컨텍스트(예: 사용자 이름 또는 IP 주소)를 전달하는 데 절대 사용해서는 안 됩니다.

  • 상관 관계 ID는 파싱하거나 다른 방식(예: 분할)으로 조작해서는 안 됩니다.

LabKit 라이브러리는 Go 프로그래밍 언어에서 GitLab 상관 관계 ID를 작업하기 위한 표준화된 인터페이스를 제공합니다. LabKit은 Go가 아닌 GitLab 하위 시스템에서 추적 및 상관 관계 ID를 작업하는 개발자를 위한 참조 구현으로 활용될 수 있습니다.

분산 추적 활성화#

GitLab은 분산 추적을 구성하기 위해 GITLAB_TRACING 환경 변수를 사용합니다. 동일한 구성이 모든 구성 요소(예: Workhorse, Rails 등)에 사용됩니다.

GITLAB_TRACING이 설정되지 않은 경우, 애플리케이션은 계측되지 않으며 오버헤드가 전혀 없습니다.

GITLAB_TRACING을 활성화하려면 URL과 유사한 형식의 유효한 "configuration-string" 값을 설정해야 합니다:

GITLAB_TRACING=opentracing://<driver>?<param_name>=<param_value>&<param_name_2>=<param_value_2>

이 예시에서는 다음과 같은 가상의 값을 사용합니다:

  • driver: Jaeger와 같은 드라이버.

  • param_name, param_value: 드라이버별 구성 값입니다. Jaeger의 구성 파라미터는 이 문서의 뒷부분에 문서화되어 있으며 URL 인코딩되어야 합니다. 여러 값은 URL처럼 & 문자로 구분해야 합니다.

GitLab Rails는 일반적인 유형의 작업에 대해 사전 구현된 계측을 제공하여 요청에 대한 상세한 뷰를 제공합니다. 그러나 상세한 정보에는 비용이 따릅니다. 결과 트레이스가 길어지고 처리하기 어려워져 더 큰 근본적인 문제를 파악하기 어렵게 만들 수 있습니다. 이러한 우려를 해소하기 위해 일부 계측은 기본적으로 비활성화되어 있습니다. 비활성화된 계측을 활성화하려면 다음 환경 변수를 설정하세요:

  • GITLAB_TRACING_TRACK_CACHES: 캐시 읽기, 쓰기, 삭제와 같은 캐시 작업 추적을 활성화합니다.

  • GITLAB_TRACING_TRACK_REDIS: Redis 작업 추적을 활성화합니다. 대부분의 Redis 작업은 캐싱을 위한 것입니다.

GitLab Development Kit에서 Jaeger 사용#

GitLab이 지원하는 첫 번째 추적 구현은 Jaeger이며, GitLab Development Kit은 기본적으로(out-of-the-box) Jaeger를 사용한 분산 추적을 지원합니다. GDK는 서비스에 추가하기 위한 GITLAB_TRACING 환경 변수를 자동으로 추가합니다.

gdk.yml 파일을 편집하고 다음 설정을 추가하여 Jaeger를 위한 GDK를 구성하세요:

tracer:
  build_tags: tracer_static tracer_static_jaeger
  jaeger:
    enabled: true
    listen_address: 127.0.0.1
    version: 1.66.0

gdk.yml 파일을 수정한 후 gdk reconfigure 명령을 실행하여 GDK를 재구성하세요. 이렇게 하면 GDK가 올바르게 구성되고 사용 준비가 됩니다.

위의 구성은 처음으로 Go로 작성된 서비스를 재빌드할 때 tracer_statictracer_static_jaeger 빌드 태그를 설정합니다. 이후에 변경 사항이 있으면 해당 빌드 태그로 다시 빌드해야 합니다. 다음 중 하나를 선택할 수 있습니다:

  • 기본 빌드 태그 세트에 해당 빌드 태그를 추가합니다.

  • 빌드 명령에 수동으로 추가합니다. 예를 들어, Gitaly는 기본적으로 빌드 태그 추가를 지원합니다. make all WITH_BUNDLED_GIT=YesPlease BUILD_TAGS="tracer_static tracer_static_jaeger"를 실행할 수 있습니다.

재구성 후 Jaeger 대시보드는 http://localhost:16686에서 사용할 수 있습니다. GDK 환경에서 추적에 접근하는 또 다른 방법은 performance-bar를 통하는 것입니다. 브라우저 창에서 p b를 입력하면 표시됩니다.

performance bar가 활성화되면 performance bar에서 Trace를 선택하여 Jaeger UI로 이동합니다.

Jaeger 검색 UI는 현재 요청의 Correlation-ID에 대한 쿼리를 반환합니다. 이 검색은 단일 트레이스 결과를 반환해야 합니다. 이 결과를 선택하면 계층적 타임라인에서 트레이스의 세부 정보가 표시됩니다.

[

](/19.1/development/img/distributed_tracing_jaeger_ui_v11_9.png)

GitLab Developer Kit 없이 Jaeger 사용#

분산 추적은 비 GDK 개발 환경뿐만 아니라 트러블슈팅을 위해 프로덕션 또는 스테이징 환경에서도 활성화할 수 있습니다. 현재 이 기능은 실험적이며 현재 프로덕션 환경에서는 지원되지 않습니다. 이 첫 번째 릴리즈에서는 개발 환경에서의 디버깅에만 사용하도록 의도되었습니다.

Jaeger 추적은 세 단계 프로세스를 통해 활성화할 수 있습니다:

1. Jaeger 시작#

Jaeger는 많은 구성 옵션을 가지고 있지만, 트레이스 저장에 메모리를 사용하는(따라서 비영속적인) "all-in-one" 모드로 시작하기 매우 쉽습니다. "all-in-one" 모드의 주요 장점은 사용 편의성입니다.

더 자세한 구성 옵션은 Jaeger 문서를 참조하세요.

Docker 사용#

Docker가 있다면 다음 명령을 사용하여 Docker를 통해 Jaeger all-in-one을 실행하는 것이 더 쉬운 접근 방법입니다:

$ docker run \
  --rm \
  -e COLLECTOR_ZIPKIN_HTTP_PORT=9411  \
  -p 5775:5775/udp \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 14268:14268 \
  -p 9411:9411 \
  jaegertracing/all-in-one:latest

Jaeger 프로세스 사용#

Docker 없이도 all-in-one 프로세스를 설정하기 쉽습니다.

  • 해당 플랫폼용 최신 Jaeger 릴리즈를 다운로드합니다.

  • 아카이브를 압축 해제하고 bin/all-in-one 프로세스를 실행합니다.

이렇게 하면 기본 수신 포트로 프로세스가 시작됩니다.

2. GITLAB_TRACING 환경 변수 구성#

Jaeger가 실행 중이면 적절한 구성 문자열로 GITLAB_TRACING 변수를 구성합니다.

모든 것이 동일한 호스트에서 실행 중이라면 다음 값을 사용하세요:

export GITLAB_TRACING="opentracing://jaeger?http_endpoint=http%3A%2F%2Flocalhost%3A14268%2Fapi%2Ftraces&sampler=const&sampler_param=1"

이 구성 문자열은 다음 옵션과 함께 Jaeger 드라이버 opentracing://jaeger를 사용합니다:

이름 설명
http_endpoint http://localhost:14268/api/traces http://localhost:14268/에서 실행 중인 HTTP 엔드포인트로 트레이스 정보를 보내도록 Jaeger를 구성합니다. 또는 upd_endpoint를 사용할 수 있습니다.
sampler const 상수 샘플러(켜짐 또는 꺼짐)를 사용하도록 Jaeger를 구성합니다.
sampler_param 1 모든 트레이스를 샘플링하도록 const 샘플러를 구성합니다. 0을 사용하면 트레이스가 샘플링되지 않습니다.

다른 파라미터 값도 가능합니다:

이름 예시 설명
udp_endpoint localhost:6831 기본값입니다. compact thrift 프로토콜을 사용하여 포트 6831의 UDP 리스너로 트레이스 정보를 보내도록 Jaeger를 구성합니다. 이 프로토콜을 사용할 때 Ruby용 Jaeger 클라이언트에서 일부 문제를 경험한 적이 있습니다.
sampler probabilistic 확률적 랜덤 샘플러를 사용하도록 Jaeger를 구성합니다. 샘플 비율은 sampler_param 값으로 구성됩니다.
sampler_param 0.01 트레이스의 1%를 무작위로 샘플링하도록 확률적 샘플러를 구성하는 데 0.01 비율을 사용합니다.
service_name api Jaeger 백엔드에서 사용하는 서비스 이름을 재정의합니다. 이 파라미터는 애플리케이션에서 제공한 값보다 우선합니다.

동일한 GITLAB_TRACING 값이 Workhorse, Gitaly, Rails, Sidekiq을 포함한 모든 GitLab 프로세스의 환경 변수에 구성되어야 합니다.

3. GitLab 애플리케이션 시작#

GITLAB_TRACING 환경 변수가 모든 GitLab 서비스에 내보내진 후 애플리케이션을 시작합니다.

GITLAB_TRACING이 올바르게 구성되면 애플리케이션이 시작 시 다음을 로깅합니다:

13:41:53 gitlab-workhorse.1      | 2019/02/12 13:41:53 Tracing enabled
...
13:41:54 gitaly.1                | 2019/02/12 13:41:54 Tracing enabled
...

GITLAB_TRACING이 올바르게 구성되지 않은 경우 다음 문제가 로깅됩니다:

13:43:45 gitaly.1                | 2019/02/12 13:43:45 skipping tracing configuration step: tracer: unable to load driver mytracer

기본적으로 GitLab은 Jaeger 트레이서와 함께 제공되지만 컴파일 시 다른 트레이서를 포함할 수 있습니다. 이 작업을 수행하는 방법에 대한 세부 정보는 LabKit 추적 문서에 포함되어 있습니다.

추적에 관한 로그 메시지가 출력되지 않으면 GITLAB_TRACING 환경 변수가 설정되지 않은 것입니다.

4. Jaeger 검색 UI 열기#

기본적으로 Jaeger 검색 UI는 http://localhost:16686/search에서 사용할 수 있습니다.

Jaeger UI에 트레이스가 나타나려면 먼저 애플리케이션을 사용하여 트레이스를 생성해야 합니다.