jaeger基于docker非all-in-one搭建(加入kafka作为缓冲)

文章目录

  • 前言
  • 示意图
  • 一、部署collector收藏家配置将存储指向Kafka
    • 1.节点1
    • 2.节点2
    • 3.节点3
  • 二、部署三台摄食者ingester消费kafka内jaeger-spans下的span信息传给es集群
    • 1.节点1
    • 2.节点2
    • 3.节点3
  • 三、修改本地agent的指向地址,指向新的collector
  • 四、运行查询器
  • 五、总结


前言

需要有es和kafka环境,如果没有es参考这里,kafka参考这里,有了这些准备后,还需要创建一张网卡docker network create jaeger-net --subnet 172.18.0.1/16,然后执行下面命令,我是用云主机部署collector,ingester以及es和kafka,然后执行上报span的代码就用本地goland跑一下,agent和query就在我win本地启动了一个虚拟机


示意图

jaeger基于docker非all-in-one搭建(加入kafka作为缓冲)_第1张图片


一、部署collector收藏家配置将存储指向Kafka

1.节点1

#collector-kafka
docker run \
-d \
--name collector-kafka-1 \
--network=jaeger-net \
--restart=always \
--hostname=collector-kafka-1 \
--ip=172.18.0.8 \
-e SPAN_STORAGE_TYPE=kafka \
-e KAFKA_PRODUCER_BROKERS="172.18.0.5:9092,172.18.0.6:9092,172.18.0.7:9092" \
-e KAFKA_TOPIC="jaeger-spans" \
-p 14280:14269 \
-p 14260:14250 \
-d \
jaegertracing/jaeger-collector:1.33

2.节点2

docker run \
-d \
--name collector-kafka-2 \
--network=jaeger-net \
--restart=always \
--hostname=collector-kafka-2 \
--ip=172.18.0.9 \
-e SPAN_STORAGE_TYPE=kafka \
-e KAFKA_PRODUCER_BROKERS="172.18.0.5:9092,172.18.0.6:9092,172.18.0.7:9092" \
-e KAFKA_TOPIC="jaeger-spans" \
-p 14281:14269 \
-p 14261:14250 \
-d \
jaegertracing/jaeger-collector:1.33

3.节点3

docker run \
-d \
--name collector-kafka-3 \
--network=jaeger-net \
--restart=always \
--hostname=collector-kafka-3 \
--ip=172.18.0.10 \
-e SPAN_STORAGE_TYPE=kafka \
-e KAFKA_PRODUCER_BROKERS="172.18.0.5:9092,172.18.0.6:9092,172.18.0.7:9092" \
-e KAFKA_TOPIC="jaeger-spans" \
-p 14282:14269 \
-p 14262:14250 \
-d \
jaegertracing/jaeger-collector:1.33

二、部署三台摄食者ingester消费kafka内jaeger-spans下的span信息传给es集群

1.节点1

docker run \
-d \
--name ingester-1 \
--network=jaeger-net \
--restart=always \
--hostname=ingester-1 \
--ip=172.18.0.11 \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_ARCHIVE_SERVER_URLS="注意这里要填写es集群地址,多台地址要用逗号隔开,参考这样的写法--> ES_SERVER_URLS=http://127.0.0.1:9201/,http://127.0.0.1:9202"\
-e ES_SERVER_URLS="注意这里要填写es集群地址,多台地址要用逗号隔开,参考这样的写法--> ES_SERVER_URLS=http://127.0.0.1:9201/,http://127.0.0.1:9202" \
-e KAFKA_CONSUMER_BROKERS="172.18.0.5:9092,172.18.0.6:9092,172.18.0.7:9092" \
-e KAFKA_CONSUMER_TOPIC="jaeger-spans" \
jaegertracing/jaeger-ingester:1.33

2.节点2

docker run \
-d \
--name ingester-2 \
--network=jaeger-net \
--restart=always \
--hostname=ingester-2 \
--ip=172.18.0.12 \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_ARCHIVE_SERVER_URLS="注意这里要填写es集群地址,多台地址要用逗号隔开,参考这样的写法--> ES_SERVER_URLS=http://127.0.0.1:9201/,http://127.0.0.1:9202" \
-e ES_SERVER_URLS="注意这里要填写es集群地址,多台地址要用逗号隔开,参考这样的写法--> ES_SERVER_URLS=http://127.0.0.1:9201/,http://127.0.0.1:9202" \
-e KAFKA_CONSUMER_BROKERS="172.18.0.5:9092,172.18.0.6:9092,172.18.0.7:9092" \
-e KAFKA_CONSUMER_TOPIC="jaeger-spans" \
jaegertracing/jaeger-ingester:1.33

3.节点3

docker run \
-d \
--name ingester-3 \
--network=jaeger-net \
--restart=always \
--hostname=ingester-3 \
--ip=172.18.0.13 \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_ARCHIVE_SERVER_URLS="注意这里要填写es集群地址,多台地址要用逗号隔开,参考这样的写法--> ES_SERVER_URLS=http://127.0.0.1:9201/,http://127.0.0.1:9202" \
-e ES_SERVER_URLS="注意这里要填写es集群地址,多台地址要用逗号隔开,参考这样的写法--> ES_SERVER_URLS=http://127.0.0.1:9201/,http://127.0.0.1:9202" \
-e KAFKA_CONSUMER_BROKERS="172.18.0.5:9092,172.18.0.6:9092,172.18.0.7:9092" \
-e KAFKA_CONSUMER_TOPIC="jaeger-spans" \
jaegertracing/jaeger-ingester:1.33

三、修改本地agent的指向地址,指向新的collector

docker run \
--name agent\
--rm \
-p5775:5775/udp \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
-d \
jaegertracing/jaeger-agent:1.33 \
--reporter.grpc.host-port="这里填写collector服务容器14250映射的宿主机端口号以及公网ip,多台用逗号隔开,参考这样的写法 --->reporter.grpc.host-port=172.18.0.1:14260,172.18.0.1:14261"

四、运行查询器

docker run -d --rm \
--name jaeger-query1\
-d \
-p 16685:16685 \
-p 16686:16686 \
-p 16687:16687 \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS="注意这里要填写es集群地址,多台地址要用逗号隔开,参考这样的写法--> ES_SERVER_URLS=http://127.0.0.1:9201/,http://127.0.0.1:9202" \
jaegertracing/jaeger-query:1.33

五、总结

官网提示:jaeger-query serves the API endpoints and a React/Javascript UI. The service is stateless and is typically run behind a load balancer, such as NGINX.(jaeger-query提供 API 端点和 React/Javascript UI。该服务是无状态的,通常在负载均衡器之后运行,例如NGINX),所以部署多台jaeger-query服务,用nginx统一入口,比如:

upstream agent{
	least_conn;    #把请求转发给连接数较少的后端服务器
	server 192.168.203.171:16686;
	server 192.168.203.171:16689;
}
server {
    listen       80;
        server_name  localhost;
        underscores_in_headers on;
    
        location / {
            proxy_set_header   Host $host:$server_port;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass http://agent;

        }
}

你可能感兴趣的:(go,kafka,docker,elasticsearch)