将遥测数据从发送到 AWS Lambda 以 OpenSearch 进行实时分析和可视化 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将遥测数据从发送到 AWS Lambda 以 OpenSearch 进行实时分析和可视化

由 Tabby Ward (AWS)、Guy Bachar (AWS) 和 David Kilzer (AWS) 创作

摘要

现代应用程序变得越来越分散和事件驱动,这增强了对实时监控和可观测性的需求。 AWS Lambda 是一种无服务器计算服务,在构建可扩展和事件驱动的架构方面起着至关重要的作用。但是,如果您仅依赖 Amazon Lo CloudWatch gs,Lambda 功能的监控和故障排除可能会很困难,这可能会带来延迟和有限的保留期。

为了应对这一挑战, AWS 推出了 Lambda Telemetry API,它使 Lambda 函数能够将遥测数据直接发送到第三方监控和可观察性工具。此 API 支持实时流式传输日志、指标和跟踪,并可全面及时地了解 Lambda 函数的性能和运行状况。

此模式解释了如何将 Lambda Telemetry API 与OpenSearch开源分布式搜索和分析引擎集成。 OpenSearch 为摄取、存储和分析大量数据提供了一个强大且可扩展的平台,这使其成为 Lambda 遥测数据的理想选择。具体而言,此模式演示了如何使用提供的 Lambda 扩展将用 Python 编写的 Lambda 函数中的日志直接发送到 OpenSearch 集群。 AWS该解决方案灵活且可自定义,因此您可以创建自己的 Lambda 扩展或更改示例源代码以根据需要更改输出格式。

该模式说明了如何设置和配置 Lambda Telemetry API 的集成 OpenSearch,并包括安全性、成本优化和可扩展性的最佳实践。目标是帮助您更深入地了解您的 Lambda 函数,并增强无服务器应用程序的整体可观察性。

注意

这种模式侧重于将 Lambda 遥测 API 与托管集成。 OpenSearch但是,所讨论的原则和技术也适用于自我管理 OpenSearch 和 Elasticsearch。

先决条件和限制

在开始集成过程之前,请确保满足以下先决条件:

AWS 账户: AWS 账户 具有创建和管理以下 AWS 资源的相应权限的活跃用户:

  • AWS Lambda

  • AWS Identity and Access Management (IAM)

  • Amazon OpenSearch 服务(如果您使用的是托管 OpenSearch 集群)

OpenSearch 集群

  • 您可以使用现有的自管理 OpenSearch 集群或托管服务,例如 OpenSearch 服务。

  • 如果您使用的是 OpenSearch 服务,请按照服务文档中 Amazon OpenSearch 服务入门中的 OpenSearch 说明设置 OpenSearch 集群。

  • 确保可通过您的 Lambda 函数访问 OpenSearch 集群,并配置了必要的安全设置,例如访问策略、加密和身份验证。

  • 为 OpenSearch 集群配置必要的索引映射和设置,以提取 Lambda 遥测数据。有关更多信息,请参阅服务文档中的将流数据加载到 Amazon OpenSearch OpenSearch 服务

网络连接

IAM 角色和策略

  • 创建一个具有 Lambda 函数访问 OpenSearch 集群和访问存储在中的证书所需权限的 IAM 角色。 AWS Secrets Manager

  • 将相应的 IAM 策略附加到该角色,例如AWSLambdaBasicExecutionRole策略和与之交互所需的任何其他权限 OpenSearch。

  • 验证授予您的 Lambda 函数的 IAM 权限是否允许它向集群写入数据。 OpenSearch 有关管理 IAM 权限的信息,请参阅 Lambda 文档中的使用执行角色定义 Lambda 函数权限

编程语言知识

  • 要理解和修改 Lambda 函数和 Lambda 扩展的示例代码,您需要具有 Python(或您选择的编程语言)的基本知识。

开发环境

  • 使用构建和部署 Lambda 函数和扩展所需的工具和依赖关系来设置本地开发环境。

AWS CLI 或 AWS Management Console

监控和记录

  • 熟悉监控和记录最佳实践 AWS,包括诸如 Amazon 之类的服务, CloudWatch 以及 AWS CloudTrail 用于监控和审计目的的实践。

  • 查看您的 Lambda 函数的 CloudWatch 日志,找出与 Lambda 遥测 API 集成相关的任何错误或异常。有关疑难解答指南,请参阅 Lambda 遥测 API 文档。

