You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jaeger gRPC存根查询指标及追踪数据?技术咨询

使用Jaeger gRPC API获取追踪数据

核心gRPC服务说明

Jaeger的追踪查询能力由QueryService提供,对应jaeger-idl中proto/query.proto定义的服务接口,常用方法包括:

  • GetTrace: 根据Trace ID获取单个完整追踪数据
  • FindTraces: 按服务名、时间范围、标签等条件批量查询追踪
  • FindServices: 获取当前所有注册的服务名列表

实操步骤

1. 确认客户端存根有效性

确保你通过protoc生成的存根文件包含QueryServiceClient接口及对应方法(比如Go语言会生成QueryServiceClient和NewQueryServiceClient函数),存根文件需正确导入到项目中。

2. 建立gRPC连接

Jaeger Query服务默认监听gRPC端口16685,创建客户端连接时需指定该端口:

import (
    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials/insecure"
    pb "path/to/your/generated/proto" // 替换为你的存根包路径
)

func main() {
    // 开发环境使用无加密连接,生产环境建议配置TLS
    conn, err := grpc.Dial("localhost:16685", grpc.WithTransportCredentials(insecure.NewCredentials()))
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    // 创建QueryService客户端实例
    client := pb.NewQueryServiceClient(conn)
}

3. 调用查询方法

示例1:按服务名查询指定时间范围的追踪

import (
    "context"
    "time"
)

// 定义查询时间范围(最近1小时)
endTime := time.Now().UnixNano()
startTime := endTime - 3600*1e9 // 转换为纳秒级时间戳

req := &pb.FindTracesRequest{
    Query: &pb.Query{
        ServiceName:  "your-target-service", // 替换为目标服务名
        StartTimeMin: startTime,
        StartTimeMax: endTime,
        MaxTraces:    10, // 限制返回的追踪数量
        // 可选:添加标签过滤
        Tags: []*pb.KeyValue{{Key: "env", Value: &pb.Value{Str: "production"}}},
    },
}

// 发起查询请求
resp, err := client.FindTraces(context.Background(), req)
if err != nil {
    panic(err)
}

// 遍历处理返回的追踪数据
for _, trace := range resp.Data {
    println("Trace ID:", trace.TraceID)
    for _, span := range trace.Spans {
        println("Span ID:", span.SpanID, "操作名:", span.OperationName)
    }
}

示例2:根据Trace ID获取单个追踪

req := &pb.GetTraceRequest{
    TraceID: "your-trace-id-here", // 替换为目标Trace ID
}

resp, err := client.GetTrace(context.Background(), req)
if err != nil {
    panic(err)
}

if resp.Trace != nil {
    println("获取到追踪数据,包含", len(resp.Trace.Spans), "个Span")
}

常见注意事项

  • 确保Jaeger Query服务已启动并监听16685端口,可通过启动参数--grpc-port=16685指定端口
  • 时间参数必须使用纳秒级时间戳,不要误用毫秒或秒级单位
  • 生产环境务必配置TLS加密连接,避免使用不安全的insecure.NewCredentials()
  • 查询参数的标签值需匹配Jaeger中存储的格式(字符串、数字等)

内容的提问来源于stack exchange,提问作者diviquery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:13:14