亚马逊AWS官方博客

教育网站 ApplyBoard 使用 CloudWatch Container Insights 监控关键任务 EKS 环境

Original URL: https://amazonaws-china.com/cn/blogs/mt/using-amazon-cloudwatch-container-insights-to-monitor-amazon-eks-workloads/

 

本文为ApplyBoard公司DevOps工程师Jayat Markan撰写的客座文章。Jayat负责帮助开发者团队构建并运行具备高度稳定性与可用性的应用程序平台。

ApplyBoard公司的在线平台,旨在帮助国际学生向美国及加拿大的教育机构提出就读申请。本文主要讨论ApplyBoard如何使用 Amazon CloudWatch Container Insights在Amazon EKS环境上建立监控机制。

在这样的关键任务生产环境当中,高效监控应用程序基础设施无疑成为重中之重。CloudWatch Container Insights能够帮助我们从Amazon ECS、AWS Fargate、Amazon EKS以及Kubernetes环境中收集、聚合并汇总多种指标与查询日志,借此监控容器环境中各项关键资源的运行情况。大家还可以根据CloudWatch Container Insights收集到的指标设置CloudWatch警报。

概述

在ApplyBoard,良好的用户体验是我们最关注的目标。我们的应用程序必须拥有高可用性、良好的性能,以及快速扩展以满足用户需求的能力。

ApplyBoard公司工程技术副总裁Hiep Vuong解释道,“要帮助学生们达成他们的教育目标,系统与服务的可用性和高性能表现至关重要。以Amazon CloudWatch为基础建立起的监控机制,则成为保障性能表现与可用性要求的一项关键要素。”

ApplyBoard公司使用Amazon EKS托管各类微服务,用以支持其应用程序环境。为了实现这套环境的高可用性,对EKS环境性能与运行状况的持续监控自然必不可少。

现实问题

ApplyBoard公司的IT团队最初使用一系列第三方工具为EKS环境建立起监控解决方案,这就给DevOps团队在维护、管理、更新以及安全保护等层面带来了额外的负担。该团队决定寻求一种新型解决方案,且要求此方案必须简单、易维护、功能齐备且由AWS原生提供。

解决方案

在认真分析了各类解决方案之后,IT团队决定使用CloudWatch Container Insights在其EKS环境上建立监控与运行观察体系。

在EKS环境上完成相应配置之后,CloudWatch Container Insights将自动提供自定义仪表板,用于显示各层面的容器运行状况与性能信息,具体涵盖集群、服务、节点、Pod以及容器等。

设置CloudWatch Container Insights

配合快速设置指南,大家可以轻松配置CloudWatch Container Insights,并引导EKS集群将日志与指标发送至CloudWatch处。

在CloudWatch Container Insights配置完成后,您将获得一套带有多种功能部件的自动化仪表板,其中包含多项指标,例如CPU利用率、内存利用率、磁盘利用率以及网络指标等,这些指标会跨AWS账户内所有EKS集群进行聚合,如以下截屏所示。

通过跟踪应用程序基础设施,ApplyBoard得以深入理解EKS环境的容量配置情况,据此调整资源配额以高效利用现有环境,同时将运营成本控制在最低水平。

负责运营这套应用环境的DevOps团队,则希望监控作为底层托管平台的EKS集群的运行状况与性能表现。借助CloudWatch Container Insights,只需在过滤器的下拉列表中选择集群名称,即可轻松查看各集群的详细信息,如以下截屏所示。

通过在“操作”下拉列表中选择集群的名称,可以轻松的选择和查看应用日志、性能日志、控制平面日志、数据平面日志,和集群层面的主机日志等。如下面的截屏所示。

应用程序开发团队还高度关注Pod、容器以及节点层面上的环境监控能力,希望借此准确把握应用程序的工作方式,以及是否存在可能降低客户服务体验的问题。使用过滤器下拉列表,大家可以轻松选择特定的容器、Pod或节点,并查看对应的详细信息。

