【问题标题】:skywalking agent NOT support java-grpc high versionsskywalking 代理不支持 java-grpc 高版本
【发布时间】:2022-12-20 12:15:15
【问题描述】:

我使用最新的 skywalking agent(当前为 8.13.0),发现跟踪跨度未针对 grpc 1.43.2 或 1.51.0 报告,但针对 java-grpc 1.29.0 版本报告。

环境:

  1. app测试源码为官方java-grpc示例工程:HelloworldServerHelloWorldClient
  2. 调用示例的gRPC SayHello 并在wkywalking 网页中查看应用程序跟踪结果。

    通过一些研究,发现 NettyClientStreamInstrumentation 使用 grpc netty 1.33.0 的固定版本

    /**
     * Intercept constructor to obtain server IP.
     * grpc Low version(eg:1.6.0): use io.grpc.netty.NettyClientStream.
     * grpc High version(eg:1.33.1): use io.grpc.netty.shaded.io.grpc.netty.NettyClientStream.
     */
    public class NettyClientStreamInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
    ...
    

    但我不确定它是否对跟踪报告有效。

    有一些问题希望咨询:

    1. 代码限制是grpc报告吗?
    2. 测试了哪个java-grpc版本支持?
    3. 如何确定代理报告或不报告跟踪跨度?

      谢谢

【问题讨论】:

    标签: grpc-java skywalking


    【解决方案1】:

    我没有跟随。您是否正在升级代理代码库中的 gRPC 依赖项?

    【讨论】:

    • 嗨,我认为它应该是最新的代理 gRPC deps。代理代码库是从 skywalking 网站的 tar 文件中提取的。我使用的是最新的 skywalking agent jar,它是 8.13.0,grpc 插件是apm-grpc-1.x-plugin-8.13.0.jar
    • 这是两件事。 agent 的 gRPC 依赖和 gRPC 插件之间没有关联。 1. gRPC 依赖用于内部遥测数据上报。 2. gRPC 插件用于跟踪 gRPC 请求。
    • 明白了,似乎应该检查其他库。但是如何查看gRPC dependency is for internal telemetry data reporting呢?我正在使用 grpc-allskywalking-agent tar。还没有其他人。
    • 如果你的意思是内部依赖,那么是的,gRPC 一如既往地对 netty 有版本要求。选择 gRPC-java 存储库上推荐的版本。由于 CVE 修复,SkyWalking 代理有时会升级 netty 版本。如果您打算升级 gRPC-java,请确保 netty 版本匹配。
    • 谢谢。我将检查 skywalking netty 版本以及它将支持哪个 gRPC-java,但最好进行测试。这也是我对第二个问题的困惑,没有找到一个官方网页列出所有支持 grpc-java 版本的代理版本。
    【解决方案2】:

    grpc-java 本身支持基于 OpenCensus 的跟踪,即用于 grpc 内部事件,例如发送或接收 grpc 消息,并重试。 (https://github.com/grpc/grpc-java/blob/master/census/src/main/java/io/grpc/census/CensusTracingModule.java) 不清楚agent中grpc tracing是否启用。

    代理可以针对自己的请求拥有自己的跟踪工具。

    所以不清楚您对 grpc-census 跟踪或应用程序的跟踪有疑问。但 NettyClientStreamInstrumentation 不太可能影响跟踪生成本身。

    当没有生成跨度报告时,也可能是跨度/跟踪导出器配置不正确。

    【讨论】:

    • grpc-java 版本会影响 span/trace exporter 配置吗?令人困惑的是低版本的 grpc-java(1.29.0) 可以工作,但 1.43.2 不能在相同的环境下工作。
    • 我会澄清它的问题,专注于使用示例的SayHello grpc API 的应用程序跟踪
    【解决方案3】:

    我遇到了同样的问题。该代理适用于检测 grpc 1.30.0,但在 1.48.1 和 1.51.1 上失败。

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 2020-09-13
      • 2014-08-18
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多