返回介绍

PART Ⅰ : 容器云OPENSHIFT

PART Ⅱ:容器云 KUBERNETES

PART Ⅲ:持续集成与持续部署

PART Ⅴ:日志/监控/告警

PART Ⅵ:基础

PART Ⅶ:数据存储、处理

PART VIII:CODE

PART X:HACKINTOSH

PART XI:安全

Jaeger

发布于 2024-06-08 21:16:46 字数 23143 浏览 0 评论 0 收藏 0

Jaeger是一个基于opentracing规范的链路追踪工具平台

1、架构及组件

带有Kafka缓存同时可以进行ETL的架构

  • 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 作为存储后端。个人还是比较推荐用 Elasticsearch,既可以和日志服务共用同一个 ES,又可以使用 Kibana 对 Trace 数据进行额外的分析。架构图中的存储后端是 Cassandra,旁边还有一个 Spark,讲的就是可以用 Spark 等其他工具对存储后端中的 Span 进行直接分析。

  • jaeger-query & jaeger-ui

    读取存储后端中的数据,以直观的形式呈现

  • jaeger-ingester

    ingester从名字就可以看出是从kafka里面取数据然后做持久化的,关于这个持久化的对象,jaeger原生是选择了elasticsearch(简称es),之索引选择es是因为查询非常方便(反向索引),性能也不错。

2、概念

  • Trace:一条调用链。

  • Span:可以理解成一条调用链的一个环节。一条 Trace可以被认为是一个由多个 Span 组成的DAG图。

  • Tag:标签集

  • Log:日志集

  • References:Span与Span之间的关系。OpenTracing目前定义了两种关系:ChildOf(父子) 和 FollowsFrom(跟随)

  • SpanContext:Span上下文对象,主要保存了traceId spanId等,用来跨进程边界传输。不同进程间可以利用SpanContext建立References关系。 (下个服务拿到traceId就可以知道自己改归属于哪个调用链, 拿到spanId就知道自己的父span是谁 )

3、采样速率

支持设置采样率是 Jaeger 的一个亮点,生产环境系统性能很重要,所以对于所有的请求都开启 Trace 显然会带来比较大的压力,另外,大量的数据也会带来很大存储压力。为了尽量消除分布式追踪采样对系统带来的影响,设置采样率是一个很好的办法。Jaeger官方 支持四种采样类别,分别是

  • Constant:全量采集,采样率设置0,1 分别对应打开和关闭
  • Probabilistic:概率采集,默认万份之一,取值可在 0至1之间,单位为百分比。0.5代表50%
  • Rate Limiting:限速采集,每秒只能采集一定量的数据,如设置2的话,就是每秒采集2个链路数据
  • Remote :**是遵循远程设置,取值的含义和 probabilistic 相同,都意为采样的概率,只不过设置为 remote 后,Client 会从 Jaeger Agent 中动态获取采样率设置。
  • guaranteedThroughput: 复合采样,至少每秒采样lowerBound次(rateLimiting),超过lowerBound次的话,按照samplingRate概率来采样

4、组件端口作用

组件端口协议描述
Agent6831UDP应用程序向代理发送跟踪的端口,接受 Jaeger.thrift而不是 Compact thrift协议
通过兼容性Thrift协议,接收Jaeger thrift类型数据
Agent6832UDP通过二进制Thrift协议,接收Jaeger thrift类型数据 ,需要某些不支持压缩的客户端库
Agent5775UDP通过兼容性Thrift协议,接收Zipkin thrift类型数据
Agent5778HTTP配置控制服务接口
Agent14271HTTP监控信息端口
Collector14250TCPAgent 发送 Proto 格式数据
Collector14267TCP接收客户端Jaeger thrift类型的数据
Collector14268HTTP接收客户端Zipkin thrift类型的数据
Collector14269HTTP监控信息端口
Query16686HTTPJaeger UI页面端口
Query16687HTTP监控信息端口
ingester14270HTTP监控信息端口
docker镜像描述
all-in-one专为快速本地测试而设计。它使用内存存储组件启动 Jaeger UI、收集器、查询和代理。
$ docker pull jaegertracing/all-in-one:1.34
example-hotrod演示分布式跟踪功能的示例应用程序“HotROD”.
$ docker pull jaegertracing/example-hotrod:1.34
jaeger-agent从 Jaeger 客户端接收 span 并转发给收集器。设计为作为 sidecar 或主机agents运行
$ docker pull jaegertracing/jaeger-agent:1.34
jaeger-collector从agents或直接从客户端接收 spans并将它们保存在持久存储中
$ docker pull jaegertracing/jaeger-collector:1.34
jaeger-query提供 Jaeger UI 和从存储中检索跟踪的 API.
$ docker pull jaegertracing/jaeger-query:1.34
jaeger-ingester收集器的替代品;从 Kafka topic读取spans并将它们保存到存储中
$ docker pull jaegertracing/jaeger-ingester:1.34
spark-dependencies一个 Apache Spark 作业,它从存储中收集 Jaeger spans ,分析服务之间的关联,并将它们存储起来以供以后在 Jaeger UI 中展示
$ docker pull jaegertracing/spark-dependencies:latest
jaeger-operator用于打包、部署和管理 Jaeger 的 Kubernetes Operator.
$ docker pull jaegertracing/jaeger-operator:1.34
jaeger-cassandra-schema用于初始化 Cassandra 键空间和模式的实用程序脚本。
$ docker pull jaegertracing/jaeger-cassandra-schema:1.34
jaeger-es-index-cleaner用于从 Elasticsearch 中清除旧索引的实用程序脚本,因为 ES 不支持数据 TTL。.
$ docker pull jaegertracing/jaeger-es-index-cleaner:1.34