架构

此模式使用 OpenSearch 服务来存储 Lambda 函数生成的日志和遥测数据。这种方法使您能够快速将日志直接流式传输到 OpenSearch 集群,从而减少与使用 CloudWatch 日志作为中介相关的延迟和成本。

注意

您的 Lambda 扩展代码可以通过直接使用 OpenSearch API 或使用客户端库将遥测推送到 OpenSearch 服务。OpenSearch Lambda 扩展可以使用 OpenSearch API 支持的批量操作将遥测事件批量处理在一起,并在单个请求中将其发送到 OpenSearch 服务。

以下工作流程图说明了使用 OpenSearch 集群作为终端节点时 Lambda 函数的日志工作流程。

向 OpenSearch 集群发送遥测数据的工作流程。

该架构包括以下组件:

  • Lambda 函数:在执行过程中生成日志和遥测数据的无服务器函数。

  • Lambda 扩展:一种基于 Python 的扩展,它使用 Lambda 遥测 API 直接与集群集成。 OpenSearch 在同一个执行环境中,此扩展与 Lambda 函数一起运行。

  • Lambda 遥测 API:允许 Lambda 扩展程序将遥测数据(包括日志、指标和跟踪)直接发送到第三方监控和可观察性工具的 API。

  • Amazon S OpenSearch ervice OpenSearch 集群:托管在上的托管集群 AWS。该集群负责接收、存储通过 Lambda 扩展从 Lambda 函数流出的日志数据并为其编制索引。

该工作流程包括以下步骤:

  1. Lambda 函数被调用,并在其执行期间生成日志和遥测数据。

  2. Lambda 扩展与函数一起运行,用于使用 Lambda 遥测 API 捕获日志和遥测数据。

  3. Lambda 扩展与 OpenSearch 服务集群建立安全连接并实时流式传输日志数据。

  4. OpenSearch 服务集群采集、索引和存储日志数据,以便通过使用 Kibana 或其他兼容应用程序等工具进行搜索、分析和可视化。

通过绕过 CloudWatch 日志并将日志数据直接发送到 OpenSearch 集群,此解决方案提供了以下好处:

  • 实时日志流和分析,可加快故障排除速度并提高可观察性。

  • 减少了延迟,并限制了与 CloudWatch 日志相关的潜在保留期限。

  • 可以灵活地自定义 Lambda 扩展,也可以为特定的输出格式或其他处理创建自己的扩展。

  • 与 S OpenSearch ervice 的搜索、分析和可视化功能集成,用于日志分析和监控。

Epics 部分提供了设置 Lambda 扩展、配置 Lambda 函数以及与服务集群集成的 step-by-step说明。 OpenSearch 有关安全注意事项、成本优化策略以及监控和排除解决方案故障的提示,请参阅最佳实践部分。

工具

Amazon Web Services

  • AWS Lambda 是一项计算服务,可使您无需调配或管理服务器即可运行代码。只有在需要时 Lambda 才运行您的代码,并且能自动扩缩,从每天几个请求扩展到每秒数千个请求。

  • Amazon S OpenSearch er vice 是一 AWS 项由提供的完全托管的服务,可以轻松地在云中部署、操作和扩展 OpenSearch 集群。

  • Lambda 扩展通过在函数旁边运行自定义代码来扩展您的 Lambda 函数的功能。您可以使用 Lambda 扩展将 Lambda 与各种监控、可观察性、安全和监管工具集成。

  • AWS Lambda Telemetry API 使您能够使用扩展程序直接从 Lambda 捕获增强的监控和可观察性数据,并将其发送到您选择的目的地。

  • AWS CloudFormation帮助您对 AWS 资源进行建模和设置,这样您就可以花更少的时间管理这些资源,而将更多的时间集中在应用程序上。

代码存储库

其他工具

  • OpenSearch是一个开源分布式搜索和分析引擎,为摄取、存储和分析大量数据提供了一个强大的平台。

  • Kibana 是一款开源数据可视化和探索工具,您可以与之搭配使用。 OpenSearch请注意,可视化和分析的实现超出了这种模式的范围。有关更多信息,请参阅 Kibana 文档和其他资源。

最佳实践

将 Lambda 遥测 API 与集成时 OpenSearch,请考虑以下最佳实践。

