微服务接入Jaeger分布式链路追踪

1、概念

Jaeger是一款广受欢迎的开源分布式链路跟踪系统,兼容OpenTracing API,且已加入CNCF开源组织。其主要功能是聚合来自各个异构系统的实时监控数据。
在这里插入图片描述
按照数据流向,整体可以分为四个部分:

  • jaeger-client:Jaeger的客户端,实现了OpenTracing的API,支持主流编程语言。客户端直接集成在目标Application中,其作用是记录和发送Span到Jaeger Agent。在Application中调用Jaeger Client Library记录Span的过程通常被称为埋点。
  • jaeger-agent:暂存Jaeger Client 发来的Span,并批量向Jaeger Collector发送Span,一般每台机器上都会部署一个Jaeger Agent。官方的介绍中还强调Jaeger Agent可以将服务发现的功能从Client中抽离出来,不过从架构角度讲,如果是部署在Kubernetes或者是Nomad中,Jaeger Agent存在的意义并不大。
  • jaeger-collector:接受Jaeger Agent发来的数据,并将其写入存储后端,目前支持采用Cassandra和Elasticsearch作为存储后端。个人还是比较推荐用ES,既可以和日志服务共用同一个ES,又可以使用Kibana对Trace数据进行额外的分析。架构图中的存储后端是Cassandra,旁边还有一个Spark,讲的就是可以用Spark等其他工具对存储后端中的Span进行直接分析。
  • jaeger-query & jaeger-ui:读取存储后端中的数据,以直观的形式呈现。

2、安装ES和Kibana

注意:ES和Kibana版本保持一致

docker pull elasticsearch:7.7.0
docker pull kibana:7.7.0

创建相应文件夹

mkdir elasticsearch
cd elasticsearch
mkdir config
mkdir data
mkdir logs
mkdir plugins
# 给 config 写入配置文件
echo "http.host: 0.0.0.0" >> config/elasticsearch.yml
chmod -R 777 /home/elasticsearch

启动ES容器

docker run --name es -p 9200:9200 -p 9300:9300 \
-e "discovery.type"="single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx1024m" \
-v /home/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /home/elasticsearch/data:/usr/share/elasticsearch/data \
-v /home/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /home/elasticsearch/logs:/usr/share/elasticsearch/logs \
-d elasticsearch:7.7.0

查看容器信息

docker inspect es

找出ES的IP地址,例如:http://172.17.0.4
启动Kibana容器

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.4:9200 -p 5601:5601 -d kibana:7.7.0

修改配置文件
进入容器

docker exec -it kibana bash

修改配置文件

vi /usr/share/kibana/config/kibana.yml

修改ES的IP为本地的IP

# ** THIS IS AN AUTO-GENERATED FILE **
# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ] # 将这里的 IP 换成 Es 的 IP,172.17.0.4
monitoring.ui.container.elasticsearch.enabled: true

外网访问
输入外网IP:5601,访问kibana,第一次访问,成功就会显示一个欢迎语。
在这里插入图片描述

3、安装Jaeger技术栈

jaeger-collector
镜像:jaegertracing/jaeger-collector:1.28

docker run -d --name=jaeger-collector -p 9411:9411 -p 14250:14250 -p 14268:14268 -p 14269:14269 -e SPAN_STORAGE_TYPE=elasticsearch -e ES_SERVER_URLS=http://172.17.0.4:9200 jaegertracing/jaeger-collector:1.28

jaeger-agent
镜像:jaegertracing/jaeger-agent:1.28

docker run -d --name=jaeger-agent -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778/tcp -p 5775:5775/udp -e REPORTER_GRPC_HOST_PORT=172.17.0.6:14250 -e LOG_LEVEL=debug jaegertracing/jaeger-agent:1.28

jaeger-query
镜像:jaegertracing/jaeger-query:1.28

docker run -d --name=jaeger-query -p 16686:16686 -p 16687:16687 -e SPAN_STORAGE_TYPE=elasticsearch -e ES_SERVER_URLS=http://172.17.0.4:9200 jaegertracing/jaeger-query:1.28

输入外网 IP 加16686端口,访问成功显示
在这里插入图片描述

4、代码接入

创建一个SpringBoot项目,pom文件中引入Jaeger依赖

<dependency>
 <groupId>io.opentracing.contrib</groupId>
 <artifactId>opentracing-spring-jaeger-cloud-starter</artifactId>
 <version>3.2.2</version>
</dependency>
<dependency>
 <groupId>io.jaegertracing</groupId>
 <artifactId>jaeger-client</artifactId>
 <version>1.6.0</version>
</dependency>

在配置文件中添加配置

opentracing.jaeger.enabled=true
opentracing.jaeger.const-sampler.decision=true
opentracing.jaeger.probabilistic-sampler.sampling-rate=1
opentracing.jaeger.service-name=docker-swarm-build
opentracing.jaeger.udp-sender.host=192.168.0.123
opentracing.jaeger.udp-sender.port=6831
opentracing.jaeger.log-spans=true

服务启动后,调用SpringBoot项目接口,访问jeager-ui地址 localhost:16686,界面如下:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值