八、浅谈云原生监控
监控在生产系统中是必不可少的一部分,是系统稳定运行的重要基础,尤其是在云原生环境下,良好的指标监控系统对云原生应用的高效、平稳运行起到了重要的作用。
监控指标数据是可累加的,它们具有原子性,每个都是一个逻辑计量单元,或者一个时间段内的综合数据。监控的结果可以很好地观察系统的状态和趋势,但相比较于日志和追踪,监控结果对于问题的定位缺乏细节展示。
云原生架构的监控挑战
传统的监控系统在面对大规模复杂的业务和平台时,在设计和实现上就会有重大的挑战,而在云原生架构下,如何实现高效、稳定的监控系统,其面临的挑战将会更严峻。
监控维度更复杂
在云原生架构下,一方面,除了业务本身,还增加了集群、节点、命名空间、Service、Pod 等众多维度,另一方面,节点上承载微服务的容器密度较传统应用部署变得更大,而且容器生命周期变得极短,这就意味着短时间内有大量的容器 ID、Pod 名称、标签等信息在不断地变化。这些对监控系统来说,都将是一个重要的挑战。
资源消耗更大
在云原生架构中,以 Kubernetes 为代表的编排平台,为云原生应用的配置、部署、运行等提供了极大的动态性和灵活性。这在提升了监控系统复杂性的同时,也提升了其对资源的消耗,如何在获取最佳监控数据的同时,能够尽可能地降低资源开销,降低对业务系统和平台造成的影响,也将是实现良好监控系统的一个重大挑战。
云原生架构的监控指标
Kubernetes 的监控一方面需要包括对整个基础架构平台的监控,另一方面包括对正在运行的工作负载的监控。具体的监控指标根据集群的特性不同而有所差异,常见的监控指标如下。
Kubernetes 组件状态指标
Kubernetes 集群架构包括一个主节点和多个计算节点,主要组件包括 etcd、APIServer、scheduler、kube-controller-manager 等。通过对 Kubernetes 组件的运行状态进行监控,可以有效地保证基础平台的正常运行。
集群状态指标
集群状态可以说是一个基本的,也是关键的监控指标,我们需要知道集群中所有的聚合资源当前的状态以及使用情况,比如节点的状态、可用的 Pod、不可用 Pod 等。
资源状态指标
首先是 CPU 利用率。清晰准确地知道节点 CPU 资源的使用情况,对保障系统以及应用的平稳、安全运行有着至关重要的作用。通过 CPU 资源使用情况的监控,我们还可以分析资源使用行为,发现挖矿、拒绝服务攻击等针对计算资源的恶意攻击行为。
其次是内存压力。这个监控指标展示了一个节点正在使用的内存量,通过监控数据,我们可以实时地了解整个节点内存的使用状态,防止节点因内存耗尽而对应用运行产生影响。
最后是磁盘压力。磁盘在使用过程中通常会设置相应的使用阈值,通过对磁盘使用情况的监控,结合既定的使用阈值,可判断节点磁盘空间的使用情况,进而确定是否需要增加额外的磁盘空间、当前应用程序的磁盘使用是否正常、是否需要对应用程序的磁盘使用进行调整等。
网络状态指标
基于微服务架构的云原生应用,其服务间的网络通信异常频繁,只有确保通信的正常才能保证业务系统的顺畅运行。通过监控网络状态指标(比如带宽、速率、连接状态等),可及时地发现网络问题,进而对问题进行定位、处置。另外,对于网络状态监控,除了能够发现并解决网络故障问题,还可以通过对网络状态数据进行分析,判断是否存在网络层的攻击,比如拒绝服务攻击的检测,再比如异常网络行为的检测等。
作业运行指标
在 Kubernetes 中使用了 Job 和 CronJob 两个资源,以提供一次性任务和定时任务的特性,这两种资源使用控制器模型来实现资源的管理。基于这种机制,可以有效地对 Pod 进行管理和控制,同时对这些内容进行监控,还可以发现相关问题,比如作业失败、崩溃循环、资源耗尽等。
云原生架构的监控工具
cAdvisor 是 Google 开源的一个收集容器资源使用情况的监控工具,是 Kubelet 内置的容器资源收集工具。它可以自动发现给定节点中的所有容器,并收集 CPU、内存、文件系统和网络使用情况等统计信息,并对外提供 cAdvisor 原生的 API。cAdvisor 是监控数据的采集器,本身并不提供任何长期存储或分析功能,而且它仅会收集基本资源利用率。Heapster 是容器集群监控和性能分析工具,支持 Kubernetes。Heapster 是一个收集者,将每个节点上的 cAdvisor 数据进行汇总,然后导入后端的存储中(如 InfluxDB),并且可以进一步实现可视化(如 Grafana)。
Prometheus 采用多维数据模型,其中包含通过指标名称和键/值对标识的时间序列数据,以及灵活的查询语言 PromQL 实现这种多维度的数据检索。同时,它不依赖分布式存储,单个节点是自治的,通过基于 HTTP 的 pull 方式采集时序数据,也可以通过中间网关进行时间序列数据推送(pushing)。其中主要包括 Prometheus Server、Pushgateway、Exporters、Alertmanager 等组件,其中 Prometheus Server 是 Prometheus 的主服务,主要用于数据的采集和存储、PromQL 查询、报警配置等;Pushgateway 用作批量、短期监控指标数据的推送总节点;Exporters 是各种汇报数据的导出器,如汇报机器数据的 node_exporter、汇报 MongoDB 信息的 MongoDB_exporter 等;Alertmanager 是用于告警的处理。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/ae8dd355ff18a5dbc5db743b2】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论