安全和访问控制

  • 安全通信:使用 HTTPS 加密您的 Lambda 函数与 OpenSearch 集群之间的所有通信。在 Lambda 扩展和配置中配置必要的 SSL/TLS 设置。 OpenSearch

  • IAM 权限

    • 扩展与 Lambda 函数在相同的执行环境中运行,因此它们继承了对文件系统、网络和环境变量等资源的相同访问级别。

    • 向您的 Lambda 函数授予访问 Lambda 遥测 API 和向集群写入数据所需的最低限度 IAM 权限。 OpenSearch 使用最小权限原则来限制权限范围。

  • OpenSearch 访问控制:在 OpenSearch 集群中实施精细的访问控制,以限制对敏感数据的访问。使用中的内置安全功能,例如用户身份验证、基于角色的访问控制和索引级权限。 OpenSearch

  • 可信扩展:始终仅从可信来源安装扩展。使用基础设施即代码 (IaC) 工具,例如简化 AWS CloudFormation 将相同扩展配置(包括 IAM 权限)附加到多个 Lambda 函数的过程。IaC 工具还提供以前使用的扩展和版本的审计记录。

  • 敏感数据处理:构建扩展时,避免记录敏感数据。在出于审计目的记录或保留负载和元数据之前,请对其进行消毒。

成本优化

  • 监控和警报:设置监控和警报机制,以跟踪 OpenSearch 从 Lambda 函数发送到的数据量。这将帮助您识别和解决任何潜在的成本超支。

  • 数据保留:请仔细考虑中您的 Lambda 遥测数据的适当数据保留期。 OpenSearch更长的保留期会增加存储成本,因此请在可观测性需求与成本优化之间取得平衡。

  • 压缩和索引:启用数据压缩并优化 OpenSearch 索引策略,以减少 Lambda 遥测数据的存储占用空间。

  • 减少对日志的依赖 CloudWatch:通过将 Lambda Telemetry API 直接与集成 OpenSearch,您有可能减少对 CloudWatch 日志的依赖,从而节省成本。这是因为 Lambda Telemetry API 允许您直接向发送日志 OpenSearch,从而无需在中存储和处理数据。 CloudWatch

可扩展性和可靠性

  • 异步处理:使用异步处理模式,例如亚马逊简单队列服务 (Amazon SQS) Simple Queue Service 或 Amazon Kinesis,将 Lambda 函数的执行与数据摄取分开。 OpenSearch 这有助于保持 Lambda 函数的响应能力,并提高系统的整体可靠性。

  • OpenSearch 集群扩展:监控集 OpenSearch 群的性能和资源利用率,并根据需要向上或向下扩展以处理不断增加的 Lambda 遥测数据量。

  • 故障转移和灾难恢复:为您的 OpenSearch 集群实施强大的灾难恢复策略,包括定期备份以及在出现故障时能够快速恢复数据。

可观察性和监测

  • 仪表板和可视化效果:使用 Kibana 或其他仪表板工具创建自定义仪表板和可视化效果,根据中的遥测数据深入了解 Lambda 函数的性能和运行状况。 OpenSearch

  • 警报和通知:设置警报和通知,以主动监控 Lambda 函数中的异常、错误或性能问题。将这些警报和通知与您现有的事件管理流程集成。

  • 跟踪和关联:确保您的 Lambda 遥测数据包含相关的跟踪信息,例如请求 IDs 或关联 IDs,以实现分布式无服务器 end-to-end应用程序的可观察性和故障排除。

通过遵循这些最佳实践,您可以确保将 Lambda Telemet OpenSearch ry API 与 Lambda Telemetry API 的集成安全、经济实惠且可扩展,并为您的无服务器应用程序提供全面的可观察性。

操作说明

Task描述所需技能

下载源代码。

从扩展存储库下载示例AWS Lambda 扩展

应用程序开发人员、云架构师

导航到 python-example-telemetry-opensearch-extension文件夹。

您下载的AWS Lambda 扩展存储库包含多个用例和语言运行时的大量示例。导航到 python-example-telemetry-opensearch-e xtension文件夹,使用Python OpenSearch 扩展程序,该扩展程序会将日志发送到 OpenSearch该文件夹。

应用程序开发人员、云架构师

添加执行扩展端点的权限。

运行以下命令使扩展端点可执行:

chmod +x python-example-telemetry-opensearch-extension/extension.py
应用程序开发人员、云架构师

在本地安装扩展依赖关系。

运行以下命令安装 Python 代码的本地依赖项:

