前言
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的链路追踪图了: