zl程序教程

您现在的位置是:首页 >  Javascript

当前栏目

Jaeger系统实现对Harbor的链路追踪

2023-02-19 12:28:36 时间

前言

1.1 Harbor新功能-分布式跟踪

Harbor在2.4.0版本后新增一个功能:向 Harbor 添加跟踪功能,以增强故障排除、识别性能瓶颈等。目前Harbor支持Jaeger和OpenTelemetry(简称otel)两种实现方式。

图片

1.2 Jaeger简单介绍

Jaeger 是一个开源的分布式追踪系统,它可以在复杂的分布式系统中进行监控和故障排查。Jaeger的主要功能包括分布式请求监控、性能调优、故障分析和服务依赖分析等。

本处并不会详细介绍Jaeger,仅简单部署Jaeger来实现对Harbor的分布式追踪功能而做的Demo。如果是在生产环境,也可以参考本文,因为Harbor中关于Jaeger的配置都是类似的。

1.3 要求

  • Harbor版本必须在2.4.0​及以上,本处为2.5.3;
  • Jaeger版本必须为1.26​或更高版本,本处为1.35;
  • 本处将Jaeger部署在Harbor服务主机上(地址为192.168.2.250);

部署Jaeger服务

本处采用Jaeger all-in-one单节点部署。其包含了3个Jaeger组件:

  • agent
  • collector
  • query service/UI

这种方式是将数据直接存储在内存中,无需额外部署存储组件,不建议在生产环境使用该方式进行部署。

2.1 Docker部署Jaeger

是将数据存储在内存中,仅用于测试。需要注意16686等端口没有被占用。

不同版本的Jaeger部署参数略有区别,其它版本可查看:https://www.jaegertracing.io/docs/

$ docker pull jaegertracing/all-in-one:1.35
$ 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 14250:14250 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 \
jaegertracing/all-in-one:1.35
$ docker ps -a | grep jaeger
$ ss -ntulp | grep 16686

2.2 浏览器登录Jaeger UI

然后在浏览器通过http://localhost:16686或者http://192.168.2.250:16686来访问 Jaeger UI。

图片

Harbor配置

因为刚才部署的Jaeger采用的是all-in-one的方式,已经包含了jaeger-agent服务了,我们在Harbor的配置文件中启用Jaeger功能并指定Jaeger-Agent的地址即可。

3.1 停止Harbor服务

$ cd /app/harbor/
$ docker-compose down

图片

3.2 修改Harbor配置

在Harbor的配置文件中启用Jaeger的分布式追踪功能。

$ vim  harbor.yml
# Trace相关配置
#同时只能启用一个跟踪提供程序(jaeger或otel),
#当使用jaeger作为提供程序时,只能在代理模式或收集器模式下启用它.
#如果使用jaeger收集器模式,则取消对endpoint的注释,并根据需要取消对用户名和密码的注释
#如果使用jaeger agetn模式,请取消注释agent_host和agent_port
trace:
enabled: true
sample_rate: 1
# # namespace:
# attributes:
# # application: harbor
# # # jaeger应为1.26或更高版本.
jaeger:
# endpoint: http://192.168.2.250:14268/api/traces
# # username:
# # password:
agent_host: 192.168.2.250
# # # export trace data by jaeger.thrift in compact mode
agent_port: 6831
# # otel:
# # endpoint: hostname:4318
# # url_path: /v1/traces
# # compression: false
# # insecure: true
# # timeout: 10s

sample_rate: 如果要对100%的跟踪数据进行采样,请将sample_rate设置为1;如果要采样50%的跟踪数据,请设置0.5,依此类推;

namespace: 命名空间用于区分不同Harbor服务,如果你需要对多个Harbor服务进行分布式追踪的话建议启用该配置;

attributes:attributes是一个键值对,dict包含用于初始化跟踪提供程序的用户定义属性;

本处采用的是Jaeger-agent的方式,其它的配置参数请注释掉,同时注意yaml格式对齐。

图片

3.3 配置注入

每次修改harbor的配置文件,都需要执行./prepare才可以使修改的配置生效。

$ ./prepare

图片

3.4 Install安装Harbor

执行./install.sh重新安装并启动Harbor

$ ./install.sh  -h
Note: Please set hostname and other necessary attributes in harbor.yml first. DO NOT use localhost or 127.0.0.1 for hostname, because Harbor needs to be accessed by external clients.
Please set --with-notary if needs enable Notary in Harbor, and set ui_url_protocol/ssl_cert/ssl_cert_key in harbor.yml bacause notary must run under https.
Please set --with-trivy if needs enable Trivy in Harbor
Please set --with-chartmuseum if needs enable Chartmuseum in Harbor
$ ./install.sh --with-trivy --with-chartmuseum
$ docker-compose ps #查看Harbor服务各个组件是否正常

Jaeger获取Harbor追踪信息

在部署Jaeger服务和配置Harbor服务后,可以在Jaeger的UI界面查看Harbor的追踪信息。

在Search-Service处可以看到Jaeger已经采集到Harbor的监控数据了,

图片

然后在【System Architecture】的DAG查看Harbor的链路追踪图了:

图片