[分享] 极狐GitLab - 访问链路追踪

GitLab Distributed Tracing

1. Overview

分布式追踪,也称为分布式请求追踪,是一种用于分析和监控应用程序的方法,尤其是那些使用微服务架构构建的应用程序。分布式追踪有助于查明发生故障的位置以及导致性能表现不好的原因。

极狐GitLab支持Jaeger分布式追踪。极狐GitLab分布式追踪目前被认为是实验性的,它尚未在GitLab.com上进行大规模测试。

当请求通过 极狐GitLab 应用程序的不同组件时,分布式追踪特别有助于理解请求的生命周期。目前,WorkhorseRailsSidekiqGitaly 支持追踪检测。Jaeger通过极狐Gitlab中的Correlation-ID实现请求的追踪。

在启用时只会产生很小的开销,因此可以在任何环境中使用,包括生产环境。因此,它可用于诊断生产问题,特别是性能问题。

2. Jaeger Install

使用docker 进行快捷部署:

docker run -d --name jaeger \
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  -p 5775:5775/udp \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 14268:14268 \
  -p 14250:14250 \
  -p 9411:9411 \
  jaegertracing/all-in-one:1.25

3. 开启distributed tracing

在环境变量中添加参数以支持distributed tracing。

Ominibus 部署开启方式如下:

在Rails以及Gitaly节点的/etc/gitlab/gitlab.rb中添加 以下配置,注意替换其中的<Jaeger-server-ip>为实际的IP地址:

gitlab_rails['env'] = {
    "GITLAB_TRACING" => "opentracing://jaeger?http_endpoint=http%3A%2F%2F<Jaeger-server-ip>%3A14268%2Fapi%2Ftraces&sampler=const&sampler_param=1"
}

gitlab_workhorse['env'] = {
    "GITLAB_TRACING" => "opentracing://jaeger?http_endpoint=http%3A%2F%2F<Jaeger-server-ip>%3A14268%2Fapi%2Ftraces&sampler=const&sampler_param=1"
}

gitaly['env'] = {
    "GITLAB_TRACING" => "opentracing://jaeger?http_endpoint=http%3A%2F%2F<Jaeger-server-ip>%3A14268%2Fapi%2Ftraces&sampler=const&sampler_param=1"
}

修改保存后执行 gitlab-ctl reconfigure使配置生效。

4. 访问Jaeger UI

打开浏览器,访问 http://<Jaeger-server-ip>:16686

5. Jaeger使用

选择Service后,点击Find Traces

在Gitlab中创建一个仓库或者发起一个请求,观察Workhorse以及Gitaly细节

右上角切换图表,显示调用关系以及耗时,颜色用来区分时长