

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

# 在 Amazon EKS 中监控
<a name="monitoring"></a>

在 Amazon EKS 中进行监控可以关键地了解您的 Kubernetes 工作负载的运行状况、性能和安全性。如果没有适当的监控，您将面临服务中断、安全漏洞和资源利用效率低下的风险，这可能会影响业务运营并增加成本。有效的监控使您能够主动识别和解决问题、优化资源使用并维护容器化应用程序的合规性要求。通过实施全面的监控解决方案，您可以确保高可用性，尽早发现异常，并做出以数据为依据的决策，以扩展和改进 Amazon EKS 基础设施。

本节探讨了 Amazon EKS 监控的各个方面，包括不同的监控类型、可用工具和最佳实践，以帮助您为 Kubernetes 环境构建强大的监控策略。

**Topics**
+ [监控的类型](monitoring-types.md)
+ [工具](monitoring-tools.md)
+ [实现高可用性](monitoring-ha-setup.md)
+ [最佳实践](monitoring-best-practices.md)
+ [高级注意事项](monitoring-considerations.md)

# 亚马逊 EKS 中的监控类型
<a name="monitoring-types"></a>

Amazon EKS 中的有效可观察性涉及基础设施、应用程序和安全监控活动。

## 基础设施监控
<a name="infrastructure"></a>

基础设施监控是 Amazon EKS 可观测性的基本组成部分，它可以深入了解您的 Kubernetes 集群基础元素的运行状况和性能。它的核心是跟踪控制平面组件和工作节点的生命体征，并确保底层平台保持稳定和高效。
+ **控制平面监控**至关重要，因为它可以监督 API 服务器、etcd 数据库和调度器等关键组件。通过监控 API 服务器延迟，您可以快速识别可能影响应用程序部署或扩展操作的性能瓶颈。Etcd 性能监控可验证集群的状态数据库是否有效运行，并防止可能影响整个集群的数据一致性问题。
+ **节点级监控**同样重要，因为它侧重于运行容器化工作负载的计算资源。这包括跟踪所有工作节点的 CPU 利用率、内存消耗、磁盘 I/O 和网络性能。了解这些指标有助于防止资源耗尽、优化节点扩展决策并确保适当的容量规划。
+ **网络监控**在维护 pod、服务和外部资源之间的可靠通信方面起着至关重要的作用。通过监控网络吞吐量、延迟和连接状态，您可以尽早发现连接问题并确保应用程序通信顺畅。存储监控通过跟踪卷性能、容量利用率和 I/O 模式来补充网络监控，以帮助防止与数据相关的瓶颈。

基础设施监控可作为潜在问题的预警系统，实现主动维护，并确保最佳资源分配。如果没有强大的基础架构监控，您将面临意外停机、性能下降和资源使用效率低下的风险，这可能会严重影响业务运营和成本。

## 应用程序监控
<a name="application"></a>

应用程序监控对于在 Amazon EKS 环境中维护健康、高性能和可靠的容器化应用程序至关重要。此级别的监控侧重于集群中运行的实际工作负载，并提供有关应用程序的行为、性能以及与其他服务交互的关键见解。

应用程序监控包括容器级监控、服务级别监控和分布式跟踪。
+ 在**容器级别**，应用程序监控会跟踪关键指标，例如容器运行状况、重启次数和资源消耗模式。这些指标可帮助您识别可能消耗过多资源或频繁重启的有问题的容器，这些容器可能表明存在诸如内存泄漏或配置问题之类的潜在问题。通过监控容器生命周期事件，您可以确保应用程序行为正常，并快速解决部署问题。
+ **服务级别监控**提供对应用程序性能和可靠性指标的可见性，例如响应时间、错误率和请求吞吐量。这些指标对于维护服务级别目标 (SLOs) 和确保良好的终端用户体验至关重要。您可以跟踪不同服务端点之间的延迟，识别性能瓶颈，监控错误模式以保持应用程序的可靠性。
+ **分布式跟踪**是应用程序监控的另一个关键方面，尤其是在微服务架构中。通过实现跟踪，您可以跟踪请求流经不同服务的情况，了解依赖关系并识别性能瓶颈。这种 end-to-end可见性可帮助您优化服务交互并解决跨多个组件的复杂问题。

