介绍
@aerogear/apollo-voyager-metrics 是基于 Apollo 服务器和 Voyager GraphQL 服务创建的 npm 包,它提供了测量 GraphQL API 性能和吞吐量的功能。它在服务器端和客户端之间建立了一个可观察通道,将性能指标(如请求数量、平均响应时间、最长响应时间等)发送到 Graphite 或类似的指标聚合服务。这个包不仅可以通过报告来帮助我们了解 API 应用程序的性能瓶颈,还可以指导我们如何去优化我们的 GraphQL API。
安装
npm install @aerogear/apollo-voyager-metrics
使用
使用 @aerogear/apollo-voyager-metrics 非常简单。只需将它添加到 Apollo Server 的中间件列表中,并按照指南配置:
-- -------------------- ---- ------- ----- - ------------ - - ------------------------- ----- - ------------- - - -------------------------------------------- -- -- -------- ---- ----- ------- - --------------- ------- ------------------------ ------- -------------- --- -- ------ ------ ----- ------ ----- ------ - --- -------------- --------- ---------- -------- -- --- -- -- -- --- --- -------- ---------------------- --- ----------------------- --- -- -- - --------------- ------ ----- -- --------- ---展开代码
现在,我们已经将 @aerogear/apollo-voyager-metrics 添加到了我们的应用程序中,但这只是第一步。要想看到结果,我们需要配置一个 Graphite 网关或类似的指标聚合服务,这在后面的部分中将描述。
配置
@aerogear/apollo-voyager-metrics 使用 createMetrics
工厂函数创建用于记录 Graphite 指标的实例。该函数接受一个配置对象作为参数,该对象有以下属性:
server
: 指标聚合服务的 URL。Graphite 网关是最受欢迎的选择,例如 Grafana。prefix
: 用于标识您的 Apollo Voyager GraphQL 实例的字符串前缀。这有助于在一个 Graphite 实例中容纳多个服务和指标。例如:"graphql.api"
。
通过传递以下配置对象,我们已经将 @aerogear/apollo-voyager-metrics 安装到了我们的应用程序中。现在,我们需要配置 Graphite 或其他指标聚合服务来接收度量平均值。
服务器端 Graphite 配置
Graphite 是一个开源的指标聚合服务,被广泛用于监控和分析性能数据。使用 Graphite 来可视化和查询 GraphQL 指标的过程非常简单,只需安装 Graphite 和 Graphite Web 然后在其配置中添加一个新的 Carbon 数据源,该数据源将指向您的 API 服务器。
安装 Graphite:
sudo apt-get update sudo apt-get install graphite-web graphite-carbon
安装完成之后,我们需要编辑 Carbon 配置文件 /etc/carbon/carbon.conf
来将时间戳统一为 UTC 并指定监听的地址和端口:
-- -------------------- ---- ------- ------- - --- ---- ---- --------- - --- ---------- - ------ ---------------------- - ------- ------------------------- - ------- ----------------------- - ------- - ---- ------------------ - ---- -------------------- - ---- ----------------- - ----展开代码
现在,我们需要打开 Carbon 缓存配置文件 /etc/carbon/storage-schemas.conf
来配置保存度量值的呈现精度并解决不同时间跨度内的数据点的确认问题:
[default_1min_for_1day] pattern = .* retentions = 60s:1d [default_1h_for_10day] pattern = .* retentions = 1h:10d
在配置图形进行查询之前,我们需要更新 Graphite 来知道我们正在监视网站的度量值。我们添加的度量器将如下所示:
[api] pattern = ^graphql\.api\. retentions = default_1min_for_1day, default_1h_for_10day
现在重新启动 Carbon 和 GraphiteWeb:
sudo service carbon-cache start sudo service apache2 start
这样我们的指标就开始上传到 Graphite 并保存为天和小时级别的度量指标。
客户端 Graphite 配置
除了服务器端的 Graphite 配置之外,我们还可以选择通过客户端配置更细粒度的测量数据来了解我们的 API 的性能。默认情况下,@aerogear/apollo-voyager-metrics 会纪录以下测量数据:
- 四个 HTTP 方法的总请求数量(GET、POST、DELETE、PUT)
- GraphQL 查询的总数
- 总执行时间
- 最大执行时间
- 平均执行时间
首先,我们需要在前端应用程序中添加一个新的 NPM 依赖项 statsd-client
,以便可以将指标发送到 StatsD 或 Graphite 的后端:
npm install statsd-client
我们添加的指标可以如下所示:
-- -------------------- ---- ------- ----- ------ - ------------------------- ----- - ------------- - - -------------------------------------------- ----- ------- - --------------- ------- ------------------------ ------- -------------- ------- --- -------- ----- ------------ ----- ----- ------- --------- -- ---展开代码
默认情况下,如果未配置 client
选项,则 @aerogear/apollo-voyager-metrics 使用之前介绍的 Graphite 客户端发送度量值。
示例代码
-- -------------------- ---- ------- ----- - ------------ - - ------------------------- ----- - ------------- - - -------------------------------------------- ----- ------ - ------------------------- -- -- -------- ----- ----- ------- - --------------- ------- ------------------------ ------- -------------- ------- --- -------- ----- ------------ ----- ----- ------- --------- -- --- -- --- ----- ----- - - - --- -- ----- ----- ----- ------ ---------------------- -- - --- -- ----- ----- ----- ------ ---------------------- - -- -- ---- ----- -------- - - ---- ----- - ------ -------- - ---- ---- - --- --- ----- ------- ------ ------- - -- -- ---- ----- --------- - - ------ - ------ --- ----- - --- -- -- - ------------------------------------------- ----- -- - -- ------- ------ ------ --- - - -- -- -- ------ ------ ----- ------ - --- -------------- --------- ---------- -------- -- --- -- -- -- --- --- -------- ---------------------- --- -- ----- ------ --------- -------- --- -- -- - --------------- ------ ----- -- --------- -- ---------- -- - ------------------- ---展开代码
结论
@aerogear/apollo-voyager-metrics 是一个非常有用的工具,可以为我们提供有关 GraphQL API 性能和吞吐量的深入见解。虽然 Graphite 和 StatsD 是两个灵活且强大的指标聚合服务,但你也可以使用类似的基础设施,例如 Prometheus,Logstash,Grafana 等。无论你使用哪种指标聚合服务,@aerogear/apollo-voyager-metrics 将会是一个不可缺少的帮助你优化 GraphQL API 性能的工具。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/109321