前言1.1Harbor新功能——分布式追踪Harbor在2.4.0版本后增加了一个新功能:为Harbor增加追踪功能,增强故障排查,识别性能瓶颈等。目前,Harbor支持Jaeger和OpenTelemetry(简称otel)。1.2Jaeger简介Jaeger是一个开源的分布式跟踪系统,可以对复杂的分布式系统进行监控和排查。Jaeger的主要功能包括分布式请求监控、性能调优、故障分析和服务依赖分析等,本文不会详细介绍Jaeger,只是简单部署Jaeger实现Harbor的分布式跟踪功能。如果是生产环境,也可以参考这篇文章,因为Jaeger在Harbor中的配置是类似的。1.3要求Harbor的版本必须是2.4.0及以上,这里是2.5.3;Jaeger的版本必须是1.26或更高,这里是1.35;这个地方在Harbor服务主机(地址192.168.2.250)上部署了Jaeger;部署Jaeger服务本节采用Jaegerall-in-one单节点部署。它包含3个Jaeger组件:agentcollectorqueryservice/UI这种方法直接将数据存储在内存中,无需额外部署存储组件。不建议在生产环境中使用这种方式进行部署。2.1Docker部署Jaeger将数据存储在内存中,仅供测试使用。需要注意的是16686等端口没有被占用。不同版本的Jaeger部署参数略有不同,其他版本可以查看:https://www.jaegertracing.io/docs/$dockerpulljaegertracing/all-in-one:1.35$dockerrun-d--namejaeger\-eCOLLECTOR_ZIPKIN_HOST_PORT=:9411\-p5775:5775/udp\-p6831:6831/udp\-p6832:6832/udp\-p5778:5778\-p16686:16686\-p14250:14250\-p14268:14268\-p14269:14269\-p9411:9411\jaegertracing/一体机:1.35$dockerps-a|grepjaeger$ss-ntulp|grep166862.2浏览器登录JaegerUI然后通过http://localhost:16686或http://192.168.2.250:16686访问JaegerUI。Harbor配置由于刚才部署的Jaeger采用一体机方式,已经包含了jaeger-agent服务,所以我们可以在Harbor配置文件中开启Jaeger功能,并指定Jaeger-Agent的地址。3.1停止Harbor服务$cd/app/harbor/$docker-composedown3.2修改Harbor配置在Harbor的配置文件中启用Jaeger的分布式跟踪功能。$vimharbor.yml#Trace相关配置#只能同时启用一个traceprovider(jaeger或otel),#使用jaeger作为provider时,只能在proxy模式或collector模式下启用。#如果使用jaegerCollector模式,取消注释端点,并根据需要取消注释用户名和密码#如果您使用jaegeragetn模式,请取消注释agent_host和agent_porttrace:enabled:truesample_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###jaeger.thrift以紧凑模式导出跟踪数据agent_port:6831##otel:##endpoint:hostname:4318##url_path:/v1/traces##compression:false##insecure:true##timeout:10ssample_rate:如果你想100%的跟踪数据被采样,请将sample_rate设置为1;如果要采样50%的跟踪数据,请设置0.5,以此类推;namespace:命名空间用于区分不同的Harbor服务,如果需要多个Harbor服务进行分布式跟踪的话建议启用该配置;attributes:attributes是一个键值对,dict包含用户定义的属性,用于初始化跟踪提供者;这里使用了Jaeger-agent方式,其他配置参数请备注,同时注意yaml格式的对齐。3.3配置注入每次修改harbor配置文件,都需要执行./prepare,使修改后的配置生效。$./prepare3.4InstallInstallHarborExecute./install.sh重新安装并启动Harbor$./install.sh-h注意:请先在harbor.yml中设置hostname和其他必要的属性。不要使用localhost或127.0.0.1作为主机名,因为外部客户端需要访问Harbor。如果需要在Harbor中启用Notary,请设置--with-notary,并在harbor.yml中设置ui_url_protocol/ssl_cert/ssl_cert_key,因为notary必须在https下运行。如果需要在Harbor中启用Trivy请设置--with-trivy如果需要在Harbor中启用Chartmuseum请设置--with-chartmuseum$./install.sh--with-trivy--with-chartmuseum$docker-composeps#检查是否每个Harbor服务的组件是正常的Jaeger获取Harbor跟踪信息部署Jaeger服务并配置好Harbor服务后,可以在JaegerUI界面查看Harbor跟踪信息。在Search-Service可以看到Jaeger已经采集了Harbor的监控数据,然后在【系统架构】的DAG中查看Harbor的链路跟踪图:
