博客/工程

我们如何使用转k6负载测试工具开发Grafana吗

2021年8月23日6分钟

GrafanaCONline在6月的最后一天,我们的首席执行官Raj达特宣布bob电竞频道Grafana实验室获得了转k6,该公司背后的开源的负载测试工具。事实上,我们的关系转k6开始之前两年多。

在2019年初,我们正在取代Grafana“记住我”饼干的解决方案的一个短暂的令牌Grafana 6.0版本的解决方案。在开发,我们想测试短暂的刷新令牌将如何表现当系统负载较重的情况下,和/或当扩展和运行多个Grafana实例。因此,开始寻找一个OSS负载测试工具。

我只有一些有限的使用经验蝗虫,但它在Python实现,还需要实现负载测试在Python中,我从来没有使用的语言。好一件事我记得当时我喜欢的是,它拥有一个UI控制和可视化负载测试结果。

Grafana端最Grafana实验室的其他软件的使用去实现。bob电竞频道我们寻找一个可以运行和管理的工具和其他一样的简单性和易用性工具和服务,而且还将允许负载测试实现的语言我们中的许多人已经在使用。

输入转k6

搜索后,我碰巧发现转k6检查了OSS和需求。负载测试是使用JavaScript编写ES2015 / ES6 -一个不错的选择,因为Grafana前端/ UI已经使用它和后端开发人员,包括我在内,都熟悉它。在尝试之前,我记得我非常印象深刻的文档和示例显示了简单的工具,它看起来多么简单开始编写和运行负载测试。

转k6是一个高性能的负载测试工具,在JavaScript脚本。为了达到这个目标,权衡的是它并不在浏览器中运行,因此它不会呈现web页面一样一个web浏览器。这种方法的优点是大大减少资源密集型,因此更划算,比其他浏览器测试工具。转k6负载测试是由于这一点,最好是写针对HTTP API和/或HTTP端点返回非视觉反应,很容易解释机器,比如JSON。在运行转k6负载测试时,有大量的选项,但作为一个简化版本,您可以使用一个固定的时间或固定的迭代次数和数量的虚拟用户(VUs开头)来模拟负载。此外,转k6支持两种不同的方式来验证负载测试的结果:检查(维护)和阈值(通过/失败)。有关更多信息,请参见转k6文档

这是一个基本的转k6脚本看起来像:

从“转k6进口http / http ';从“转k6”进口{睡眠};出口的默认函数(){http.get (“https://test.k6.io”);睡眠(1);}

我开始写一个负载测试,模拟用户加载Grafana仪表板,每5秒刷新。场景包括一个初始迭代,称为设置函数,登录用户,其次是下一个迭代使得每一个注释请求和20个数据源请求。每个迭代验证了使用检查,例如,正确设置登录的用户身份验证cookie。此外,转k6验证每个HTTP请求是否已经返回预期的200 OK状态代码默认(尽管这种行为可以改变)。

使负载测试的代码更容易阅读,提供HTTP客户机的代码与Grafana交互的登录端点和HTTP API和效用函数已经被提取可重用的模块。这是目前所有共享的负载测试。我们还创建了一个shell脚本作为一个方便的包装转k6码头工人的形象。它允许我们为运行负载测试提供一个API与理智的违约,而让我们重写某些参数在运行本地与扩展场景。检查所有的细节和readme负载测试目录Grafana GitHub库。

与我以前的经验使用蝗虫相比,我真的很喜欢这一事实,转k6开发者的开发流程进行了优化。终端的运行负载测试的能力和获得即时反馈很好地组织输出很容易分享文本表示真的很不错,让我的生活作为一个开发人员更容易。

的另一个伟大的事情,我不知道首先是能够监视Grafana或应用程序而转k6负载测试正在运行。我们有一个Grafana高可用性(HA)测试设置使用码头工人组成。使用这个设置,我们可以扩大Grafana实例的数量,使用MySQL或Postgres作为后端数据库,和使用普罗米修斯洛基摄取Grafana和数据库指标和日志。我们可以转k6负载测试运行在此设置,并与转k6负载测试结果我们可以想象Grafana,码头工人,和数据库标准存储在普罗米修斯,和尾日志存储在洛基,允许我们识别潜在的瓶颈和问题和/或帮助我们验证特定负载测试执行如预期。

Grafana❤️转k6

使用转k6来验证新的短暂的令牌解决方案的实现是一个伟大的成功。我们设法确定瓶颈和代码在实际发货之前代码中的错误。

几个月后,我们接到了报告,升级到Grafana v6.2中结合使用Grafana身份验证代理导致很多500内部服务器错误当试图加载数据仪表盘面板。一个身份验证代理负载测试实现复制的问题,开发一个解决方案通过运行负载测试,验证解决方案的比较结果。转k6再次帮助我们追踪一个严重的错误。

这里有一些其他的例子,我们是如何成功地使用转k6:

  • 一个建议改进短暂的令牌的解决方案可以验证通过运行现有的负载测试,减少风险引入新的缺陷,并迅速把它发布给最终用户。
  • 提高数据库查询的性能通过实现转k6负载测试,运行测试和优化查询性能慢使用不同的索引和数据库查询重写的原始查询。
  • 本条所博客,我们使用转k6调查如何防止DDoS攻击和优化吞吐量呈现图像。

结论

我们已经得到很多有价值的转k6负载测试,现在转k6是Grafana实验室的一部分家庭,我期待着与更多的工具。bob电竞频道

对于那些沿着同样的道路我们早在2019年,你应该知道转k6了集成与CI / CD的工具,转k6云可以使用定期负载测试这样你可以留意性能会随着时间而改变。这应该让你更有前瞻性和捕捉bug和问题。

我很高兴地报告,还有一个正式转k6云Grafana插件,所以你可以查看您的测试结果存储在转k6 Grafana云。或者,您也可以使用转k6的普罗米修斯remote_write特性送指标Grafana云。了解更多关于使用转k6 Grafana,一定要注册的免费研讨会9月16日”介绍与Grafana和转k6负载测试。”