kratos 链路追踪jaeger存储es

先来个容器环境文件

    version: "3"

    services:
    elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
    networks:
    - elastic-jaeger
    ports:
    - "127.0.0.1:9200:9200"
    - "127.0.0.1:9300:9300"
    restart: on-failure
    environment:
    - cluster.name=jaeger-cluster
    - discovery.type=single-node
    - http.host=0.0.0.0
    - transport.host=127.0.0.1
    - ES_JAVA_OPTS=-Xms512m -Xmx512m
    - xpack.security.enabled=false
    volumes:
    - ./esdata:/usr/share/elasticsearch/data

    jaeger-collector:
    image: jaegertracing/jaeger-collector
    ports:
    - "14269:14269"
    - "14268:14268"
    - "14267:14267"
    - "9411:9411"
    networks:
    - elastic-jaeger
    restart: on-failure
    environment:
    - SPAN_STORAGE_TYPE=elasticsearch
    command: [
    "--es.server-urls=http://elasticsearch:9200",
    "--es.num-shards=1",
    "--es.num-replicas=0",
    "--log-level=error"
    ]
    depends_on:
    - elasticsearch

    jaeger-agent:
    image: jaegertracing/jaeger-agent
    hostname: jaeger-agent
    command: ["--reporter.grpc.host-port=jaeger-collector:14267"]
    ports:
    - "5775:5775/udp"
    - "6831:6831/udp"
    - "6832:6832/udp"
    - "5778:5778"
    networks:
    - elastic-jaeger
    restart: on-failure
    environment:
    - SPAN_STORAGE_TYPE=elasticsearch
    depends_on:
    - jaeger-collector

    jaeger-query:
    image: jaegertracing/jaeger-query
    environment:
    - SPAN_STORAGE_TYPE=elasticsearch
    - no_proxy=localhost
    ports:
    - "16686:16686"
    - "16687:16687"
    networks:
    - elastic-jaeger
    restart: on-failure
    command: [
    "--es.server-urls=http://elasticsearch:9200",
    "--span-storage.type=elasticsearch",
    "--log-level=debug"
    ]
    depends_on:
    - jaeger-agent

    volumes:
    esdata:
    driver: local

    networks:
    elastic-jaeger:
        driver: bridge

在kratos中植入链路追踪

  1. 在main.go中构建链路追踪

    import (
        ...
        "go.opentelemetry.io/otel"
        "go.opentelemetry.io/otel/attribute"
        "go.opentelemetry.io/otel/exporters/jaeger"
        "go.opentelemetry.io/otel/sdk/resource"
        "go.opentelemetry.io/otel/sdk/trace"
        ...
    )
    // tracerProvider returns an OpenTelemetry TracerProvider configured to use
    // the Jaeger exporter that will send spans to the provided url. The returned
    // TracerProvider will also use a Resource configured with all the information
    // about the application.
    func tracerProvider(url string) (*trace.TracerProvider, error) {
        // Create the Jaeger exporter
        exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(url)))
        if err != nil {
            return nil, err
        }
        tp := trace.NewTracerProvider(
            // Always be sure to batch in production.
            trace.WithBatcher(exp),
            // Record information about this application in an Resource.
            trace.WithResource(resource.NewWithAttributes(
                semconv.SchemaURL,
                semconv.ServiceNameKey.String(Name), //实例名称
                attribute.String("environment", Name), // 相关环境
                attribute.String("ID", Version),       //版本
            )),
        )
        return tp, nil
    }
  2. 在main中调用

    import (
        ...
        "go.opentelemetry.io/otel"
        "go.opentelemetry.io/otel/attribute"
        "go.opentelemetry.io/otel/exporters/jaeger"
        "go.opentelemetry.io/otel/sdk/resource"
        "go.opentelemetry.io/otel/sdk/trace"
        ...
    )
    
    //启动链路追踪,此处需要填写链路追踪采集地址
        //http://127.0.0.1:14268/api/traces
    
        tp, err := tracerProvider("http://jaeger_es_jaeger-collector_1:14268/api/traces")
        if err != nil {
            panic(err)
        }
        //将tp作为全局链路追踪的提供程序
        otel.SetTracerProvider(tp)

注意此处采集地址根据自己环境配置
我的此处是容器中环境 ,让此容器加入上边的network:
elastic-jaeger,注意此处环境network名跟所在文件夹有关,可自行查看(docker network ls)dirname_elastic-jaeger

  1. 中间件加入

    //grpc
    var opts = []grpc.ServerOption{
        grpc.Middleware(
            recovery.Recovery(),
            logging.Server(logger), //日志中间件
            tracing.Server(),       //链路追踪中间件
        ),
    }
    //http
    var opts = []http.ServerOption{
        http.Middleware(
            recovery.Recovery(),
            logging.Server(logger), //日志中间件
            tracing.Server(),       //链路追踪中间件
        ),
    }
  2. 浏览器打开 http://localhost:16686
    kratos 链路追踪jaeger存储es

  3. 还可直接使用 jaegertracing/all-in-one:latest 构建镜像 存储为文件 测试时可直接使用

    docker run -d -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778  -p 16686:16686 -p 14268:14268  -p 14269:14269   -p 9411:9411 jaegertracing/all-in-one:latest

参考连接
blog.csdn.net/l688899886/article/d...
ask.sov5.cn/q/XksQeOUuA9

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!