自定义应用程序指标在提供特定于业务的见解方面起着至关重要的作用。这些指标可能包括订单处理率、用户登录频率或交易成功率等指标。您可以将这些自定义指标与基础架构和容器指标关联起来，以更好地了解基础设施性能如何影响业务运营，并做出以数据为依据的扩展和优化决策。

应用程序监控的重要性在于它能够提供应用程序运行状况和性能的全面视图。这种监控使您能够保持高服务质量，快速解决问题，并持续优化应用程序以实现业务目标。

## 安全监控
<a name="security"></a>

Amazon EKS 中的安全监控是一项关键活动，可以帮助组织维护其 Kubernetes 环境的完整性、机密性和合规性。这种全面的安全方法结合了持续监控、威胁检测和合规性监控，可保护容器化工作负载免受潜在安全风险和未经授权的访问的影响。它包括身份验证和授权监控、网络安全监控以及配置和合规性监控。
+ **身份验证和授权监控**通过跟踪所有访问集群的尝试来形成第一道防线。这包括监控 API 服务器请求、跟踪成功和失败的登录尝试以及审计基于角色的访问控制 (RBAC) 更改。通过维护详细的审计日志，记录谁访问了哪些资源以及何时访问了哪些资源，您可以快速检测潜在的安全漏洞、未经授权的访问尝试或权限升级活动。在必须保持严格的访问控制的多租户环境中，这一点尤其重要。
+ **网络安全监控**侧重于检测和防止 Pod 和服务之间未经授权的通信。通过监控网络策略违规行为和异常流量模式，您可以识别潜在的安全威胁，例如容器逃跑尝试或集群内的横向移动。这包括跟踪内部集群通信和外部流量模式，以确保容器仅与授权终端节点通信并遵循定义的安全策略。
+ **配置和合规性监控**对于维护安全基准和满足监管要求至关重要。它包括持续扫描容器映像中是否存在漏洞、监控运行时安全以及跟踪可能影响安全状况的配置更改。定期的合规性审计可确保遵守行业标准和组织安全政策，配置偏差检测有助于防止可能带来安全风险的未经授权的更改。

Amazon EKS 中的安全监控提供了必要的可见性和控制力，有助于抵御现代安全威胁，同时确保遵守监管要求。通过实施全面的安全监控，您的组织可以保持强大的安全态势，快速响应安全事件，并证明其符合各种监管标准。

# 适用于 Amazon EKS 的监控工具
<a name="monitoring-tools"></a>

本节讨论三类 Amazon EKS AWS 监控工具：监控服务、开源或专有解决方案以及专业工具。

## AWS 服务
<a name="monitoring-services"></a>
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)：全面的监控和记录服务

  CloudWatch 构成了 AWS 监控解决方案的支柱，为 Amazon EKS 环境提供了广泛的功能。它为精细的容器和集群指标提供容器见解，因此您可以监控性能、资源利用率和应用程序运行状况。该服务在日志聚合和分析方面表现出色，并支持跨容器和节点的集中日志记录。 CloudWatch 与... 自然融为一体 AWS 服务。它提供自动警报配置，并支持自定义指标和控制面板，这使其成为 Amazon EKS 监控的必备工具。
+ [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html): 高级分布式追踪平台

  X-Ray 通过提供复杂的分布式跟踪功能来提高可观察性。其服务地图可视化可提供对应用程序架构和依赖关系的清晰见解，详细的请求跟踪有助于识别各服务的性能瓶颈。X-Ray 可以通过复杂的微服务架构跟踪请求，这对于故障排除和优化非常有用，尤其是在跨多个 AWS 服务分布式系统中。
