

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

# 搜索和分析日志 CloudWatch
<a name="cloudwatch-search-analysis"></a>

在以一致的格式和位置捕获日志和指标后，除了识别和排除问题外，您还可以对其进行搜索和分析，以帮助提高运营效率。我们建议您以格式良好的格式（例如 JSON）捕获日志，以便更轻松地搜索和分析日志。大多数工作负载使用网络、计算、存储和数据库等 AWS 资源的集合。在可能的情况下，您应共同分析来自这些资源的指标和日志，并将它们关联起来，以便有效地监控和管理所有 AWS 工作负载。

CloudWatch [提供了多种功能来帮助分析日志和指标，例如 CloudWatch Application [Insigh](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html) ts 用于跨不同 AWS 资源共同定义和监控应用程序的指标和日志，CloudWatch 用于显示指标异常的异常情况，以及用于交互式搜索和分析[CloudWatch 日志中日志数据的日志见解](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/AnalyzingLogData.html)。](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch_Anomaly_Detection.html) CloudWatch 

## 使用 “应用洞察” 对 CloudWatch 应用程序进行集体监控和分析
<a name="monitor-application-insights-cloudwatch"></a>

应用程序所有者可以使用 Amazon A CloudWatch pplication Insights 来设置工作负载的自动监控和分析。除了为账户中的所有工作负载配置的标准系统级监控之外，还可以进行此配置。通过 App CloudWatch lication Insights 设置监控还可以帮助应用程序团队主动调整运营并缩短平均恢复时间 (MTTR)。 CloudWatch Application Insights 可以帮助减少建立应用程序级日志记录和监控所需的工作量。它还提供了一个基于组件的框架，可帮助团队划分日志和监控职责。

CloudWatch Application Insights 使用资源组来识别应作为应用程序进行集体监控的资源。资源组中支持的资源将成为 Application Insights CloudWatch 应用程序中单独定义的组件。Application Insights CloudWatch 应用程序的每个组件都有自己的日志、指标和警报。

对于日志，您可以定义应在组件和 Application Insights CloudWatch 应用程序中使用的日志模式集。日志模式集是基于正则表达式搜索的日志模式的集合，以及检测到该模式时的低、中或高严重性。对于指标，您可以从服务特定指标和支持的指标列表中选择要监控的每个组件的指标。对于警报，App CloudWatch lication Insights 会自动为所监控的指标创建和配置标准或异常检测警报。 CloudWatch Application Insights 可以自动配置 CloudWatch 文档中[ CloudWatch 应用程序见解支持的日志和指标](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/appinsights-logs-and-metrics.html)中概述的技术的指标和日志捕获。下图显示了 App CloudWatch lication Insights 组件与其日志和监控配置之间的关系。每个组件都定义了自己的日志和指标，以便使用 CloudWatch 日志和指标进行监控。

