V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
oldboy627
V2EX  ›  程序员

请教个 Opentelemetry 的问题,有经验朋友看过来

  •  
  •   oldboy627 · 29 天前 · 1042 次点击
    目前我们打算使用 Opentelemetry 实现可观测性,现在已经使用了 OpenTelemetry SDK 来实现了 trace 部分,trace 收集被发送到 elastic 的 apm 服务器。现在要进行容器化迁移到 K8S ,同时使用 OpenTelemetry Collector 来自动化注入并收集 trace ,metrics ,使用 fluent-bit 来收集日志。现在有几个问题不太清楚,想问问一下。

    1.trace 和日志要如何关联?

    目前我们使用 fluent-bit 来收集应用日志,发送到 elasticsearch 中, fluent-bit 会根据日志类型在 elastic 中创建对应索引; trace 则是发送到 apm 中,可以在 apm 中看到 trace 的信息,那么这两者之间如何能关联起来呢,查看对应的 trace 的时候,可以跳到对应的日志中。
    18 条回复    2024-04-02 10:34:10 +08:00
    superfa
        1
    superfa  
       29 天前
    刚好看到这个,不过这个可能我解答不了(因为我只是个测试)。
    我就说说我们做的:我们自己对于 OT 探针采集的数据,经过 collector 上报到我们自己的可观测产品里面.你是不是能考虑在每个 trace 都加上要给对应的 id ,然后日志里面能对这个 id 进行关联,这样是不是能解决问题。
    oldboy627
        2
    oldboy627  
    OP
       29 天前
    @superfa 感谢,但是这个 trace id 要怎么添加到日志里呢,业务代码集成 otel sdk 的日志部分吗?
    superfa
        3
    superfa  
       29 天前
    @oldboy627 emmm....,这个就属于开发范畴了,我解释不来。
    我们自己是生成了一个 Tracid ,对应每笔数据。用 MD5 格式。
    如果觉得难搞,可以考虑采购 APM 产品(我们公司主要就做这个,当然你也可以考虑其他竞品,反正最终能解决你问题就行)
    jamel
        4
    jamel  
       29 天前
    otel 可以实现 日志、跟踪、指标 导出到一个地方,elastic 已经全面支持 otel 了。不需要特意将 traceId 打入到 apm 中。实际上 apm 接受 otel 数据的时候 就会转换好,里面已经有 traceId 了。
    oldboy627
        5
    oldboy627  
    OP
       29 天前
    使用 apm 产品的话,似乎就简单多了,可以把日志,metrics ,trace 都发送到 apm 服务器中,自动就关联起来了,直接查看到。
    jamel
        6
    jamel  
       29 天前
    都用 sdk 了,为啥 日志不也让 otel 给你做了
    jamel
        7
    jamel  
       29 天前
    是用 otel 的时候,优先考虑 出口商。otel 官网 有列出来 所有支持的出口商
    oldboy627
        8
    oldboy627  
    OP
       29 天前
    @jamel 是这样的,elastic 8 版本支持了,可以在 trace 旁边查看日志,但是我们架构师想要的是,使用 fluentbit 收集应用日志,然后在 fluentbit 的 output 根据错误级别来创建 elastic 索引,比如 app-error ,app-info 等索引,开发可以还像以前方式去查看。 直接都发送到 apm 中,索引就变成了一个。
    xderam
        9
    xderam  
       29 天前
    @oldboy627 这个用 ES 筛选一下就好了啊,为何执着于 ES 的索引?你们的架构师只管提需求不去管落地技术实现吗?
    oldboy627
        10
    oldboy627  
    OP
       29 天前
    @jamel 这个说来话长,因为之前应用还是传统方式部署的服务器上的,otel sdk 只使用了 trace 部分,日志部分还是 filebeat 来收集的。现在要容器化,打算使用 otel collector 来实现这些,减少对代码的侵入性。
    xderam
        11
    xderam  
       29 天前
    “查看对应的 trace 的时候,可以跳到对应的日志中。”最终要实现这个吧?这个的描述有点模糊。比如说是点击 traceid ,直接打开一个 url ,然后跳转一个新页将含有这个 traceid 的日志都显示出来?还是在一页里自动现实?响应速度要多少?技术实现有很多,估计症结在于“开发可以还像以前方式去查看”这个卡点。
    oldboy627
        12
    oldboy627  
    OP
       29 天前
    @xderam 这个是在 apm 点击 trace 的时候,比如 post 请求,可以看到相关信息,还可以关联到这个 post 请求对应的日志。 是这个需求,其实这个我已经在 elastic apm8 里面测试过了,trace 请求和日志可以关联起来。

    现在还是想保留以前的一部分,kibaba 可以选择 index(app-error ,app-info ,app-warn )等索引查看,又想 trace 和日志进行关联。
    xderam
        13
    xderam  
       29 天前
    @oldboy627 那这个其实就是为了保留以前的 10%的需求,而需要花费 90%的成本来实现了。(技术没有什么不能被实现的 逃。。。
    而且也是一个不顾新东西的使用场景,不愿意改变既有的操作习惯。既要又要的问题。如上所说,技术上应该可以实现,但成本可能比较高。比如双写,比如改造 kibana 的界面,比如自研。。。。
    不过,这些留给贵司的架构师自己评估吧。已经超纲了。
    RedisMasterNode
        14
    RedisMasterNode  
       29 天前
    爬了一下楼,听起来楼主的意思只是说,现在 Trace 部分是没问题的但是 Log 部分缺少 TraceID 在上面。

    这个不管怎么弄都是关联不了的,要推动的事情是先让研发把 Log 里面的 Metadata 字段补齐,例如 TraceID (、SpanID ),这些数据采集之后想怎么关联、在哪里关联都很容易。

    如果问题在于日志本身不具备 TraceID ,或者没有任何可标识一次请求的 ID ,那怎么搞都没用 orz
    oldboy627
        15
    oldboy627  
    OP
       28 天前
    @RedisMasterNode 老哥理解的没错。Trace 部分已经通过 OTEL SDK 实现了,在 Elastic APM 里查看信息。Log 这部分并没有集成 OTEL SDK ,所以还是普通的 json log 。想问问有没有可能通过日志里某个业务字段(比如 requestid)进行关联呢?
    leojia
        16
    leojia  
       28 天前
    java 的程序可以直接通过 MDC 将 traceId 和 spanId 记录到日志中,其他语言的不了解
    moonheart
        17
    moonheart  
       28 天前 via Android
    日志框架可以和 trace 框架集成,日志输出的时候自动获取当前上下文的 traceid 并且输出到结构化日志中,都有比较成熟的方案,可以看看你们用的日志框架是否支持
    RedisMasterNode
        18
    RedisMasterNode  
       28 天前
    将日志中的 ID 附带到 Trace Span 中,或者将 TraceID 附带到日志中。听起来后者会更快更容易实现。
    @oldboy627
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2528 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:17 · PVG 21:17 · LAX 06:17 · JFK 09:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.