Jaeger实现Harbor链路追踪

举报
键客李大白 发表于 2022/09/01 20:47:24 2022/09/01
【摘要】 基于Jaeger分布式追踪系统,实现对Harbor私有镜像仓库组件之间的服务调用进行链路追踪。

【摘要】基于Jaeger分布式追踪系统,实现对Harbor私有镜像仓库组件之间的服务调用进行链路追踪。
【文章来源】 《Harbor进阶实战》公众号


前言

1.1 Harbor新功能-分布式跟踪

  Harbor在2.4.0版本后新增一个功能:向 Harbor 添加跟踪功能,以增强故障排除、识别性能瓶颈等。
目前Harbor支持JaegerOpenTelemetry(简称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的监控数据了,
image.png

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


image.png

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。