开发者社区> 问答> 正文

skywalking traceId如何自定义生成规则?

想修改skywalking8.4.0版本中traceId的生成规则,比如在traceId中加些环境或者其他的一些标识内容。

全网搜到的是6版本内容,有博主写到不支持自定义。求指导

展开
收起
等下雨季节 2023-06-21 17:28:42 1458 0
3 条回答
写回答
取消 提交回答
  • 您好,关于SkyWalking 8.4.0版本中traceId的生成规则,是可以通过自定义实现的。

    具体的实现方式如下:

    1. 实现 TraceIdGenerator 接口
    public interface TraceIdGenerator {
        /**
         * Generate a new trace id.
         * @param context Carrier from remote, can be null.
         * @return new trace id.
         */
        String generate(ContextCarrier context);
    }
    
    1. 在 SkyWalking 的配置文件中添加如下配置:
    # 自定义TraceId生成器
    # 将其中的 com.example.TraceIdGenerator 替换为实现 TraceIdGenerator 接口的类的全限定名
    trace.traceid.generator=com.example.TraceIdGenerator
    

    这样,SkyWalking 就会使用您自定义的 TraceIdGenerator 来生成 traceId。

    需要注意的是,自定义 TraceIdGenerator 时,需要遵循 SkyWalking 的 traceId 格式,即:{traceId}-{segmentId}-{spanId}。其中,traceId、segmentId、spanId 都是由 16 进制数表示,且长度都为 16 个字符。

    2023-06-23 14:31:56
    赞同 展开评论 打赏
  • 云端行者觅知音, 技术前沿我独行。 前言探索无边界, 阿里风光引我情。

    在Skywalking 8.4.0版本中,可以通过设置参数来修改traceId的生成规则。具体步骤如下:

    在配置文件中添加新的参数

    在Spark配置文件中添加以下参数:

    spark.executorEnv.SKYWALK_TRACE_ID_GENERATOR_CLASS_NAME=com.alibaba.otter.trace.engine.spark.SparkTraceIdGenerator

    其中,com.alibaba.otter.trace.engine.spark.SparkTraceIdGenerator是一个实现了org.apache.skywalking.apm.util.TraceIdGenerator接口的类名。

    修改org.apache.skywalking.apm.util.TraceIdGenerator的实现类 根据自己的需求修改org.apache.skywalking.apm.util.TraceIdGenerator的实现类,并实现其中的generate方法。例如,下面是一个在org.apache.skywalking.apm.util.TraceIdGenerator中添加环境信息的示例:

    import com.alibaba.otter.trace.engine.spark.SparkTraceIdGenerator;

    public class MyTraceIdGenerator extends SparkTraceIdGenerator {

    @Override
    public String generate(String jvmName, int port, String hostName, int hostPid, String label) {
        return "my_trace_id_with_env_info:" + label;
    }
    

    }

    在上面的示例中,MyTraceIdGenerator类实现了SparkTraceIdGenerator接口,并重写了其中的generate方法,在生成traceId的同时,添加了环境信息hostName和hostPid。

    将修改后的org.apache.skywalking.apm.util.TraceIdGenerator类注册到Spark中。

    在Spark配置文件中添加以下参数,以启用修改后的TraceIdGenerator类:

    spark.trace.id.generator.class=com.alibaba.otter.trace.engine.spark.MyTraceIdGenerator

    这样,在使用Skywalking时,就会使用MyTraceIdGenerator类生成traceId,并在其中添加环境信息。

    2023-06-23 07:56:39
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在SkyWalking 8版本后,官方提供了自定义TraceId的功能,可以通过实现org.apache.skywalking.apm.toolkit.trace.TraceIdGenerator接口来自定义TraceId的生成规则。

    具体操作步骤如下:

    创建一个类,实现TraceIdGenerator接口,并重写generate()方法。例如:

    java Copy public class CustomTraceIdGenerator implements TraceIdGenerator { @Override public String generate() { // 自定义TraceId生成规则 String env = System.getenv("ENV"); String traceId = UUID.randomUUID().toString(); return env + "-" + traceId; } }

    
    注意,以上代码中的`generate()`方法是自定义生成TraceId的方法,可以根据需要修改生成规则。在上述示例中,我们将环境变量`ENV`和UUID结合起来生成TraceId。
    
    在skywalking-agent.config中配置traceIdGenerator参数,将其值设置为自定义的TraceId生成类的全路径名。例如:
    
    Copy
    traceIdGenerator=your.package.CustomTraceIdGenerator
    

    其中,your.package是自定义TraceId生成类的所在包名。

    重启SkyWalking Agent,使配置生效。

    以上操作完成后,SkyWalking Agent会自动加载自定义的TraceId生成类,并使用其生成TraceId。

    2023-06-21 17:39:07
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载