pip3 install -r python-example-telemetry-opensearch-extension/requirements.txt -t ./python-example-telemetry-opensearch-extension/

这些依赖项将与扩展代码一起安装。

应用程序开发人员、云架构师

为扩展程序创建一个.zip 包,将其部署为一个层。

扩展名.zip 文件应包含一个名extensions/为的根目录(扩展可执行文件所在的位置)和另一个名python-example-telemetry-opensearch-extension/为的根目录(扩展的核心逻辑及其依赖项位于该目录中)。

为扩展创建.zip 包:

chmod +x extensions/python-example-telemetry-opensearch-extension zip -r extension.zip extensions python-example-telemetry-opensearch-extension
应用程序开发人员、云架构师

将扩展程序部署为 Lambda 层。

使用扩展名.zip 文件和以下命令发布图层:

aws lambda publish-layer-version \ --layer-name "python-example-telemetry-opensearch-extension" \ --zip-file "fileb://extension.zip"
应用程序开发人员、云架构师
Task描述所需技能

将层添加到函数。

  1. 登录 AWS Management Console 并打开 AWS Lambda 控制台的 “功能” 页面

  2. 选择您的函数。

  3. 下,选择添加层

  4. “选择图层” 下,选择 “自定义图层” 作为图层来源,然后添加您的图层。

有关向 Lambda 函数添加层的更多信息,请参阅 Lambda 文档。

应用程序开发人员、云架构师

为函数设置环境变量。

在函数页面上,选择配置选项卡,然后将以下环境变量添加到您的函数中:

  • URL— 您的 OpenSearch 终端节点的 URI,您的日志将发送到该端点。

  • AUTH_SECRET— 存储在中的 OpenSearch 凭证的 ARN。 AWS Secrets Manager它应存储为键值对并有两个键:username和。password

  • PLATFORM_INDEXFUNCTION_INDEX、和 EXTENSION_INDEX — 用于存储遥测数据、函数日志和扩展日志的索引的名称。确保他们遵守正确的命名标准。否则,您的索引将无法创建。

  • DISPATCH_MIN_BATCH_SIZE— 要批处理的日志事件的数量。但是,当该功能关闭时,无论此设置如何,都将发送您的日志。

应用程序开发人员、云架构师
Task描述所需技能

向您的函数添加日志语句。

使用内置日志机制之一或您选择的日志模块,将日志语句添加到函数中。

以下是在 Python 中记录消息的示例:

print("Your Log Message Here") logger = logging.getLogger(__name__) logger.info("Test Info Log.") logger.error("Test Error Log.")
应用程序开发人员、云架构师

测试 函数。

  1. 在函数页面上,选择测试选项卡。

  2. 为您的函数创建测试事件并运行测试。有关更多信息,请参阅 Lambda 文档中的在控制台中测试 Lambda 函数

如果一切正常,你应该会看到 “执行函数:成功”。

应用程序开发人员、云架构师
Task描述所需技能

查询您的索引。

在中 OpenSearch,运行以下命令来查询您的索引:

SELECT * FROM index-name

您的日志应显示在查询结果中。

云架构师

故障排除

事务解决方案

连接问题

  • 确认您的 Lambda 函数具有访问集群所需的网络连接。 OpenSearch 有关配置 VPC 设置的指南,请参阅OpenSearch 服务文档

  • 验证授予您的 Lambda 函数的 IAM 权限是否允许它向集群写入数据。 OpenSearch 查看 Lambda 文档,了解有关管理 IAM 权限的信息。

数据摄取错误

  • 查看您的 Lambda 函数的 CloudWatch 日志,找出与 Lambda 遥测 API 集成相关的任何错误或异常。有关疑难解答指南,请参阅 Lambda 遥测 API 文档

  • 验证 OpenSearch 集群的配置是否正确,并且具有采集 Lambda 遥测数据所需的索引映射和设置。有关更多信息,请查阅OpenSearch 文档

相关资源

其他信息

更改日志结构

默认情况下,该扩展程序将日志作为嵌套文档发送 OpenSearch 到。这允许您执行嵌套查询来检索各个列的值。

如果默认日志输出不能满足您的特定需求,则可以通过修改提供的 Lambda 扩展的源代码对其进行自定义。 AWS AWS 鼓励客户调整输出以适应其业务需求。要更改日志输出,请在扩展程序源代码中的telemetry_dispatcher.py文件中找到该dispatch_to_opensearch函数,然后进行必要的更改。