如何将JMeter分布式测试中2台Slave的server.log合并到Master节点
JMeter分布式压测从节点日志合并到主节点的实现方案
下面分三种场景给出可落地的操作方法:
场景1:压测还未启动,希望自动完成日志合并
提前配置后压测过程中从节点日志会自动同步到主节点,不需要事后操作:
- 编辑所有从节点的
log4j2.xml配置文件,在Appenders节点下添加SocketAppender,指向主节点IP和自定义的日志接收端口(示例用9999端口):
<Socket name="SocketMaster" host="主节点IP" port="9999" protocol="TCP"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c{1}:%L - %m%n"/> </Socket>
- 在同一配置文件的Root节点下,新增SocketAppender的引用:
<Root level="info"> <AppenderRef ref="Server" /> <AppenderRef ref="SocketMaster" /> </Root>
- 编辑主节点的
log4j2.xml配置文件,添加SocketReceiver接收从节点日志,直接写入本地的jmeter-server.log即可。
场景2:压测已经结束,需要事后合并已有日志
不需要调整配置,直接拉取从节点日志合并即可:
- 第一步:从主节点通过scp拉取两台从节点的日志到本地,示例命令(请替换为你实际的节点IP和日志路径):
# 拉取slave-1日志 scp root@192.168.3.101:/usr/local/jmeter/bin/jmeter-server.log ./slave1.log # 拉取slave-2日志 scp root@192.168.3.102:/usr/local/jmeter/bin/jmeter-server.log ./slave2.log
- 第二步(可选):给从节点日志添加来源标识,方便后续排查时区分日志所属节点:
sed -i 's/^/[slave-1] /' ./slave1.log sed -i 's/^/[slave-2] /' ./slave2.log
- 第三步:按时间顺序合并所有日志到主节点的
jmeter-server.log中:
cat ./jmeter-server.log ./slave1.log ./slave2.log | sort -t ' ' -k 1,2 > ./merged_temp.log && mv -f ./merged_temp.log ./jmeter-server.log
说明:默认JMeter日志前两个字段为日期、时间,上述命令会按日志生成时间排序合并,不会出现时序混乱。如果你的日志格式做过自定义,调整
-k参数后的排序字段即可。
场景3:长期进行分布式压测,需要自动聚合日志
可以配置rsyslog服务实现日志实时同步:
- 所有从节点配置rsyslog规则,监听
jmeter-server.log的新增内容,实时发送到主节点 - 主节点配置rsyslog接收规则,将收到的从节点日志直接追加到本地
jmeter-server.log即可,配置完成后所有压测的日志都会自动合并,不需要人工干预。
内容的提问来源于stack exchange,提问作者user14435933
相关产品推荐
相关产品推荐

