V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
oldboy627
V2EX  ›  程序员

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

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

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

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

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