![\[AWS 资源组、日志组、现有警报和新 AutoConfigured 警报之间的流程流。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/images/cloudwatch-image-3.png)


App CloudWatch lication Insights 监控的 EC2 实例需要 Systems Manager、 CloudWatch 代理和权限。有关这方面的更多信息，请参阅 CloudWatch 文档中的使用 App [lication Insights 配置 CloudWatch 应用程序的先决条件](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/appinsights-prereqs.html)。 CloudWatch Application Insights 使用 Systems Manager 安装和更新 CloudWatch 代理。在 Application Insights 中 CloudWatch 配置的指标和日志会创建一个 CloudWatch 代理配置文件，该文件存储在 Systems Manager 参数中，每个 CloudWatch 应用程序见解组件都有`AmazonCloudWatch-ApplicationInsights-SSMParameter`前缀。这会导致将单独的 CloudWatch 代理配置文件添加到 EC2 实例上的 CloudWatch 代理配置目录中。运行 Systems Manager 命令将此配置附加到 EC2 实例上的活动配置中。使用 A CloudWatch pplication Insights 不会影响现有的 CloudWatch 代理配置设置。除了自己的系统和 CloudWatch 应用程序级 CloudWatch 代理配置外，您还可以使用 Application Insights。但是，您应确保配置不会重叠。

## 使用 “日志见解” 执行 CloudWatch 日志分析
<a name="log-analysis-cloudwatch-insights"></a>

CloudWatch Logs Insights 使用一种简单的查询语言可以轻松搜索多个日志组。如果您的应用程序日志采用 JSON 格式结构，则 CloudWatch Logs Insights 会自动发现多个日志组中日志流中的 JSON 字段。您可以使用 CloudWatch Logs Insights 来分析您的应用程序和系统日志，这样可以保存您的查询以备将来使用。L CloudWatch ogs Insights 的查询语法支持诸如使用函数聚合之类的函数，例如 sum ()、avg ()、count ()、min () 和 max ()，这些函数有助于对应用程序进行故障排除或性能分析。

如果您使用嵌入式指标格式创建 CloudWatch 指标，则可以使用支持的聚合函数查询嵌入式指标格式日志，以生成一次性指标。这可以根据需要捕获生成特定指标所需的数据点，而不是主动捕获它们作为自定义指标，从而帮助您降低 CloudWatch 监控成本。这对于基数较高、会产生大量指标的维度特别有效。 CloudWatch Container Insights 也采用这种方法来捕获详细的性能数据，但只为这些数据的子集生成 CloudWatch 指标。

例如，以下嵌入式指标条目仅从嵌入式 CloudWatch指标格式语句中捕获的指标数据生成一组有限的指标：

```
{
 "AutoScalingGroupName": "eks-e0bab7f4-fa6c-64ba-dbd9-094aee6cf9ba",
 "CloudWatchMetrics": [
 {
 "Metrics": [
 {
 "Unit": "Count",
 "Name": "pod_number_of_container_restarts"
 }
 ],
 "Dimensions": [
 [
 "PodName",
 "Namespace",
 "ClusterName"
 ]
 ],
 "Namespace": "ContainerInsights"
 }
 ],
 "ClusterName": "eksdemo",
 "InstanceId": "i-03b21a16b854aa4ca",
 "InstanceType": "t3.medium",
 "Namespace": "amazon-cloudwatch",
 "NodeName": "ip-172-31-10-211.ec2.internal",
 "PodName": "cloudwatch-agent",
 "Sources": [
 "cadvisor",
 "pod",
 "calculated"
 ],
 "Timestamp": "1605111338968",
 "Type": "Pod",
 "Version": "0",
 "pod_cpu_limit": 200,
 "pod_cpu_request": 200,
 "pod_cpu_reserved_capacity": 10,
 "pod_cpu_usage_system": 3.268605094109382,
 "pod_cpu_usage_total": 8.899539221131045,
 "pod_cpu_usage_user": 4.160042847048305,
 "pod_cpu_utilization": 0.44497696105655227,
 "pod_cpu_utilization_over_pod_limit": 4.4497696105655224,
 "pod_memory_cache": 4096,
 "pod_memory_failcnt": 0,
 "pod_memory_hierarchical_pgfault": 0,
 "pod_memory_hierarchical_pgmajfault": 0,
 "pod_memory_limit": 209715200,
 "pod_memory_mapped_file": 0,
 "pod_memory_max_usage": 43024384,
 "pod_memory_pgfault": 0,
 "pod_memory_pgmajfault": 0,
 "pod_memory_request": 209715200,
 "pod_memory_reserved_capacity": 5.148439982463127,
 "pod_memory_rss": 38481920,
 "pod_memory_swap": 0,
 "pod_memory_usage": 42803200,
 "pod_memory_utilization": 0.6172094650851303,
 "pod_memory_utilization_over_pod_limit": 11.98828125,
 "pod_memory_working_set": 25141248,
 "pod_network_rx_bytes": 3566.4174629544723,
 "pod_network_rx_dropped": 0,
 "pod_network_rx_errors": 0,
 "pod_network_rx_packets": 3.3495665260575094,
 "pod_network_total_bytes": 4283.442421354973,
 "pod_network_tx_bytes": 717.0249584005006,
 "pod_network_tx_dropped": 0,
 "pod_network_tx_errors": 0,
 "pod_network_tx_packets": 2.6964010534762948,
 "pod_number_of_container_restarts": 0,
 "pod_number_of_containers": 1,
 "pod_number_of_running_containers": 1,
 "pod_status": "Running"
}
```

但是，您可以查询捕获的指标以获得进一步的见解。例如，你可以运行以下查询来查看最新 20 个出现内存页面错误的 pod：

```
fields @timestamp, @message
| filter (pod_memory_pgfault > 0)
| sort @timestamp desc
| limit 20
```

## 使用 Amazon OpenSearch 服务执行日志分析
<a name="log-analysis-amazon-es"></a>

CloudWatch [通过允许您使用[订阅筛选器](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/CWL_ES_Stream.html)将日志数据从 CloudWatch 日志组流式传输到您选择的亚马逊 OpenSearch 服务集群，从而与 Amazon Service 集成。 OpenSearch ](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/what-is.html)您可以将其 CloudWatch 用于主要日志和指标的捕获和分析，然后使用 Amazon S OpenSearch ervice 对其进行扩展，以用于以下用例：
+ **精细的数据访问控制** — Amazon S OpenSearch ervice 使您可以将对数据的访问限制到字段级别，并根据用户权限帮助对字段中的数据进行匿名化处理。如果您想在不暴露敏感数据的情况下支持故障排除，这很有用。
+ **跨多个账户、区域和基础设施聚合和搜索日志 — 您可以将来自多个账户和地区的**日志流式传输到通用的 Amazon S OpenSearch ervice 集群中。您的集中式运营团队可以分析趋势、问题，并跨账户和地区进行分析。将 CloudWatch 日志流式传输到 Amazon S OpenSearch ervice 还有助于您在中心位置搜索和分析多区域应用程序。
+ **使用 ElasticSearch代理直接向 Amazon S OpenSearch ervice 发送和丰富日志** — 您的应用程序和技术堆栈组件可以使用 OSs CloudWatch 代理不支持的组件。在将日志数据传送到您的日志解决方案之前，您可能还需要对其进行丰富和转换。亚马逊 OpenSearch 服务支持标准 Elasticsearch 客户端，例如 Elasti [c Beats 系列数据传送器](https://www.elastic.co/beats/)和 [Logstash](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/managedomains-logstash.html)，它们支持在将日志数据发送到亚马逊服务之前进行日志充实和转换。 OpenSearch 
+ **现有的运营管理解决方案使用 [Logstash ElasticSearch、Kibana](https://www.elastic.co/elastic-stack?ultron=B-Stack-Trials-AMER-US-W-Exact&gambit=Elasticsearch-ELK&blade=adwords-s&hulk=cpc&Device=c&thor=elk%20elasticsearch%20logstash%20kibana&gclid=EAIaIQobChMI3raE5vWK8AIVTT6tBh2idgBbEAAYASAAEgKsoPD_BwE) (ELK) 堆栈进行日志记录和监控** — 您可能已经在亚马逊 OpenSearch 服务或开源 Elasticsearch 上进行了大量投资，并且已经配置了许多工作负载。您可能还想继续使用在 [Kibana](https://www.elastic.co/kibana) 中创建的操作仪表板。

如果您不打算使用 CloudWatch 日志，则可以使用亚马逊 OpenSearch 服务支持的代理、日志驱动程序和库（例如 Fluent Bit、Fluentd、l [ogstash](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/managedomains-logstash.html) 和 Ope [n Distro for ElasticSearch API](https://opendistro.github.io/for-elasticsearch-docs/docs/elasticsearch/popular-api/)）将您的日志直接发送到亚马逊服务并绕过。 OpenSearch CloudWatch但是，您还应该实施一种解决方案来捕获 AWS 服务生成的日志。 CloudWatch 日志是许多 AWS 服务的主要日志捕获解决方案，多个服务会自动在中创建新的日志组 CloudWatch。例如，Lambda 会为每个 Lambda 函数创建一个新的日志组。您可以为日志组设置订阅筛选条件，以将其日志流式传输到 Amazon S OpenSearch ervice。您可以为要流式传输到 Amazon S OpenSearch ervice 的每个日志组手动配置订阅筛选条件。或者，您可以部署一个解决方案，自动将新的日志组订阅到 ElasticSearch 集群。您可以将日志流式传输到同一个账户中的 ElasticSearch 集群，也可以使用集中式账户将日志流式传输到集群。使用同一账户将日志流式传输到 ElasticSearch 集群可以帮助工作负载所有者更好地分析和支持其工作负载。

您应该考虑在集中式或共享账户中设置 ElasticSearch 集群，以便汇总账户、区域和应用程序中的日志。例如， AWS Control Tower 设置用于集中日志记录的日志存档帐户。在中创建新账户后 AWS Control Tower，其 AWS CloudTrail 和 AWS Config 日志将传送到此集中式账户中的 S3 存储桶。所检测的日志 AWS Control Tower 用于配置、更改和审核日志。

要使用 Amazon S OpenSearch ervice 建立集中式应用程序日志分析解决方案，您可以将一个或多个集中式 Amazon S OpenSearch ervice 集群部署到您的集中式日志账户，并将其他账户中的日志组配置为将日志流式传输到集中式 Amazon S OpenSearch ervice 集群。

您可以创建单独的 Amazon S OpenSearch ervice 集群来处理可能分布在您的账户中的不同应用程序或云架构层。使用单独的 Amazon S OpenSearch ervice 集群可以帮助您降低安全和可用性风险，而拥有通用 Amazon S OpenSearch ervice 集群可以更轻松地在同一集群中搜索和关联数据。