在 Serverless 环境中管理日志的最佳实践

Serverless 架构在最近几年已经成为前端应用的流行选择。使用 Serverless 环境开发和部署应用程序可以大大降低成本和管理负担,因为您只需为实际使用的计算资源付费。

然而,Serverless 环境也带来了一些挑战。只是由于资源启动时间的不确定性和资源撤销机制,管理日志变得更加困难。在这篇文章中,我们将介绍在 Serverless 环境中管理日志的最佳实践,并提供解决方案和示例代码。

为什么在 Serverless 环境中管理日志很难?

Serverless 环境中的函数资源是按需分配的,这意味着您无法像在虚拟机或容器中那样直接访问运行时服务器。相反,您需要将日志数据从资源发送到与日志服务相连的外部工具。由于函数的瞬态特性,这可以变得棘手:如果您的函数运行时间很短,那么它完全可能撤销之前就能发送所有日志信息。因此,您需要精细控制何时、何地和如何记录日志。

如何最佳地管理 Serverless 环境中的日志?

以下是在 Serverless 环境中管理日志的最佳实践:

1. 把日志直接发送到日志服务

为了确保不会丢失重要的日志信息,最好将日志数据直接发送到一个知名的且稳定的日志服务中。常见的选择包括 AWS CloudWatch Logs、Google Cloud Logging、Azure Monitor 等。这些服务都具有针对 Serverless 环境的增强功能,可以灵活适用于 Serverless 架构的资源使用方式。

示例代码(使用 AWS CloudWatch Logs)

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

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

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

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

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

2. 只记录必要的日志信息

由于 Serverless 环境中的函数调用是按需分配的,短暂的函数调用不应该记录太多的日志信息。记录大量的不必要的日志信息会使日志系统更难以管理。因此,您应该只记录必要的日志信息,如重要错误、警告和信息等。

示例代码

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

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

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

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

3. 使用适当的日志级别

在 Serverless 环境中,日志级别对于跟踪问题和优化资源使用至关重要。通常建议在函数中使用三个日志级别:

  • info:记录函数的活动以及当前状态的重要信息。
  • warn:记录可能与问题相关的潜在问题,如超出阈值的请求参数等。
  • error:记录由于客户端错误、操作系统问题或其他错误而导致的问题。

对于更严重的情况(如应用程序崩溃),您可以使用其它级别的日志来跟踪事件。

示例代码

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

  --- -------

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

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

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

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

4. 使用适当的错误处理

由于 Serverless 环境中的函数计算是按需分配的,这意味着您需要更仔细地考虑错误处理,以确保不会因未处理的错误导致资源被撤销。例如,您可以使用 try-catch 块来处理函数中的所有可能引发异常的操作。您还可以使用带有回调的 catchError() 函数来处理异步错误。

示例代码

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

  --- -------

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

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

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

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

结论

在 Serverless 环境中管理日志是关键的,因为函数是由运行时资源动态分配的,它们在功能完成后可能不再运行。因此,不仅需要保证日志不丢失,还需要避免记录太多的不必要信息。

在这篇文章中,我们介绍了最佳实践,让您能够更好地管理 Serverless 环境中的日志。在您的 Serverless 架构中通过实用这些实践,您可以更好地跟踪问题,提高效率并减少作为服务器管理成本。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6712ccaaad1e889fe2086a1d