CloudWatch Container Insights还为不同的EKS资源提供可定制的仪表板。该仪表板能够显示特定于Pod的运行指标,包括预留的CPU计算容量与预留的内存计算容量等,具体如以下截屏所示。

节点层面的视图也包含大量相关指标,例如磁盘利用率、CPU利用率、内存利用率以及网络流量等。您还可以在这里了解各Pod是否按预期进行了跨节点部署。以此为基础,大家可以有理有据地调整Pod部署方式,借此获得最佳资源利用率与实际性能表现。

ApplyBoard公司使用专用查询语言深入剖析EKS环境。例如,您可以通过以下查询排查当前EKS集群中的节点故障。

stats avg(cluster_failed_node_count) as CountOfNodeFailures

| filter Type="Cluster"

| sort @timestamp desc

另一项常用查询如下所示,用于按容器名称降序显示错误计数。开发人员能够借此了解生产环境中所运行的各容器的具体活动。

stats count() as countoferrors by kubernetes.container_name

| filter stream="stderr"

| sort countoferrors desc

您也可以使用以下查询,针对特定容器查看其中发生的错误数量:

stats count() as CountOfErrors by kubernetes.namespace_name as Namespace, kubernetes.container_name as ContainerName

| sort CountOfErrors desc

| filter Namespace like "<name_of_the_namespace>" and ContainerName like "<name_of_container>"

以下查询,则显示特定Pod在五分钟周期之内接收及发送的数据量(以KB为单位):

fields pod_interface_network_rx_bytes as Network_bytes_recieved, pod_interface_network_tx_bytes as Network_bytes_sent

| filter kubernetes.pod_name like 'applyboard-website'

| filter (Network_bytes_recieved)  > 0

| stats sum(Network_bytes_recieved/1024) as KB_received, sum(Network_bytes_sent/1024) as KB_sent  by bin(5m)

| sort by Timestamp

| limit 100

以下查询所示,为环境中进行过重新启动的前10个容器。您可以借此发现应用程序基础设施特定位置上出现的重大问题。事实上,这类问题在部署CloudWatch Container Insights之前往往难以察觉。

stats max(pod_number_of_container_restarts) as Restarts by PodName, kubernetes.pod_name as PodID

| filter Type="Pod"

| sort Restarts desc

| limit 10

ApplyBoard团队还构建了一套自定义仪表板,其中包含各种简洁直观的图表,帮助大家对EKS集群内的各不同组件进行深入探究。以下截屏所示,为自定义仪表板示例。

除了即席查询、自定义与通用仪表板之外,ApplyBoard还使用CloudWatch警报功能。警报机制将监控CloudWatch Container Insights指标,并在检测到问题后立即向运营团队发出警报。例如,某项警报负责监控ApplyBoard网站Pod的CPU利用率水平。一旦该Pod的CPU利用率超过75%,则警报将立即通告DevOps团队,如以下截屏所示。

总结

本文介绍了ApplyBoard公司如何使用Amazon CloudWatch Container Insights对Amazon EKS上托管的关键任务应用程序环境进行监控。通过此项设置,ApplyBoard的DevOps团队无需执行任何维护任务,即可对当前运行环境拥有深入理解。以此为基础,各团队能够将宝贵的时间投入到改善关键业务活动、减少客户平均修复时间(MTTR)以及提供高质量服务当中。要了解关于CloudWatch Container Insights的更多详细信息,请参阅说明文档或浏览我们的控制台

本篇作者

Jayat Markan

ApplyBoard公司DevOps工程师。Jayat负责帮助开发者团队构建起稳定且具备高可用性的应用程序平台。
在过去十二年的从业经历中,Jayat曾先后在Expedia等公司担任过各种技术职务。最近三年,他将注意力集中在DevOps领域,且热衷于研究云基础设施之上的DevOps议题。 在业余时间,Jayat喜欢烹饪、了解世界各地的美食,也会趁着好天气去户外跑步。