

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

# 使用 L CloudWatch ogs Insights 监控应用程序活动
<a name="monitor-application-activity-by-using-cloudwatch-logs-insights"></a>

*Ram Kandaswamy，Amazon Web Services*

## Summary
<a name="monitor-application-activity-by-using-cloudwatch-logs-insights-summary"></a>

此模式为使用 Amazon Lo CloudWatch gs Insights 自动检测应用程序异常并发出警报提供了解决方案。通过实施自动日志分析及提醒机制，您可以快速识别和响应生产环境中出现的应用程序问题。

日志在监控系统行为、识别问题和确保最佳性能方面发挥着至关重要的作用。在迁移过程中，日志文件对于验证系统在新环境中的运行情况、检测兼容性问题、识别异常行为非常有帮助。问题可能与操作或安全相关。对于安全相关问题，及早发现未经授权的访问企图或可疑活动对于维护安全和监管合规性至关重要。在处理敏感数据或关键系统时，这种能力尤为重要。

对于需要执行以下操作的团队来说，这种模式特别有价值：
+ 保持应用程序的高可用性。
+ 快速响应生产问题。
+ 分析未被日志捕获的特定于应用程序的 AWS 服务 错误。
+ 无需预建基础架构即可按需执行日志分析。

CloudWatch Logs Insights 最适合分析应用程序生成的日志，其中错误上下文仅存在于应用程序代码中。 CloudWatch Logs Insights 擅长以下任务：
+ 查询非结构化或半结构化日志数据。
+ 在事件响应期间进行按需分析。
+ 关联多个日志组中的事件。
+ 无需外部工具即可快速创建可视化效果。

## 先决条件和限制
<a name="monitor-application-activity-by-using-cloudwatch-logs-insights-prereqs"></a>

**先决条件**
+ 在活动状态下部署的生产应用程序 AWS 账户
+ 基本了解生产应用程序的日志格式和异常模式
+ 配置为流式传输到 Amazon CloudWatch 日志的应用程序日志

**限制**
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然后选择相应服务的链接。

## 架构
<a name="monitor-application-activity-by-using-cloudwatch-logs-insights-architecture"></a>

下图显示了 CloudWatch Logs Insights 如何评估资源日志并将相关的数据可视化发送到 CloudWatch 仪表板。

