使用亚马逊 CloudWatch 贡献者见解对 NGINX 日志进行一般分析

客户在 亚马逊云科技 上构建、部署和维护数百万个 Web 应用程序,许多客户使用 NGIN X 部署这些应用程序。NGINX 应用程序服务器提供可配置性、可扩展性以及处理数百万个并发请求的能力。Web 应用程序性能是现代企业基础架构和应用程序的关键。客户利用 CloudWatch 来监控响应时间、正常运行时间并提供 SLA。工程团队还会跟踪多个数据点和指标,例如流量水平变化时的服务器性能,工程团队知道性能不佳会降低客户体验。这会导致收入表现不佳,可能会影响合规性,或面临运营停机的风险。

客户可以利用 贡献者见解 规则( Amazon CloudWatch 的一项功能)进行网络应用程序日志分析。当结构化日志事件流式传输到 CloudWatch Logs 时,客户可以评估其中的模式,包括云端应用程序或本地服务器发送的任何自定义日志,例如 NGINX Web 服务器应用程序日志。CloudWatch 贡献者见解使产品和工程团队能够查看、调查和修复 Web 应用程序中出现的问题。配置完成后,Contributor Insights 无需人工干预即可持续运行,帮助操作员在操作事件期间隔离、诊断、了解和修复问题。

本博客将向您展示如何使用 CloudWatch 贡献者见解来监控和分析 NGINX 日志。NGINX 日志提供对 Web 应用程序的可见性,例如错误、响应时间和 Web 应用程序的性能。除了 CloudWatch 贡献者见解外,客户还可以激活 CloudWatch 指标和 CloudWatch 警报,以进行全面的系统监控。

先决条件

在本演练中,您应该具备以下先决条件:

  1. 启用 NGINX 服务器在 亚马逊云科技 账户中运行。在此示例中,将使用随附的 CloudFormation 模板安装、配置和部署 NodeJS 网络应用程序和 API。
  2. NGINX Web 应用程序服务器在启用了 JSON 格式的 Web 日志的 亚马逊云科技 账户中运行(参见下文 NGINX 配置)。

解决方案概述

Solution Overview

上图显示了如何通过实例上预安装的 CloudWatch 代理将 NGINX Web 服务器应用程序日志发送到 CloudWatch。所有亚马逊 Linux 2 AMI 都包含云观测代理。这些日志由贡献者见解规则进行分析,报告显示在 CloudWatch 控制面板上。

草率排练

从 亚马逊云科技 管理控制台导航到 CloudWatch 以创建日志组。

步骤 1: 选择创建日志组。

Create log group

在 CloudWatch 中导航到 贡献者见解 。在 “贡献者见解” 主页上,选择创建规则。

  1. 从下拉列表中按名称选择 NGINX 日志组。
  2. 为规则类型选择自定义规则。
  3. 在贡献部分-输入唯一密钥 “remote_addr” 和 “状态” 以提取请求的远程地址和请求的状态。这些将在 CloudWatch 控制面板中进行可视化。
  4. 给出规则名称。
  5. 选择创建。

Rule definitions

Rule type

Contribution

创建规则后,最多可能需要 5 分钟才能看到正在报告的任何数据。此时,让我们部署 CloudFormation Stack,它将创建一个运行 NGINX 的 EC2 实例和一个带有两个 API 端点的 Node Express Web 应用程序,以模拟网络应用程序和 API 示例。

步骤 2: 部署以下 CFT 模板:

https://nginx-app-server-cw-00.s3.us-west-2.amazonaws.com/Nginx-Web-App-Server-Express-App-Monitor-CloudWatch.yaml

Create Stack

Stack details

这将需要 5-10 分钟。您可以查看部署的状态。

Cloudformation confirmation

部署堆栈后,请在 “输出” 选项卡中查看 NGINX URL:

NGINX URL

