[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

[IDCF] 一个关于我们在构建用于负载测试的 jmeter 执行环境时如何调整 CloudStackAPI 的故事。

我叫寺冈,是一名基础设施工程师。
由于某个项目需要在IDCF上搭建jmeter执行环境,我想
介绍一下我在搭建阶段使用CloudStack API设计的一些部分。

■你最初想做什么?


我想将其配置为在充当jmater控制器角色的服务器上启动jmeter时自动识别充当相应节点角色的服务器的IP地址。

是的,这就是我的意思。
Jmeter有一种称为
远程测试的控制器服务器的配置文件
中注册运行远程jmeter的服务器(节点)
有可能产生比注册服务器数量更多的负载。做吧。

但是,注册服务器的数量会根据生成的负载而变化,
并且每次更改配置文件都很麻烦,因此

在控制器端仅确定正在运行的节点启动jmeter时,

■你到底做了什么?

在jmeter中注册远程服务器时,
请在“jmeter.properties”文件中的“remote_hosts”项中添加设置。
示例如下↓

远程主机=10.31.X.XX,10.31.X.XX,10.31.X.XX

如上所示,您将添加以“,”分隔的IP地址,因此
首先您需要一次性获取远程服务器的IP地址。
我使用 CloudStackAPI 来获取它。

CloudStackAPI是用python编写的,因此可以使用pip相对轻松地安装它。
IDCF官方页面有介绍安装方法,请参考。

入门 | IDCF 文档

官方页面上也总结了API参考资料,请看一下。

API 参考 | IDCF 文档

让我们开始吧。
这是一次性获取远程服务器IP地址的命令↓

cloudstack-api listVirtualMachines --name "jmeter-node" --state "正在运行" | jq -r '.listvirtualmachinesresponse.virtualmachine[].nic[].ipaddress' | tr "\n" "," | s/,$//g"

分解这个命令的作用,它看起来像这样:

① 使用CloudStackAPI获取虚拟服务器信息列表

②使用jq命令格式化json数据

③使用tr命令将格式化的json数据格式化为“,”分隔格式

① 使用CloudStackAPI获取虚拟服务器信息列表

cloudstack-api listVirtualMachines --name“jmeter-node”--state“正在运行”

这部分。

这次,我在“CloudStackAPI”的众多方法中使用了“listVirtualMachines”。
顾名思义,这是一种获取“虚拟服务器信息列表”的方法。
该方法的执行结果以如下json格式返回。

$ cloudstack-api listVirtualMachines { "listvirtualmachinesresponse": { "count": 1, "virtualmachine": [ { "nic": [ { "ipaddress": "XXX.XXX.XXX.XXX" } ] } ] } }

*除“ipaddress”之外的许多项目都会作为响应返回,但
我们在本文中仅摘录了必要的部分。

您所要做的就是从这个 json 数据中提取“ipaddress”项的值!
实际执行命令时,使用“--name”缩小到将成为节点的服务器
,并使用“--state”缩小其中状态为“正在运行”的虚拟服务器。
您的意思是“仅从正在运行的节点中提取信息,不包括已停止的节点”。

②使用jq命令格式化json数据

jq -r '.listvirtualmachinesresponse.virtualmachine[].nic[].ipaddress'

这部分。

由于 CloudStack API 响应以 json 数据形式返回,因此
您必须格式化 json 数据,以便仅提取所需的数据。
在本例中,该项目是“ipaddress”。
我们将告诉 jq 命令要从分层结构中的 json 中提取数据。

③使用tr命令将格式化的json数据格式化为“,”分隔格式

tr "\n" "," | sed -e "s/,$//g"

这部分。

当您在②中格式化json数据时,它将具有以下格式。

10.31.X.XX 10.31.X.XX 10.31.X.XX

...这是礼貌的换行,不是吗?
事实上,它无法嵌入到jmeter配置文件中,因此
需要将换行代码转换为“,”。
另外,如果进行转换,末尾会添加一个额外的“,”,因此
请使用 sed 命令删除该部分。

然后...

10.31.X.XX,10.31.X.XX,10.31.X.XX

干得好,现在您可以将其嵌入到您的配置文件中。
之后,在启动jmeter之前编辑配置文件。
让我们创建一个简单的启动脚本。

$ vi start-controller.sh #!/bin/sh NODE=$(cloudstack-api listVirtualMachines --name "jmeter-node" --state "正在运行" | jq -r '.listvirtualmachinesresponse.virtualmachine[].nic[] .ipaddress' | tr "\n" "," | sed -e "s/,$//g") sed -i -e "s/^remote_hosts=.*/remote_hosts=${NODE}/" /usr /local/jmeter/bin/jmeter.properties /usr/local/jmeter/bin/jmeter & $ ./start-controller.sh

是的,现在启动 jmeter 时将自动识别节点。
就这样,非常感谢。

如果您觉得这篇文章有帮助,请点赞!
0
加载中...
0 票,平均:0.00 / 10
766
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

寺冈由纪

于 2016 年加入 Beyond,目前是他担任基础设施工程师
MSP 的第六个年头,他负责排除故障,同时
使用 AWS 等公共云设计和构建基础设施。
最近,我
一直在使用 Terraform 和 Packer 等 Hashicorp 工具作为构建 Docker 和 Kubernetes 等容器基础设施以及自动化操作的一部分,并且我
还扮演了在外部学习小组和研讨会上发言的传播者的角色。

・GitHub
https://github.com/nezumisannn

・演示历史
https://github.com/nezumisannn/my-profile

・演示材料(SpeakerDeck)
https://speakerdeck.com/nezumisannn

・认证:
AWS认证解决方案架构师-
谷歌云专业云架构师