jaeger

一 jaeger基础

1 基本介绍

  • jaeger的开发语言是golang
  • jaeger支持OpenTracing协议,同属于CNCF基金会
  • jaeger支持各种各样的客户端,包括Go、Java、Node、Python、C++等
  • jaeger支持udp协议传输,当然也支持http

jaeger的官网是 http://www.jaegertracing.io/

OpenTracing的官网是https://opentracing.io/

2 能够解决的问题

  • 分布式事务监控
  • 性能分析与性能优化
  • 调用链,找到根源问题
  • 服务依赖分析

3 架构

jaeger具有两种架构:

第一种:直接将数据写入存储

jaeger_第1张图片
第二种:使用Kafka作为缓冲
jaeger_第2张图片

通过对以上两图的观察,我们可以得知jaeger架构主要包括以下组件:

  • jaeger-client:嵌入在应用程序里面,负责span的创建以及上报
  • jaeger-agent:每个物理机部署一个,负责收集client上报的span,然后转发给collector
  • jaeger-collector:接收agent发来的span,写入后端存储
  • jaeger-query:提供rest接口,负责从存储中拉取trace信息供UI查询
  • jaeger-ui:展示trace和服务依赖图

二 安装和部署

jaeger可以直接通过二进制安装包安装、部署到window上。

安装包的下载地址:http://https://github.com/jaegertracing/jaeger/releases

安装包含五个二进制文件:

  1. jaeger-agent
  2. jaeger-collector
  3. jaeger-query
  4. jaeger-standalone
  5. jaeger-ingester

1 安装ES

trace数据总要存在一个地方。jaeger支持ES(Elasticsearch)和Canssandra两种后端DB。国内用ES的多一点,我们就以ES为例,来介绍其安装方式。

2 NSSM安装部署jaeger服务

2.1 NSSM

NSSM是一个服务封装程序,它可以将普通exe程序封装成服务,使之像windows服务一样运行。

2.2 NSSM安装和启动服务

  #start JaegerAgent
    nssm install JaegerAgent D:\Jaeger\jaeger-agent.exe --reporter.grpc.host-port=localhost:14250
    nssm set JaegerAgent AppStdout D:\Jaeger\agent\jaeger-agent.out.log
    nssm set JaegerAgent AppStderr D:\Jaeger\agent\jaeger-agent.err.log
    nssm set JaegerAgent Description Jaeger Agent service
    nssm start JaegerAgent
    
    #start JaegerCollector
    nssm install JaegerCollector D:\Jaeger\jaeger-collector.exe --es.server-urls=http://localhost:9200 --es.username=jaeger --es.password=PASSWORD
    nssm set JaegerCollector AppStdout D:\Jaeger\collector\jaeger-collector.out.log
    nssm set JaegerCollector AppStderr D:\Jaeger\collector\jaeger-collector.err.log
    nssm set JaegerCollector Description Jaeger Collector service
    nssm set JaegerCollector AppEnvironmentExtra SPAN_STORAGE_TYPE=elasticsearch
    nssm start JaegerCollector
    
    #start UI
    nssm install JaegerUI D:\Jaeger\jaeger-query.exe --es.server-urls=http://localhost:9200 --es.username=jaeger --es.password=PASSWORD
    nssm set JaegerUI AppStdout D:\Jaeger\query\jaeger-ui.out.log
    nssm set JaegerUI AppStderr D:\Jaeger\query\jaeger-ui.err.log
    nssm set JaegerUI Description Jaeger Query service
    nssm set JaegerUI AppEnvironmentExtra SPAN_STORAGE_TYPE=elasticsearch
    nssm start JaegerUI

我们在启动Jaeger服务的时候,指定了ES服务器的地址为http://localhost:9200

3 端口整理

我们通过jaeger提供的各种端口来访问jaeger的服务。

Agent

    5775 UDP协议,接收兼容zipkin的协议数据
    6831 UDP协议,接收兼容jaeger的兼容协议
    6832 UDP协议,接收jaeger的二进制协议
    5778 HTTP协议,数据量大不建议使用

它们之间的传输协议都是基于thrift封装的。我们默认使用5775作为传输端口。

Collector

    14267 tcp agent发送jaeger.thrift格式数据
    14250 tcp agent发送proto格式数据(背后gRPC)
    14268 http 直接接受客户端数据
    14269 http 健康检查

Query

    16686 http jaeger的前端,放给用户的接口
    16687 http 健康检查

至此,我们的jaeger就安装完毕。

4 总结

以上,就是我们的环境准备。有了一个server接收数据,调用链的主要工作就在于客户端开发。
接下来,将从一个简单的java程序说起,来说明OpenTracing规范的使用方式。

你可能感兴趣的:(java)