npm 包 @aerogear/apollo-voyager-metrics 使用教程

介绍

@aerogear/apollo-voyager-metrics 是基于 Apollo 服务器和 Voyager GraphQL 服务创建的 npm 包,它提供了测量 GraphQL API 性能和吞吐量的功能。它在服务器端和客户端之间建立了一个可观察通道,将性能指标(如请求数量、平均响应时间、最长响应时间等)发送到 Graphite 或类似的指标聚合服务。这个包不仅可以通过报告来帮助我们了解 API 应用程序的性能瓶颈,还可以指导我们如何去优化我们的 GraphQL API。

安装

--- ------- --------------------------------

使用

使用 @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:

---- ------- ------
---- ------- ------- ------------ ---------------

安装完成之后,我们需要编辑 Carbon 配置文件 /etc/carbon/carbon.conf来将时间戳统一为 UTC 并指定监听的地址和端口:

-------
- --- ---- ----
--------- - ---

----------
- ------
---------------------- - -------
------------------------- - -------
----------------------- - -------

- ----
------------------ - ----
-------------------- - ----
----------------- - ----

现在,我们需要打开 Carbon 缓存配置文件 /etc/carbon/storage-schemas.conf 来配置保存度量值的呈现精度并解决不同时间跨度内的数据点的确认问题:

-----------------------
------- - --
---------- - ------

----------------------
------- - --
---------- - ------

在配置图形进行查询之前,我们需要更新 Graphite 来知道我们正在监视网站的度量值。我们添加的度量器将如下所示:

-----
------- - ---------------
---------- - ---------------------- --------------------

现在重新启动 Carbon 和 GraphiteWeb:

---- ------- ------------ -----
---- ------- ------- -----

这样我们的指标就开始上传到 Graphite 并保存为天和小时级别的度量指标。

客户端 Graphite 配置

除了服务器端的 Graphite 配置之外,我们还可以选择通过客户端配置更细粒度的测量数据来了解我们的 API 的性能。默认情况下,@aerogear/apollo-voyager-metrics 会纪录以下测量数据:

  • 四个 HTTP 方法的总请求数量(GET、POST、DELETE、PUT)
  • GraphQL 查询的总数
  • 总执行时间
  • 最大执行时间
  • 平均执行时间

首先,我们需要在前端应用程序中添加一个新的 NPM 依赖项 statsd-client,以便可以将指标发送到 StatsD 或 Graphite 的后端:

--- ------- -------------

我们添加的指标可以如下所示:

----- ------ - -------------------------
----- - ------------- - - --------------------------------------------
 
----- ------- - ---------------
  ------- ------------------------
  ------- --------------
  ------- --- --------
    ----- ------------
    ----- -----
    ------- ---------
  --
---

默认情况下,如果未配置 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


