JMeter 插件:使用 TraceId 跟踪线程组调用链

本教程将指导您编写一个简单的 JMeter 插件,在每个线程组执行时设置一个唯一的 TraceId,并将其记录到日志文件中,以跟踪调用链。该插件使用 Log4j2.xml 配置来控制日志输出。

1. 创建 TraceIdSampler 类

创建一个 Java 类,实现 JMeter 的 TestElement 接口,并在其中添加一个名为 'traceId' 的属性。

import org.apache.jmeter.testelement.AbstractTestElement;

public class TraceIdSampler extends AbstractTestElement {
    private static final long serialVersionUID = 1L;
    
    private String traceId;

    public String getTraceId() {
        return traceId;
    }

    public void setTraceId(String traceId) {
        this.traceId = traceId;
    }
}

2. 创建 TraceIdListener 类

创建一个 JMeter 监听器,实现 SampleListener 接口,在每次采样器执行前为当前线程组的 TraceIdSampler 设置一个唯一的 traceId。

import org.apache.jmeter.engine.event.LoopIterationEvent;
import org.apache.jmeter.engine.event.LoopIterationListener;
import org.apache.jmeter.samplers.SampleEvent;
import org.apache.jmeter.samplers.SampleListener;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;

import java.util.UUID;

public class TraceIdListener implements SampleListener, LoopIterationListener {
    private static final Logger log = LoggingManager.getLoggerForClass();

    @Override
    public void sampleOccurred(SampleEvent event) {
        TraceIdSampler traceIdSampler = (TraceIdSampler) event.getResultCollector().getTestElement();
        String traceId = traceIdSampler.getTraceId();
        log.info('TraceId: ' + traceId + ', ' + event.getResult().getResponseDataAsString());
    }

    @Override
    public void sampleStarted(SampleEvent event) {
        // Do nothing
    }

    @Override
    public void sampleStopped(SampleEvent event) {
        // Do nothing
    }

    @Override
    public void iterationStart(LoopIterationEvent event) {
        String traceId = UUID.randomUUID().toString();
        TraceIdSampler traceIdSampler = (TraceIdSampler) event.getSource();
        traceIdSampler.setTraceId(traceId);
        log.info('New TraceId: ' + traceId);
    }

    @Override
    public void testIterationStart(LoopIterationEvent event) {
        // Do nothing
    }

    @Override
    public void testIterationStop(LoopIterationEvent event) {
        // Do nothing
    }
}

3. 配置 JMeter 测试计划

在 JMeter 中创建一个 Thread Group,并在其中添加一个 TraceIdSampler 和一个 HTTP 请求采样器,并将 TraceIdListener 注册到监听器中。

4. 创建 Log4j2.xml 配置文件

创建一个 Log4j2.xml 文件,配置日志输出格式和位置。

<?xml version='1.0' encoding='UTF-8'?>
<Configuration status='WARN'>
    <Appenders>
        <File name='file' fileName='traceId.log'>
            <PatternLayout pattern='%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n'/>
        </File>
    </Appenders>
    <Loggers>
        <Root level='info'>
            <AppenderRef ref='file'/>
        </Root>
    </Loggers>
</Configuration>

5. 运行测试计划

将 Log4j2.xml 文件放置在 JMeter 的 bin 目录下。运行 JMeter 测试计划,可以看到每次循环都会输出一个新的 TraceId,并在每次采样器执行时输出相应的日志信息,其中包含 TraceId。

总结

通过创建自定义 JMeter 插件和使用 Log4j2.xml 配置,您可以轻松地将 TraceId 注入到每个线程组的执行过程中,并将其记录到日志文件中,方便您跟踪调用链并调试应用程序。

JMeter 插件:使用 TraceId 跟踪线程组调用链

原文地址: https://www.cveoy.top/t/topic/ojKZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录