Serverless: 将 Lambda 函数的日志传输到 Amazon Elasticsearch Service 中

阅读时长 9 分钟读完

前言

AWS Lambda 是一种无服务计算服务,可让您在云中运行代码而无需自己设置或管理服务器。 AWS Lambda 提供了一种无服务器方式来运行代码以响应事件并自动扩展处理。在使用 AWS Lambda 时,Lambda 函数将触发事件并运行代码以响应这些事件。在执行代码时, AWS Lambda 会自动管理计算资源,并提供一个只需支付所用计算资源的服务。

每次运行 Lambda 函数时, AWS Lambda 都会自动记录关于执行的指标和日志信息。但是,当我们在许多不同的 Lambda 函数中创建和部署处理程序时,集中和分析这些日志信息可能会变得很棘手。这就是 Amazon Elasticsearch 使用 Lambda 函数日志的好处所在。

在本篇文章中,我们将研究如何将 Lambda 函数的日志传输到 Amazon Elasticsearch Service 中。我们将介绍将 Lambda 日志发送到 Amazon Elasticsearch 服务的步骤,将讨论如何结构化和可视化 Lambda 函数日志,并提供代码片段和指导。

Serverless 日志处理架构

在使用 AWS Lambda 时,处理程序函数的日志是绝对必要的。这些日志可用于调试应用程序代码,记录错误消息和了解应用程序的工作方式及吞吐量。有几种处理架构可以用于将 Lambda 日志集中到 Elasticsearch 服务中,我们将介绍其中两种:直接将 Lambda 日志写入 Elasticsearch,以及使用 CloudWatch Logs 来转发 Lambda 日志到 Elasticsearch。

直接将 Lambda 日志写入 Elasticsearch

在此架构中, Lambda 函数将其日志直接写入 Elasticsearch 服务。使用此方法时,您应该定期检查可用性和可伸缩性。

这种方法是将 Elasticsearch 服务直接插入到您的 Lambda 函数中,因此使用者必须小心谨慎。首先,使用者需要创建 Elasticsearch 服务。之后,可以使用 Logstash 或使用 AWS 本身的 Lambda,定期将数据推送到 Elasticsearch。这种方法需要一定的知识和技能,因此需要谨慎中选择。

使用 CloudWatch Logs 来转发 Lambda 日志到 Elasticsearch

AWS Lambda 在执行时,将记录事件、出错、日志等相关信息。记录日志时,默认会使用 CloudWatch Logs。AWS CloudWatch 和 Amazon Elasticsearch Service 集成可以使用 CloudWatch Logs 服务来转发 Lambda 函数的日志数据到 Amazon Elasticsearch。

您可以设置 CloudWatch Logs 订阅,以捕获特定 Lambda 函数的日志数据,并将数据转发到 Amazon Elasticsearch Service,您可以使用 Elasticsearch 服务图表和 Kibana 等工具来可视化这些数据。使用 CloudWatch Logs 集成架构可保持灵活性并获得更好的性能和可伸缩性。

将 Lambda 函数日志发送到 Elasticsearch

我们使用 AWS CDK(Cloud Development Kit)来创建并部署我们的 Serverless 应用程序。下面是一个 Lambda 函数,将其日志发送到 Elasticsearch 服务中的代码示例:

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

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

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

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

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

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

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

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

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

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

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

  -
-

以上代码示例完成以下主要任务:

  • 创建 Elasticsearch 服务;
  • 创建 AWS Lambda 角色,并将运行时访问 Elasticsearch 和 AWS 日志服务的权限添加到角色中;
  • 添加 Elasticsearch URL 到 AWS Lambda 函数的环境变量中;
  • 创建 AWS Lambda 函数;
  • 创建 CloudWatch Logs 订阅。

当 Lambda 函数的日志发送到 CloudWatch Logs 中时,订阅过滤器将捕获日志,并将其写入 Elasticsearch 服务中。您可以使用 Kibana 等工具,通过 Elasticsearch 服务可视化日志。

总结

在本文中,我们了解了如何将 AWS Lambda 函数中的日志发送到 Amazon Elasticsearch Service 中。我们还讨论了直接将 Lambda 日志导入 Elasticsearch 和使用 CloudWatch Logs 转发 Lambda 日志到 Elasticsearch 的不同方法。最后,我们提供了一个基于 AWS CDK 的 Serverless 应用程序代码示例。

总之,将日志发送到 Elasticsearch 是 AWS Lambda 丰富而强大的可视化处理方案,可以帮助我们快速检测并解决问题。这对前端工程师和团队提高效率,发现和解决问题至关重要

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

纠错
反馈