步骤 3: 部署需要 5-10 分钟。完成后,单击 WebsiteURL 以查看以下使用两个 API 端点运行的监控应用程序 FAILED 和 OK。该应用程序正在运行并以 JSON 格式登录到 NGINX 网络日志。这些日志将在 access_json_log 日志组中流式传输到 CloudWatch 进行分析。

出现以下页面提示时,单击 “继续访问 HTTP 站点”:

NGINX Website

步骤 4: 查看 NGINX Web 应用程序服务器状态,然后单击 /admin/health/x1 和 /return-status/200 在新选项卡中打开(多次打开以模拟 API 访问权限):

NGINX Web application server status

步骤 5: 既然示例 Web 应用程序和 API 正在运行,我们将创建一个 CloudWatch 控制面板来显示来自该应用程序的 5XX、4XX、3XX 响应代码。然后,我们将为 5XX 4XX 3XX 响应代码创建 CloudWatch 指标,这些响应代码将用于 CloudWatch 警报。

Creating CloudWatch Dashboard

让我们搜索带有 3XX 响应代码的日志消息。

3XX response code

让我们搜索带有 4XX 响应代码的日志消息。

4XX response code

让我们搜索带有 5XX 响应代码的日志消息。

5XX response code

第 6 步: 现在让我们创建一个指标筛选器,用于在 CloudWatch 控制面板上进行可视化并用于 CloudWatch 警报。

Create a Metric Filter

同样,为 2XX、4XX、5XX 状态码创建新的指标筛选器。

第 7 步: 创建这些指标 后,汇总数据将有助于在 “贡献者见解” 中报告贡献。现在,让我们将 “贡献者洞察” 规则添加到 CloudWatch 控制面板中。选择 “添加到仪表板” 以添加到现有仪表板或创建新的仪表板。在这里,我们还将添加 CI 规则以及之前为显示 5XX 的单一窗口而创建的警报。

remoteAddress-status

requestURL-status

Adding to Cloudwatch dashboard1

Adding to Cloudwatch dashboard2

<h2></h2>

摘要

在这篇博客中,我们解释了如何将 NGINX 日志从 EC2 实例流式传输到 CloudWatch、使用过滤器解析日志、创建可视化 NGINX 状态码的图表以及如何为状态码创建警报,所有这些都可以在一个控制面板中完成。

Web 应用程序/API 监控和可观测性对企业及其业务至关重要。产品和工程团队可以使用 CloudWatch 贡献者见解、CloudWatch 日志、CloudWatch 指标和 CloudWatch 警报的广泛功能,查看、调查和修复 Web 应用程序中出现的问题。

<h1></h1>

作者简介

Vivek Kumar

Vivek Kumar 是总部位于纽约的 亚马逊云科技 的解决方案架构师。他与一些最大的战略性 亚马逊云科技 客户合作,为各种 亚马逊云科技 服务提供技术援助和架构指导。他在各种大型企业的软件工程和架构领域拥有超过20年的经验。

Sukhchander Khanna

Sukhchander Khanna 是总部位于圣地亚哥的亚马逊网络服务的解决方案架构师。他热衷于通过提供技术指导和最佳实践来帮助客户踏上云之旅。他目前帮助世界上最大的客户之一在 亚马逊云科技 上构建可扩展、安全且具有成本效益的解决方案。

Shaileen Savage

Shaileen Savage 是总部位于华盛顿州西雅图的 亚马逊云科技 的高级产品经理。作为务实的产品经理和开发人员,Shaileen热衷于帮助客户和工程师找到创新的可观测性实现方案,以应对他们面临的挑战。Shaileen 在 亚马逊云科技 可观测性方面最喜欢的是,每个客户都有独特的故事,需要创造性的解决方案来解决这些需求。

马修·巴克

马修·巴克是总部位于华盛顿州西雅图的亚马逊网络服务(亚马逊云科技)的首席产品经理。Matthew 喜欢开发帮助客户解决可观测性挑战的产品。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。