![CloudWatch Logs Insights 评估资源日志，并将数据可视化发送到仪表板。](https://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/082ff4b6-9303-42e6-bc62-263e2254f232/images/b1cbb699-07cd-45e6-ac06-839159bafa6b.png)


下图显示了如下工作流：

1. 这些资源将日志发布到 CloudWatch 日志。资源可以包括诸如亚马逊弹性计算云 (Amazon EC2) 实例或亚马逊简单存储服务 (Amazon S3) Simple Service 存储桶之类的 AWS 资源。另一个示例包括安装了 CloudWatch 代理的本地系统，这些系统可以将日志发布到 CloudWatch。

1. CloudWatch 记录相关模式字符串的 Insights 过滤器。搜索模式字符串的示例包括“error”、“exception”或特定正则表达式。

1. 通常，生产支持团队或开发人员会将模式可视化添加到 CloudWatch 仪表板中。

**自动化和扩展**

开发人员可以通过使用 AWS Cloud Development Kit (AWS CDK) AWS CloudFormation、或来处理多个字符串模式 AWS SDKs 来自动执行此模式的解决方案。团队可以将这种自动化整合到他们的持续集成和部署 (CI/CD) DevOps 流程中。

## 工具
<a name="monitor-application-activity-by-using-cloudwatch-logs-insights-tools"></a>

**AWS 服务**
+ [Amazon CloudWatch Lo](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) gs 可帮助您集中所有系统和应用程序的日志， AWS 服务 这样您就可以监控它们并安全地将其存档。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 可帮助您创建和控制加密密钥以帮助保护您的数据。

## 最佳实践
<a name="monitor-application-activity-by-using-cloudwatch-logs-insights-best-practices"></a>

**查询效率**
+ 定义和配置[日志组](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)以分析相关日志数据。
+ 通过字段浏览器了解日志数据中可用的结构和字段。
+ 使用 L [CloudWatch ogs Insights 查询语法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData_LogsInsights.html)编写高效的查询。
+ 根据您的特定要求调整[查询示例](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-examples.html)，以加快分析速度。
+ 限制查询时间范围以减少扫描的数据并提高性能。
+ [保存查询](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_Insights-Saving-Queries.html)以备将来使用，从而节省时间并确保分析一致性。

**安全性**
+ 对 CloudWatch 日志见解和日志组应用适当的 IAM [策略](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html)。遵循最低权限原则，并授予执行任务所需的最低权限。有关详情，请参阅 IAM 文档中的[授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)和[安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。
+ 对敏感的日志数据启用 [AWS KMS日志数据加密](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs-Insights-Query-Encrypt.html)。

**成本优化**
+ CloudWatch Logs Insights 按每次查询扫描的 GB 数据收费。缩小时间范围并针对特定的日志组以降低成本。
+ 配置适当的日志保留策略来管理存储成本。
+ 要频繁分析大型历史数据集，可以考虑将日志导出到 Amazon S3 并使用 Amazon Athena。
+ 查看[CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)以了解您的用例对成本的影响。

## 操作说明
<a name="monitor-application-activity-by-using-cloudwatch-logs-insights-epics"></a>

### 创建日志组并配置要在控制面板中查看的日志。
<a name="create-log-group-and-configure-logs-to-view-in-dashboard"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 IAM 权限。 | 要配置 IAM 权限，请执行以下操作：1. 确定应用程序用于写入日志的 IAM 角色，以及创建控制面板、查询和警报的用户或服务使用的 IAM 角色。<br />2. 对于应用程序角色，将以下 API 操作及资源添加到策略中：<pre>{<br />         "Version": "2012-10-17",		 	 	 <br />         "Statement": [<br />             {<br />                 "Effect": "Allow",<br />                 "Action": [<br />                     "logs:CreateLogGroup",<br />                     "logs:CreateLogStream",<br />                     "logs:PutLogEvents"<br />                 ],<br />                 "Resource": [<br />                     "arn:aws:logs:*:*:*"<br />                 ]<br />             }<br />         ]<br />     }</pre><br />3. 要管理 CloudWatch 资源，请在策略中添加以下内容：<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "cloudwatch:PutDashboard",<br />                "cloudwatch:GetDashboard",<br />                "logs:StartQuery",<br />                "logs:StopQuery",<br />                "logs:GetQueryResults",<br />                "cloudwatch:PutMetricAlarm"<br />            ],<br />            "Resource": "*"<br />        }<br />    ]<br />}<br /></pre><br />有关如何创建 IAM 策略或者向现有策略添加权限的信息，请参阅 《IAM 用户指南》**中的[使用客户管理型策略自定义 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)和[编辑 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)。有关更多信息，请参阅 Amazon Logs *用户指南*中的 [Amazon CloudWatch CloudWatch 日志和日志的身份和访问管理](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/auth-and-access-control-cwl.html)[权限参考](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/permissions-reference-cwl.html)。 CloudWatch  | AWS 管理员、AWS DevOps、AWS 系统管理员、云管理员、云架构师、 DevOps 工程师 | 
| 创建日志组。 | 要创建日志组，请使用以下任一选项：+ 创建或打开`.json`扩展名为或的 CloudFormation 模板文件（YAML 或 JSON 格式）。`.yaml`（下列代码使用 YAML 格式。） 将以下资源定义添加到模板的[资源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html)部分：<pre>MyLogGroup:<br />  Type: AWS::Logs::LogGroup<br />  Properties:<br />    LogGroupName: my-log-group</pre><br />有关更多信息，请参阅 *Amazon L [ CloudWatch ogs 用户指南中的快速入门：使用 AWS CloudFormation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/QuickStartCloudFormation.html) CloudWatch 日志*入门。+ 按照《*Amazon Logs 用户指南》的 “ CloudWatch 日志” 中的创建 CloudWatch 日志*[组](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#Create-Log-Group)中所述使用 CloudWatch 控制台。<br />+ 使用日[CloudWatch 志](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#Create-Log-Group) API 中的[CreateLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html)操作。 | AWS 管理员、AWS DevOps、AWS 系统管理员、云管理员、云架构师、 DevOps 工程师 | 
| 生成 “ CloudWatch 日志见解” 查询。 | 要创建和保存 CloudWatch Logs Insights 查询，请执行以下操作：1. 打开控制 CloudWatch 台。<br />2. 导航到 **Logs Insights**。<br />3. 使用以下任一方法创建查询：从**查询**部分的[查询示例](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-examples.html)开始。编写自定义查询。[修改](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_Insights-Saving-Queries.html)以下查询示例：<pre>fields @timestamp, @message | filter @message like /(?i)exception/|stats count() by bin(30s)</pre><br />此查询会检查日志文件，提取时间戳和消息内容，筛选“exception”一词（不区分大小写），并以 30 秒为间隔计算出现次数。 | AWS 管理员、AWS DevOps、AWS 系统管理员、云管理员、云架构师、 DevOps 工程师 | 
| 在 CloudWatch 仪表板中创建可视化。 | 要使用 CloudWatch 仪表板创建可视化，请执行以下操作：1. 打开 CloudWatch 控制台，然后[创建 CloudWatch 仪表板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create_dashboard.html)（如果还没有）或打开现有的仪表板。<br />2. 添加异常监控可视化内容。可根据您的业务需要生成柱状图、折线图和饼图。有关更多信息，请参阅 *Amazon Log CloudWatch s 用户指南*中的在[ CloudWatch 控制面板上使用小组件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-and-work-with-widgets.html)。对于实时数据可视化，您可以根据自己的要求自定义小组件。<br />有关控制面板选项和功能的更多信息，请参阅 [Amazon Lo * CloudWatch gs 用户指南*中的使用 Amazon 控制 CloudWatch 面板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)[和使用控制面板变量创建灵活的控制面 CloudWatch 板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_dashboard_variables.html)。 | AWS 管理员、AWS DevOps、AWS 系统管理员、云管理员、云架构师、 DevOps 工程师 | 

## 问题排查
<a name="monitor-application-activity-by-using-cloudwatch-logs-insights-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 看不到查询结果或查询似乎失效 | 从基于查询示例修改而成的可运行查询开始。[https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-examples.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-examples.html)对查询的各个部分（例如筛选器或字段）进行少量增量更改，并利用 CloudWatch 日志[查询生成器功能](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs-Insights-Query-Assist.html)。 | 
| 日志组未创建日志流 | 在 IAM 策略中，确保为[CreateLogStream](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogStream.html)和[CreateLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html)操作的资源提供了通配符`(*)`值。如果没有此通配符权限，`create ` 操作将无法成功。 | 
| 查询超时或性能降低 | 缩短时间范围，瞄准特定的日志组，或者简化查询。复杂的正则表达式 (`regex`) 模式和较大的时间范围会增加查询时间。 | 
| 未返回有效时间范围内的数据 | 验证日志组选择并检查是否正在提取日志（查看日志流），并确认筛选模式与您的日志格式匹配。 | 

## 相关资源
<a name="monitor-application-activity-by-using-cloudwatch-logs-insights-resources"></a>
+ [使用 “日志见解” 分析 CloudWatch 日志数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)
+ [Amazon CloudWatch FAQs](https://aws.amazon.com/cloudwatch/faqs/#topic-0)
+ [使用 CloudWatch 仪表板变量创建灵活的仪表板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_dashboard_variables.html)
+ [开始使用 Logs Insights QL：查询教程](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData_Tutorials.html)
+ [使用自然语言生成和更新 L CloudWatch ogs Insights 查询](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs-Insights-Query-Assist.html)
+ [ PutDashboard 与 AWS SDK 或 CLI 配合使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/example_cloudwatch_PutDashboard_section.html)
+ [使用日志组和日志流](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)