一、前言

监控指标与日志有所不同,日志提供的是显式数据,是对应用程序行为操作的一种记录,而指标是通过数据的聚合,对一个程序在特定时间内的行为进行衡量。指标数据是可累加的,它们具有原子性,每个都是一个逻辑计量单元。指标数据可以观察系统的状态和趋势,但对于问题定位缺乏细节展示。

二、监控指标

Kubernetes的监控一方面需要包括对整个基础架构平台的监控,另一方面包括对正在运行的工作负载的监控。具体的监控指标根据集群的特性不同而有所差异,这里我们介绍几个常见的监控指标:

1、Kubernetes组件状态指标

Kubernetes集群架构包括一个主节点和多个计算节点,主要组件包括etcd、API Server、scheduler、kube-controller-manager等。通过对Kubernetes组件的运行状态进行监控,可以有效地保证基础平台的正常运行。

2、集群状态指标

集群状态是一个关键的监控指标,我们需要知道集群中所有的聚合资源当前的状态以及使用情况,比如节点的状态、可用的Pod、不可用Pod等。

通过对集群状态进行监控,进而对监控数据进行评估,以及由此产生的监控指标,可以让我们看到集群总体运行状况的概要视图,还可以了解到节点、Pod、Service等相关联的问题。根据状态指标,可以判断集群的运行是否正常,是否存在相应的风险。

通过监控集群状态指标,我们还可以对节点正在使用的资源数量进行评估,包括共有多少节点、有多少节点可用等信息,从而可以根据需要调整所使用节点的数量和大小。

3、资源状态指标

首先是CPU利用率。清晰准确地知道节点CPU资源的使用情况,对保障系统以及应用的平稳、安全运行有着至关重要的作用。通过CPU资源使用情况的监控,我们还可以分析资源使用行为,发现挖矿、拒绝服务攻击等针对计算资源的恶意攻击行为。

其次是内存压力。这个监控指标展示了一个节点正在使用的内存量,通过监控数据,我们可以实时地了解整个节点内存的使用状态,防止节点因内存耗尽而对应用运行产生影响。

最后是磁盘压力。磁盘在使用过程中通常会设置相应的使用阈值,通过对磁盘使用情况的监控,结合既定的使用阈值,可判断节点磁盘空间的使用情况,进而确定是否需要增加额外的磁盘空间、当前应用程序的磁盘使用是否正常、是否需要对应用程序的磁盘使用进行调整等。

4、网络状态指标

对网络状态相关指标的监控,无论对于应用程序的通信还是安全,都有着重要的指示意义。

通过监控网络状态指标(比如带宽、速率、连接状态等),可及时地发现网络问题,进而对问题进行定位、处置。另外,对于网络状态监控,除了能够发现并解决网络故障问题,还可以通过对网络状态数据进行分析,判断是否存在网络层的攻击,比如拒绝服务攻击的检测,再比如异常网络行为的检测等。

5、作业运行指标

除了对基本的基础设施资源进行监控外,我们还需要对正在运行的作业任务进行监控,保证任务的准确运行。

在Kubernetes中使用了Job和CronJob两个资源,以提供一次性任务和定时任务的特性,这两种资源使用控制器模型来实现资源的管理。Kubernetes的Job可以创建并且保证一定数量Pod的成功停止,当Job持有的一个Pod对象成功完成任务之后,Job就会记录这一次Pod的成功运行。当一定数量的Pod任务执行结束之后,当前的Job就会将它自己的状态标记成结束。

基于这种机制,可以有效地对Pod进行管理和控制,同时对这些内容进行监控,还可以发现相关问题,比如作业失败、崩溃循环、资源耗尽等。