想修改skywalking8.4.0版本中traceId的生成规则,比如在traceId中加些环境或者其他的一些标识内容。
全网搜到的是6版本内容,有博主写到不支持自定义。求指导
您好,关于SkyWalking 8.4.0版本中traceId的生成规则,是可以通过自定义实现的。
具体的实现方式如下:
public interface TraceIdGenerator {
/**
* Generate a new trace id.
* @param context Carrier from remote, can be null.
* @return new trace id.
*/
String generate(ContextCarrier context);
}
# 自定义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 个字符。
在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,并在其中添加环境信息。
在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。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。