博客/社区

FourthDown NFL实况API如何衡量《Prometheus》、《Jaeger》和《Grafana Cloud》的表现

2021年2月5日3分钟

Pratik Thanki是软件工程师Trayport,为能源交易市场开发专门的工具和功能。在这篇博文中,他通过他的NFL实况API深入挖掘了他对橄榄球的热情,FourthDown,并展示了如何Grafana云是他可观察性堆栈的核心。

关于FourthDown

FourthDown是一个API,它允许痴迷于数据的NFL球迷访问各种各样的信息,从赛程和球队细节到比赛数据和球员的联合训练。

开发这个API的动机是创建一个语言无关的工具,用于访问实时比赛数据,就像现有的工具/库满足Python/R用户的需求一样。(API利用了来自开源R包的数据,nflfastr)。FourthDown API是围绕HTTP REST协议组织的,具有可预测的面向资源的url,返回json编码的响应,并使用标准的HTTP响应代码和动词。

大多数端点共享相同的基本查询参数集:GameId、Season、Team和Week。这个API是用OpenAPI格式记录的,并且得到一些供应商扩展的支持。

在后面宣布一个新的免费计划今年早些时候,我很兴奋地使用Grafana云来监控第四down。

API在设计时考虑到了可观察性,并利用了普罗米修斯而且Jaeger.我以前使用这些工具的经验帮助我更快地集成它们以收集监视数据。

从技术角度来看,API是在此基础上设计和构建的ASP。网络核心并利用存储库模式。API的总体体系结构描述如下。

普拉蒂克(左)和他的弟弟在特威克纳姆体育场观看NFL伦敦奥运会(亚利桑那红雀队对阵洛杉矶公羊队)。

可观测性原则

在设计应用程序可观察性时考虑了三个关键组件:

日志记录:关于系统中发生的事件的信息,它可以从抛出内存不足异常的实例和启动时没有反映预期值的应用程序配置等不同。对于完全理解系统中发生了什么非常有用。

跟踪:系统接收到的端到端请求信息。跟踪类似于跨越多个应用程序的堆栈跟踪。跟踪是识别应用程序性能中的潜在瓶颈(例如异步web请求、序列化或数据处理)的良好起点。

指标:系统运行的实时信息。可以定义kpi来构建警报,允许在性能下降时采取主动步骤。与日志和跟踪相比,使用度量收集的数据量随着系统负载的增加而保持不变。当度量超过某个阈值时,通过发出警报来实现应用程序问题。示例包括CPU使用率比以前更高、增加了5xx个请求或平均响应时间。

发现

在我们开始使用监视功能之后,很明显API的性能不是最优的。用积家很容易发现这一点。下面是一个同步HTTP web请求的跟踪示例:

快速找到这个直接影响终端用户性能的瓶颈是一个巨大的胜利。在本例中,改进多个HTTP web请求的发送方式可以使响应时间提高5倍。通过这个更改,我们得到以下跟踪:

Grafana-Jaeger集成视图:

监视API的状态:

结论

开始使用Grafana Cloud启发我进一步研究监视的其他方面,现在我很欣赏开源的可观察性生态系统——Prometheus、Jaeger和Grafana,更不用说我没有在这个项目中使用的其他框架和库了。

接下来,我想用基于prometheus的警报扩展对Grafana Cloud的使用,以实现主动监控,并将应用程序日志与洛基

如果您对使用FourthDown API感兴趣,那么开始使用任何语言都是非常简单的。你可以查看这篇文章的代码片段,FourthDown API样本,或FourthDown API文档