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

前言

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


猜你喜欢

  • 使用 CSS Reset 解决 IE 浏览器下的 Box Model 问题

    在 Web 开发中,CSS Reset 被广泛使用来消除浏览器之间的样式差异,并解决常见的布局与样式问题。其中,一个主要的问题是 IE 浏览器下的 Box Model 问题,即元素的宽度和高度计算方式...

    1 年前
  • RxJS 在 Angular 中的高级用途:操作符 concatMap 和 switchMap 的区别

    RxJS 在 Angular 中的高级用途:操作符 concatMap 和 switchMap 的区别 RxJS是Angular中的一项核心技术,它是一个响应式编程库,用于处理异步操作和事件流。

    1 年前
  • 使用 Mocha 进行 React 组件的单元测试和快照测试

    前言 在开发过程中,单元测试是非常重要的一环。React 作为当前最流行的前端技术之一,开发者在编写 React 组件的同时也需要编写相应的单元测试代码以保证组件的质量和稳定性。

    1 年前
  • Headless CMS 上实现全文检索的最佳实践

    随着前端技术的进步和应用场景的不断扩大,一种新型的 CMS 技术逐渐崭露头角:Headless CMS。Headless CMS 是一种 API 驱动的 CMS 架构,也就是说它专注于内容管理,并提供...

    1 年前
  • 初识 Webpack:入门到进阶

    作为前端开发人员,我们经常需要将多个 JavaScript 文件打包成一个文件。这个时候,我们需要使用 Webpack。本文将详细介绍 Webpack 的使用,包括其入门和进阶部分,帮助您快速掌握 W...

    1 年前
  • Next.js 如何处理图片优化?

    在现代 Web 应用程序中,添加图片通常是必不可少的。然而,处理大量的图片及其优化可能是一个繁琐的任务。Next.js 是一个优秀的 React 应用程序开发框架,它提供了许多工具来帮助开发者处理这样...

    1 年前
  • 测试 React 组件中的 Fetch API 使用 Jest 框架

    在 React 应用中,Fetch API 是一种常见的使用方式,它可以用来获取数据、发送数据等等。然而,为了确保代码的质量,我们需要对这些 API 进行测试。在本文中,我们将使用 Jest 框架来测...

    1 年前
  • Shadow DOM 和 Web Components 架构的管道分析

    前言 在前端开发中,常常需要将界面拆分成独立的组件,使得代码更易于理解、维护和测试。然而,在实现组件化时,由于 CSS 和 DOM 结构的全局性,往往会带来一些问题,例如命名冲突、样式污染等。

    1 年前
  • 解决 Material Design 风格应用中 Dialog 宽度不自适应的问题

    受欢迎的 Material Design 风格是现代 Web 应用程序中广泛使用的一种美学风格。而 Dialog 是其中一种常见的组件,通常用于弹出警告、确认和信息窗口。

    1 年前
  • 如何在 Angular 中使用 Tailwind CSS 框架?

    前言 Tailwind CSS 是一个功能强大的样式框架,它使得为网站设计样式变得更迅速、更容易。Angular 是一种流行的前端框架,它为网站的构建提供了很多便利。

    1 年前
  • PWA 应用中的图片加载优化技巧

    PWA (Progressive Web App) 是一种新型的 Web 应用程序,它结合了 Web 和 Native 应用的优点,可以实现离线访问、本地推送、数据缓存等功能。

    1 年前
  • 理解 ES10 中 Array 的 flat() 方法和 flatMap() 方法

    JavaScript ES10 在 Array 中增加了两个新的方法:flat() 和 flatMap()。这两个方法可以更容易地处理多维数组的操作。 flat() 方法 flat() 方法将一个多维...

    1 年前
  • 解决 Hapi 框架中的错误:Cannot find module 'hapi-auth-jwt2'

    如果你在使用 Hapi 框架时遇到了错误 Cannot find module 'hapi-auth-jwt2',不要惊慌,这是一个常见的错误,我们可以通过以下步骤进行解决。

    1 年前
  • RESTful API 中的状态码指南

    在开发 RESTful API 时,状态码的正确使用非常重要。状态码可以传达给客户端当前请求的处理结果,从而使客户端能够准确地理解和处理响应。 本文将介绍 RESTful API 中常用的状态码,以及...

    1 年前
  • SASS 中的单位自动转换的注意事项

    SASS 中的单位自动转换的注意事项 前端开发中,样式表已经成为了我们无法回避的问题。为了更好地构建样式表,我们常常使用 CSS 预处理器,如 SASS。其中,一个常见的功能就是单位自动转换。

    1 年前
  • Docker 容器中运行 Java 应用的实践总结

    前言 Docker 是一款流行的容器化技术,可以快速部署和运行各种应用。Java 是一种跨平台的编程语言,广泛用于企业级应用的开发。在实践中,我们可以将 Java 应用打包成 Docker 镜像,运行...

    1 年前
  • 深入理解 ES6 Symbol 类型和原型对象

    在 ES6 中,Symbol 是一种新的基本数据类型,它的主要作用是用于创建唯一的标识符,避免命名冲突。除了作为标识符,Symbol 还有一些其他的应用,比如用于定义对象的私有属性和方法。

    1 年前
  • ECMAScript 2020 中的字符串增强功能介绍

    在 ECMAScript 2020 中,新增了一些字符串增强功能,让我们在字符串处理时更加方便和高效。本文将介绍这些新功能,包括字符串插值、字符串匹配和替换方法、模板字面量标签和 trimStart ...

    1 年前
  • 使用 Koa2 进行 RESTful API 开发的完整实例

    在前端开发中,RESTful API 是很常见的接口类型。而 Koa2 是一个轻量级的 Node.js 框架,支持异步操作,可用于 Web 应用或者 API 的开发。

    1 年前
  • 解决 IE 11 中自定义元素无法工作的问题

    对于大多数现代浏览器来说,自定义元素已经成为了一个很方便且强大的前端技术。通过自定义元素,我们可以使用任意的 HTML 标签来实现完全自定义的组件。但是在 IE 11 中,自定义元素却无法正常工作。

    1 年前

相关推荐

    暂无文章