1. Docker

1.1 Allinone

docker run -d --name jaeger \
    -p 16686:16686 \
    jaegertracing/all-in-one:1.34

或者在Windows或MacOS或Linux中使用二进制文件进行部署

https://github.com/jaegertracing/jaeger/releases/

2. Kubernetes

2.1 helm

helm repo ad jaegertracing https://jaegertracing.github.io/helm-charts
helm repo update
helm install --namespace jaeger jaeger jaegertracing/jaeger \
  --set tag="1.34" \
  --set provisionDataStore.cassandra=false \
  --set storage.type=elasticsearch \
  --set storage.elasticsearch.host=elasticsearch的IP地址(不用带协议,直接IP地址即可) \
  --set storage.elasticsearch.user=elasticsearch用户名(如果使用自定义创建的es用户,权限要求:
集群权限:monitor、manage_index_templates;运行身份权限:apm_system;索引权限:对索引模式jaeger*拥有all权限) \
  --set storage.elasticsearch.password=elasticsearch用户密码 \
  --set agent.serviceMonitor.enabled=true \
  --set collector.serviceMonitor.enabled=true \
  --set collector.service.zipkin.port=9411
  --set query.ingress.enabled=true \
  --set "query.ingress.hosts={jaeger的ingress域名1(例如:jaeger1.curiouser.com),域名2(例如:jaeger2.curiouser.com)}" \
  --set query.serviceMonitor.enabled=true


# 如果要部署HotROD容器,需要添加设置以下参数
  --set hotrod.enabled=true \
  --set hotrod.ingress.enabled=true \
  --set hotrod.ingress.hosts={HotROD的ingress域名1(例如:jaeger-hotrod1.curiouser.com)}

2.2 k8s operator

暂无

HotROD(Rides on Demand)是一个演示应用程序,由几个微服务组成,说明了OpenTracing API的使用。

相关文档:

docker run -d --name jaeger-hotrod \
  --link jaeger \
  -p 8080-8083:8080-8083 \
  -e JAEGER_AGENT_HOST="jaeger" \
  jaegertracing/example-hotrod:1.34 all

访问:http://127.0.0.1:8080 点击进行导入数据,之后相关的请求HotROD容器日志中

jaeger-tracegen可用于生成简单跨度的连续流。主要用于压力测试。可以控制worker的数量和在每个worker中生成的span。同时,它还可以在 firehose 模式下生成 span(在 span 上设置一个标志以跳过索引)

docker run --rm --link jaeger \
  -e JAEGER_AGENT_HOST=jaeger \
  -e JAEGER_AGENT_PORT=6831 \
  jaegertracing/jaeger-tracegen:1.34 --workers=10 --traces=10

jaeger-tracegen参数

-debug
      Whether to set DEBUG flag on the spans to force sampling
-duration duration
      For how long to run the test
-firehose
      Whether to set FIREHOSE flag on the spans to skip indexing
-marshal
      Whether to marshal trace context via HTTP headers
-pause duration
      How long to pause before finishing trace (default 1µs)
-service string
      Service name to use (default "tracegen")
-traces int
      Number of traces to generate in each worker (ignored if duration is provided (default 1)
-workers int
      Number of workers (goroutines) to run (default 1)

参考:https://www.jaegertracing.io/docs/1.34/tools/

1、Golang应用

2、Java应用

3、Python应用

4、PHP应用

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文