+ [AWS 发行版 OpenTelemetry：统一可](https://aws-otel.github.io/)观测性框架

  Distro for OpenTelemetry 提供统一的数据收集功能和跨平台支持，因此非常适合混合环境。该服务与其他服务集成 AWS 服务，支持定制仪器，在保持与行业标准的兼容性的同时，为实施全面的监控解决方案提供了灵活性。
+ [亚马逊托管 Grafana：企业](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html)级可视化

  Amazon Managed Grafana 为数据可视化和分析提供完全托管的服务。它提供了与其他内置安全功能的无缝集成 AWS 服务，并具有企业级可扩展性。该服务简化了仪表板的创建和管理，同时还提供了高级功能，例如跨账户数据源访问和与 AWS IAM Identity Center集成。
+ [适用于 Prometheus 的亚马逊托管服务](https://docs.aws.amazon.com/prometheus/latest/userguide/what-is-Amazon-Managed-Service-Prometheus.html)：高度可用、安全、托管的监控

  适用于 Prometheus 的亚马逊托管服务是一项完全托管、与 Prometheus 兼容的监控服务。它提供自动扩展、高可用性以及安全的指标摄取和查询。该服务与 Amazon EKS 无缝集成，消除了管理 Prometheus 服务器的运营开销。

## 开源或专有解决方案
<a name="monitoring-open-source"></a>

上一节中描述的 AWS 工具提供无缝集成和托管服务。本节中列出的开源工具 AWS 服务 通过提供灵活性和广泛的自定义选项来补充。了解每种工具的功能和用例有助于您设计最能满足您特定要求的监控策略。
+ [Prometheus](https://docs.aws.amazon.com/eks/latest/userguide/deploy-prometheus.html)：指标收集工具包

  Prometheus 是一款用于在 Kubernetes 环境中收集指标的开源解决方案。其时间序列数据库和 PromQL 查询语言可实现复杂的指标分析。该平台的服务发现功能可自动适应动态的 Kubernetes 环境，其警报管理系统可让您随时了解关键问题。Prometheus 提供了广泛的集成选项，使其成为全面指标监控的多功能选择。
+ [Grafana](https://grafana.com/docs/grafana-cloud/monitor-infrastructure/kubernetes-monitoring/configuration/config-other-methods/config-aws-eks/)：高级可视化引擎

  Grafana 通过其可视化功能将复杂的监控数据转化为切实可行的见解。该平台可创建自定义仪表板，将来自多个来源的数据组合在一起，并提供基础架构和应用程序指标的统一视图。它支持各种数据源和警报管理功能，可提供全面的监控。Grafana 可以帮助您可视化实时和历史数据，因此您可以识别趋势并做出明智的决策。
+ [Fluent Bit](https://fluentbit.io/)：统一日志层

  该日志解决方案为 Kubernetes 环境提供日志收集和管理。其原生 Kubernetes 集成可确保从容器和节点无缝收集日志，并且它对多个输出目标的支持为日志存储和分析提供了灵活性。日志解析和筛选等高级功能使您能够根据特定要求处理和路由日志。Fluent Bit 的轻量级特性使其特别适合容器化环境。
+ [Datadog](https://www.datadoghq.com/blog/eks-monitoring-datadog/)：全栈可观察性

  Datadog 提供全面的监控功能，并支持原生 Kubernetes。它提供基础设施监控、应用程序性能监控 (APM)、日志管理和实时分析。您可以使用该平台的自动服务发现和广泛的集成目录进行Amazon EKS监控，并使用其机器学习功能来检测异常和预测潜在问题。
+ [全新 Relic](https://docs.newrelic.com/docs/infrastructure/amazon-integrations/connect/eks-add-on/)：应用程序性能监控

  New Relic 提供了对应用程序性能和基础架构运行状况的可见性。它的 Kubernetes 集成提供了详细的容器见解、分布式跟踪和自定义仪表板。该平台可帮助您将应用程序性能与基础架构指标关联起来，以便您可以快速识别和解决问题。
+ El@@ [astic Stack（ELK Stack）](https://aws.amazon.com/opensearch-service/resources/the-benefits-of-the-elk-stack/)：日志分析和搜索

  ELK Stack 结合了 Elasticsearch、Logstash 和 Kibana，提供日志管理和分析功能。它提供高级搜索功能、可视化工具和机器学习功能。您可以使用该堆栈来处理来自您的 Amazon EKS 环境的大量日志数据。

## 专业工具
<a name="monitoring-special"></a>

您可以根据具体的监控要求、运营规模和组织偏好混合搭配以下工具。关键是要创建一个能够提供全面可见性的监控堆栈，同时保持可管理性和成本效益。
+ [kube-state-metrics (KSM)](https://github.com/kubernetes/kube-state-metrics)：Kubernetes 状态监控

  该附加服务监听 Kubernetes API 服务器并生成有关对象状态的指标。它提供了对部署、Pod 和其他 Kubernetes 资源的运行状况的见解。
+ [Kubernetes 指标服务器：资源指标](https://docs.aws.amazon.com/eks/latest/userguide/metrics-server.html)

  该指标服务器从 kubelet 收集资源指标，并通过 Kubernetes 指标 API 将其公开。它提供横向 pod 自动缩放以及基本的 CPU 和内存指标。
+ [Kubecost：Kubernetes 成本](https://github.com/kubecost/cost-analyzer-helm-chart)监控

  诸如 Kubecost 之类的工具可为 EKS 集群提供详细的成本分析和优化建议。它们可以帮助您了解和优化不同命名空间、部署和服务的云支出。

# 为 Amazon EKS 监控解决方案实现高可用性
<a name="monitoring-ha-setup"></a>

用于 Amazon EKS 监控的强大高可用性 (HA) 策略对于确保持续监控您的 Kubernetes 环境至关重要。本节讨论在监控基础架构的不同方面实施 HA 的全面方法。

## 架构冗余和可扩展性
<a name="architecture"></a>

要构建高度可用的监控系统，首先要进行适当的架构设计。监控组件应分布在多个 AWS 可用区中，以防出现区域故障。这包括对 Prometheus 服务器、日志收集器和警报管理器等关键监控组件实施横向扩展。您可以使用 AWS 托管服务，例如适用于 Prometheus 的亚马逊托管服务和 Amazon Managed Grafana，以帮助减少运营开销，同时确保高可用性。配置自动故障转移机制，以在组件故障期间保持服务连续性，同时设置运行状况检查和自动恢复程序。

## 弹性数据存储策略
<a name="data-storage"></a>

数据存储弹性是保持监控系统可靠性的基础。实施分布式存储解决方案可确保即使单个存储节点出现故障，指标数据和日志仍可访问。这包括在多个可用区之间配置适当的数据复制，以及使用不同的存储后端实现冗余。为历史数据建立定期备份程序，并记录各种故障情形的恢复流程。对于 Prometheus 等时间序列数据库，实施远程存储解决方案有助于将存储问题与数据收集区分开来，并提高系统的整体可靠性。

## 冗余警报管理
<a name="alert-mgmt"></a>

在 HA 设置中需要特别注意警报管理。部署冗余警报管理器可确保即使在系统故障期间也能将关键通知送达目标收件人。配置多个通知渠道，例如电子邮件、短信、Slack， PagerDuty 并提供备用通信路径。使用警报重复数据删除机制来防止在部分系统故障期间出现警报风暴，并使用后备通知方法来确保不会错过关键警报。实施警报关联有助于在故障转移场景期间维护上下文，并防止来自冗余系统的重复通知。

## 负载平衡和服务发现
<a name="load-balancing"></a>

适当的负载平衡对于维持稳定的监控服务至关重要。 AWS 应用程序负载均衡器将传入的监控流量分发到多个终端节点，运行状况检查可确保流量仅路由到运行状况良好的实例。服务发现机制有助于监控组件自动适应环境的变化，例如添加新节点或服务。使用在集群扩展时确保全面覆盖 DaemonSets ，从而在所有节点上一致地部署监控代理。

## 其他 HA 注意事项
<a name="ha-considerations"></a>

网络弹性：
+ 实现冗余网络路径。
+ 跨可用区配置正确的子网设计。
+ [AWS Direct Connect](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/aws-direct-connect.html)与备用路由一起使用。
+ 配置适当的安全组和网络访问控制列表（网络 ACLs）。

监视显示器：
+ 部署辅助监控系统。
+ 实施跨区域监控。
+ 为无响应的系统配置警报。
+ 定期测试故障转移程序。

容量规划：
+ 监控资源使用趋势。
+ 实现预测性扩展。
+ 定期测试性能。

数据管理：
+ 实施数据保留政策。
+ 配置指标聚合。
+ 规划数据生命周期管理。
+ 定期优化存储。

恢复程序：
+ 文档恢复流程。
+ 定期测试灾难恢复。
+ 尽可能实施自动恢复。
+ 确定并实施明确的上报路径。

通过实施这些高可用性实践，您可以确保您的 Amazon EKS 监控基础设施保持可靠性和弹性，并且即使在各种故障情况下，您也可以持续监控 Kubernetes 环境。定期测试和更新这些 HA 配置可确保它们随着环境的演变而保持有效。

# 在 Amazon EKS 中进行监控的最佳实践
<a name="monitoring-best-practices"></a>

## 战略实施方法
<a name="implementation"></a>

成功的 Amazon EKS 监控策略始于精心策划的分阶段实施方法。
+ 首先确定和监控直接影响业务运营和应用程序可靠性的关键指标。该基础应包括基本的基础架构指标、关键应用程序性能指标和关键安全指标。根据业务需求和经验教训逐步扩大监测范围，并确保每一项增加都能提供有意义的价值。
+ 使用 Terraform 等基础设施即代码 (IaC) 工具实施自动化部署流程，或者确保一致性和 CloudFormation 可重复性。
+ 测试和验证监控系统，以帮助保持可靠性和准确性。
+ 不断完善监控参数，以适应不断变化的业务需求。

## 有效的数据管理
<a name="data-mgmt"></a>

正确的数据管理对于维护高效且具有成本效益的监控解决方案至关重要。
+ 实施明确的数据保留政策，在历史分析需求和存储成本之间取得平衡。
+ 为不同的指标类型配置适当的采样率：关键指标的频率更高，不太关键的指标的频率较低。
+ 使用指标聚合来减少数据量，同时保持有意义的见解，特别是对于长期趋势分析。
+ 为集中式日志系统（例如 CloudWatch 日志）实施系统的日志保留和存档程序，以管理存储成本并保持对重要数据的访问权限。
**注意**  
在 Amazon EKS 1.21 或更高版本中，kubelet 会自动处理容器级别的日志轮换。
+ 考虑实施日志存储 hot-warm-cold架构，以优化访问速度和成本效益。

## 警报配置和管理
<a name="alert-config"></a>

警报配置需要仔细考虑，以便在不造成警报疲劳的情况下保持有效性。
+ 根据服务级别目标 (SLOs) 和历史性能模式定义清晰、可操作的阈值。
+ 实施分级警报严重度系统，明确区分需要立即关注的关键问题和不太紧急的问题。
+ 确保警报提供足够的背景信息和可操作的信息，以便于快速解决问题。
+ 针对不同的警报严重程度，制定明确的上报程序，明确所有权和响应时间。
+ 定期审查和完善警报配置，以帮助保持其相关性和有效性。

## 资源优化
<a name="resource"></a>

持续监控资源利用率对于维持具有成本效益的运营至关重要。
+ 对所有集群组件（包括节点、Pod 和永久卷）实施全面的资源监控。
+ 根据实际使用模式和性能要求配置自动扩展，以确保高效利用资源，同时保持性能。
+ 使用成本分配标签来跟踪不同团队、应用程序或环境的资源消耗。
+ 定期分析资源效率指标，以确定优化机会并实施改进。
+ 考虑实施成本管理工具来跟踪和优化云支出。

## 安全性
<a name="security"></a>

安全考虑应该是您的监控策略不可或缺的一部分。
+ 对所有监控组件实施[最低权限访问原则](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_permissions_least_privileges.html)，以确保用户和服务仅拥有他们需要的权限。
+ 启用全面的审核日志，以跟踪对监控系统的所有访问和更改。
+ 定期对监控配置和访问模式进行安全审查，以识别潜在的漏洞。
+ 对传输中和静态的敏感监控数据实施加密。
+ 将安全监控与现有的安全信息和事件管理 (SIEM) 系统集成，以实现全面的安全可见性。

# Amazon EKS 中的高级监控注意事项
<a name="monitoring-considerations"></a>

性能优化：
+ 优化指标收集间隔。
+ 配置高效的查询模式。
+ 实现指标预聚合。
+ 使用适当的存储解决方案。

合规与治理：
+ 维护审计跟踪。
+ 实施合规监控。
+ 定期提供合规报告。
+ 文件监控程序。

灾难恢复：
+ 定期备份监控配置。
+ 文件恢复程序。
+ 测试恢复过程。

持续改进：
+ 定期监控复习环节。
+ 优化性能周期。
+ 根据事件更新监控。
+ 纳入用户反馈。

这些最佳实践为实施和维护 Amazon EKS 环境的有效监控解决方案提供了一个框架。定期审查和更新这些做法，使其与您的组织需求和行业标准保持一致。监控不是一次性设置，而是一个持续的过程，需要定期关注和完善。