Hapi 实现 API 监控及错误日志收集方法详解

阅读时长 8 分钟读完

随着前端开发的快速发展,越来越多的公司开始转向前端技术,依托于前端开发的人力资源,前端 API 监控及错误日志收集变得越来越重要。本文将详细介绍 Hapi 实现 API 监控及错误日志收集的方法,帮助开发人员顺利完成这一重要任务。

什么是 Hapi?

Hapi 是一个基于 Node.js 的 Web 框架,其主要用于创建 Web 服务器。它的架构相对于 Express 来说更加可拓展,具有更好的插件架构。Hapi 的设计理念是通过便捷、高效、安全的方式来构建可扩展的应用程序,并尽可能的减少开发的痛苦。

监控 API

API 监控是指对 API 的访问进行实时监测,应该同时监控成功和失败的请求并及时地通知开发人员,方便对问题进行追踪和处理。本文将带领读者通过 Hapi 实现 API 监控。

首先,我们需要在 Hapi 中初始化一个 Server,为了体现监控的作用,我们在其中新建一个 API,后面会讲到,这个 API 被访问到后会故意抛出一个异常,使得我们能够检测到异常并及时处理。

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

Hapi 通过 Plugin 的方式实现 API 的监控,下面我们会创建一个 Plugin 来进行 API 监控。Plugin 的作用是将业务代码从核心应用中隔离,同时可以通过插件配置来改变应用的行为。

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

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

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

上述 Plugin 定义了一个 onPreResponse 的生命周期钩子,在服务响应请求之前触发,在这个钩子函数中,我们通过 request.response.isBoom 来检查响应是否存在异常。如果检测到异常并且不是来自于 /monitor 路径,我们就将异常信息记录在控制台中。最后,我们定义了一个路由返回错误列表。其中,register 方法是 Plugin 的注册函数,用于配置 Plugin。

现在,通过访问 http://localhost:3000/ 来触发异常,会看到异常信息被写入了控制台中。通过访问 http://localhost:3000/monitor 来检查错误列表,其结果应该是:

收集错误日志

API 监控能够帮助开发人员及时发现问题,但如果没有持久化存储,那么这些监控信息将仅仅是暂时的。下面我们通过 Hapi 实现收集错误日志的功能。

收集错误日志的流程如下:

  1. 用户访问 API 时,如果出现异常,异常信息将被记录在日志中。
  2. 通过日志收集工具定时读取日志中的异常信息。

针对上述要求,我们需要用到 Hapi 的另一个 Plugin,它叫做 good。good 是一个 Hapi 插件,提供了日志收集和分析等服务。下面我们分步骤来实现错误日志收集的功能。

首先,我们先需要安装 good 和 good-squeeze 这两个 npm 包。

接着,我们创建一个 Logger,用于将日志信息写入文件中。

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

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

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

Writable 是 Node.js 中的一个流式处理类,用于处理数据写入,通过继承 Writable 类,我们可将数据写入文件中。上述代码定义了在 Logger 中增加的 _write 方法,该方法在写入数据时被调用,通过 fs.appendFileSync 来将数据写入文件中。

在实现比较简单的情况下,我们可以直接使用一个 built-in 对象。示例代码如下:

接下来,通过 good 插件,我们可以将日志数据写入到我们定义的 Logger 对象中。我们需要定义一个 Server,将 Logger 注册到插件中,并读取这个插件中产生的日志数据。示例代码如下:

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

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

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

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

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

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

上述代码首先定义了一个 Logger 类,用于将数据写入文件中。在 goodOptions 中,我们指定了 good 插件的参数,我们设置了 fileReporter,这样好的异常信息就会被输出到文件 logs/errors.log 中。同时,我们使用了上述定义的 Logger 对象,将异常信息写入到我们指定的文件中。

最后,通过访问 http://localhost:3000/ 来触发异常,异常信息将被记录在 errors.log 文件中。

结论

本文深入介绍了 Hapi 实现 API 监控及错误日志收集的详细方法。Hapi 拥有非常好的插件架构,能够快速部署监控和日志收集的服务,方便开发人员及时发现和处理问题。希望读者能够通过本文深入了解 Hapi 在 API 监控及错误日志收集方面的应用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674c058714b275ea6fe0494a

纠错
反馈