×

扩展用于监控的次要网络指标

次要设备或接口用于不同的用途。必须有一种方法对它们进行分类,以便能够聚合具有相同分类的次要设备的指标。

公开的指标包含接口,但不指定接口的来源。如果没有其他接口,这是可行的。但是,如果添加了次要接口,则可能难以使用这些指标,因为仅使用接口名称很难识别接口。

添加次要接口时,其名称取决于添加它们的顺序,并且不同的次要接口可能属于不同的网络,并且可以用于不同的用途。

使用pod_network_name_info,可以使用附加信息扩展当前指标,这些信息标识接口类型。这样,就可以聚合指标并向特定接口类型添加特定警报。

网络类型使用相关NetworkAttachmentDefinition的名称生成,该名称又用于区分不同类别的次要网络。例如,属于不同网络或使用不同 CNI 的不同接口使用不同的网络附加定义名称。

网络指标守护进程

网络指标守护进程是一个收集和发布网络相关指标的守护进程组件。

kubelet 已经发布了您可以观察到的网络相关指标。这些指标是:

  • container_network_receive_bytes_total

  • container_network_receive_errors_total

  • container_network_receive_packets_total

  • container_network_receive_packets_dropped_total

  • container_network_transmit_bytes_total

  • container_network_transmit_errors_total

  • container_network_transmit_packets_total

  • container_network_transmit_packets_dropped_total

这些指标中的标签包含(除其他外):

  • Pod 名称

  • Pod 命名空间

  • 接口名称(例如eth0

在向 Pod 添加新接口(例如通过Multus)时,这些指标效果很好,因为不清楚接口名称指的是什么。

接口标签指的是接口名称,但并不清楚该接口的用途。如果有很多不同的接口,就无法理解您正在监控的指标指的是哪个网络。

下一节中描述的新pod_network_name_info解决了这个问题。

带有网络名称的指标

此 DaemonSet 发布一个值为0的固定pod_network_name_info规约指标。

pod_network_name_info{interface="net0",namespace="namespacename",network_name="nadnamespace/firstNAD",pod="podname"} 0

网络名称标签使用 Multus 添加的注释生成。它是网络附加定义所属命名空间与网络附加定义名称的串联。

新的指标本身并没有提供太多价值,但是与网络相关的container_network_*指标结合使用,它可以更好地支持监控次要网络。

使用以下类似的promql查询,可以获得一个新的指标,其中包含从k8s.v1.cni.cncf.io/network-status注释检索的值和网络名称。

(container_network_receive_bytes_total) + on(namespace,pod,interface) group_left(network_name) ( pod_network_name_info )
(container_network_receive_errors_total) + on(namespace,pod,interface) group_left(network_name) ( pod_network_name_info )
(container_network_receive_packets_total) + on(namespace,pod,interface) group_left(network_name) ( pod_network_name_info )
(container_network_receive_packets_dropped_total) + on(namespace,pod,interface) group_left(network_name) ( pod_network_name_info )
(container_network_transmit_bytes_total) + on(namespace,pod,interface) group_left(network_name) ( pod_network_name_info )
(container_network_transmit_errors_total) + on(namespace,pod,interface) group_left(network_name) ( pod_network_name_info )
(container_network_transmit_packets_total) + on(namespace,pod,interface) group_left(network_name) ( pod_network_name_info )
(container_network_transmit_packets_dropped_total) + on(namespace,pod,interface) group_left(network_name)