猜你喜欢

  • npm 包 @ladc/sql-bricks-qb 使用教程

    介绍 npm 包 @ladc/sql-bricks-qb 提供了一种便捷的生成 SQL 语句的方式,尤其在 Node.js 领域中应用广泛。它提供了一系列的 API,可以方便地生成 SQL 语句,同时...

    5 年前
  • npm包@ladc/sql-bricks-modifier使用教程

    #npm包@ladc/sql-bricks-modifier使用教程 ##前言 在前端工程中,使用 SQL 是很常见的任务。我们常常需要用 SQL 查询或更新数据,以及构建或修改复杂的 SQL 查询语...

    5 年前
  • npm 包 @knorm/knorm 使用教程

    引言 在当前前端技术的高速发展趋势下,开发人员需要不断学习和掌握新的技术和工具。其中,npm 网址(https://www.npmjs.com/)下的众多 npm 包给前端开发提供了丰富的选择,其中一...

    5 年前
  • npm 包 @fabtom/media-engine 使用教程

    前言 在 Web 开发过程中,我们经常需要使用多媒体资源(如音频,视频),那么如何快速,可靠地在我们的应用程序中使用它们呢?这时候,@fabtom/media-engine 就派上用场了。

    5 年前
  • npm 包 @emxdigital/node-redshift 使用教程

    简介 @emxdigital/node-redshift 是一个基于 Node.js 的用于访问 Amazon Redshift 数据库的 npm 包。它提供了简单易用的接口,方便 Node.js 开...

    5 年前
  • npm 包 @feathers-plus/generator-feathers-plus 使用教程

    前言 在前端开发过程中,我们经常需要快速搭建一个完整的服务端应用程序。而 @feathers-plus/generator-feathers-plus 就是一个非常方便、快速、可靠的工具,能够帮助我们...

    5 年前
  • npm 包 short-hash 使用教程

    在前端开发中,有时候需要对数据进行加密或者生成短链接等操作,需要用到哈希函数进行处理。而 short-hash 是一个基于 MurmurHash3 实现的 npm 包,可以对字符串进行哈希处理并返回一...

    5 年前
  • npm 包 feathers-mongoose-casl 使用教程

    简介 feathers-mongoose-casl 是一款用于 FeathersJS 框架的权限管理插件,它基于 Mongoose 操作 MongoDB 数据库,并使用 CASL(自己定义语言)来对用...

    5 年前
  • npm 包 @ihadeed/hooks-common 使用教程

    前言 在前端开发中,我们经常会使用各种库和插件来简化开发流程和提高效率。其中,npm 包作为 Node.js 生态系统中的一部分,成为了前端开发中不可缺少的一个环节。

    5 年前
  • npm 包 @types/feathersjs__feathers 使用教程

    前置知识 在学习使用npm 包 @types/feathersjs__feathers前,需要掌握一些基础知识: 什么是npm,怎样使用npm安装包 什么是Typescript,怎样使用Typesc...

    5 年前
  • npm 包 lamed_test 使用教程

    前言 在前端开发中,我们需要处理大量的音视频数据,通过对音视频进行压缩可以减小传输的数据量,提高传输速度。lamed_test 是一个能够将 WAV 音频文件转换成 MP3 音频文件的 npm 包。

    5 年前
  • npm包tower-dev使用教程

    1. 前言 前端开发已经成为了互联网行业的一大分支,随着各种新型技术的不断出现,前端开发的复杂度也在不断提高。作为前端开发者,如何提高工作的效率,提高开发效率,是我们一直在思考的问题。

    5 年前
  • npm 包 tower 使用教程

    在前端开发中,npm 包的使用是必不可少的一部分。其中,tower 是一个具有深度的 npm 包,可以帮助前端开发者更加方便的搭建或维护一个高质量的应用程序。本文将详细介绍如何使用 tower 包,并...

    5 年前
  • npm 包 random 使用教程

    简介 在 JavaScript 中,我们经常需要生成随机数。有时候,我们只需要生成一个简单的整数随机数,但有时候我们需要生成更复杂的随机数据,例如随机字符串、随机颜色和随机日期等。

    5 年前
  • npm 包 pump-promise 使用教程

    pump-promise 是一个流和 Promise 结合的使用包,可以帮助我们简化复杂的流传输。 安装 --- ------- ------------使用 基础用法 我们使用 pump-promi...

    5 年前
  • npm 包 @coorpacademy/baucis 使用教程

    前言 在现代的前端开发中,我们经常需要构建应用程序的后端服务。而为了更加高效地进行开发,使用 RESTful API 是一个不错的选择。但是,为了使用 RESTful API,我们需要构建一个 Ser...

    5 年前
  • npm 包 ejsify 使用教程

    在前端开发中,我们常常会使用到模板引擎来简化我们的工作,ejs 就是其中的一种比较流行的模板引擎。而使用 ejsify 这个 npm 包,可以让我们更加便捷地使用 ejs。

    5 年前
  • npm 包 rework-assets 使用教程

    简介 前端工程化的大趋势下,使用各类 npm 包实现自动化构建已成为现代前端开发的必要技能之一。而 rework-assets 就是一种基于 rework CSS 预处理器的 npm 包,它允许我们在...

    5 年前
  • npm 包 resrcify 使用教程

    前言 随着前端技术不断发展,现在的前端开发已经不再只是简单的“页面美化”,而是需要熟练掌握 JavaScript 等技术,并能够运用现有工具来快速地开发出高质量的 Web 项目。

    5 年前
  • npm 包 npm-less 使用教程

    介绍 npm-less 是一个 npm 包,它为 Less 编译器提供了一个插件,让你能够方便地在 JavaScript 中使用 Less。使用 npm-less,你可以在你的项目中对 Less 文件...

    5 年前

相关推荐

    暂无文章