grzegorznowak.server_performance_assesment
Ansible 服务器性能评估(角色)
使用 Ansible 了解您的机器/容器/云主机的性能。
在新主机上运行时,这将让您了解基线性能,并判断其是否满足您的目标。
请注意,该项目只是满足我们运维团队的即时需求,但在许多情况下已经足够。 如果您能提供帮助,我们很高兴能够扩展到更多系统和场景。
触发原因
该项目的触发因素是我们云机器表现出的某种随机行为。为了保护提供商的名称,我们将其编码为一个完全不相关且神秘的代号:“鲨鱼”。
鲨鱼擅长快速创建新的云机器,我们称这些机器为磷虾。磷虾的性能在鲨鱼的文档中并没有明确说明,只提到它们有__共享 CPU__。具体来说,文档中没有告诉您可以期待多高的磁盘或内存 IOPS 以及内存吞吐量,或底层虚拟机的 CPU 家族;而且您得到的机器很可能是在性能的下限。
鲨鱼并不在乎创建相同的磷虾,而只关心创造大量的磷虾,因此它会尽可能多地在单个虚拟机上挤入磷虾,直到再也装不下为止,此时用户所看到的性能下降是非常明显的。
作为用户,您关心的仅仅是您所支付的(按小时)每次创建的机器都具有相同的规格和能力。显然,这对您的应用/业务至关重要,而鲨鱼方面官方并没有任何信息告诉您情况会有所不同(除了在使用特定类型的共享磷虾时,官方文档中提到的共享 CPU 空间的波动性 - 但那只是它们提到的 CPU)。
使用案例
该角色旨在允许双向检查。
- 首先,您希望在实际配置之前运行它,以确保您的基线与假设一致。如果偏差很大,您可能会选择丢弃磷虾并重新创建。
- 然后,您希望按计划运行此功能,或通过特定事件(例如,当您从其他工具看到应用响应时间下降时)触发它,以查看您面临的实际问题是否与基础设施性能不足有关。至少,在您开始责备开发人员推送未优化代码之前,您可以这样做。或者,您可能无论如何都可以这样做,因为我们坚信“尽早发布,遇到问题再优化”的思维游戏。
低级前提
计划是在机器性能能力上建立一套配置阻止的断言,使用几乎没有最少的额外软件。
因此,最终结果可能更多的是一种启发式而不是实际的肯定/否定答案,但作为测试预警系统是完全合适的。
测试
./bootstrap_testing.sh
source testing_env/bin/activate
read -s PASS && ANSIBLE_BECOME_PASS=$PASS molecule verify -s lxd
此时会保持静默,以便您输入 sudo 密码。输入后按回车继续。
使用方式
从 Git 仓库克隆时
将该角色添加到您的 playbook.yml
中,并将参数调整为所需的基线性能。
- name: 验证
hosts: all
become: true
roles:
- role: ansible-server-performance-assessment
spa_disk_write_MB_per_s_assertion: 300 [以 MB/s 为单位,调整至适合的数值]
spa_disk_read_MB_per_s_assertion: 300 [以 MB/s 为单位,调整至适合的数值]
# 网络基准
# 感谢 speedtest.net!我从没想过在生产环境中使用你,但现在我们做到了一起。
spa_speedtest_tmp_file: /tmp/spa_speedtest.out
spa_downlink_assertion: 100 # 单位为 Mb/s(比特每秒)
spa_uplink_assertion: 100 # 单位为 Mb/s(比特每秒)
# 内存基准
spa_memory_speed_assertion: 10000 # 单位为 MB/s(字节每秒)
# CPU 基准
spa_cpu_event_per_second_assertion: 300 # Sysbench 报告的每秒事件数量
tags:
- benchmark
- never
上述示例将只有在传递 --tags=benchmark
参数给 Ansible 时才会顺利运行
(为了更容易与现有的 playbook 文件合并)。
限制
该角色在非 en
语言环境下效果不佳或根本无法使用,因为某些基准软件的解析依赖于特定词汇。如果有更懂 awk 和正则表达式的人来进行第二轮开发,问题可以得到解决。
ansible-galaxy install grzegorznowak.server_performance_assesment