使用Node Exporter扩展Prometheus数据

前一篇文章当中,我们介绍了在Kubernetes中使用Prometheus进行集群监控的方法,并配置了服务发现,让Prometheus从Kubernetes集群的各个组件中采集运行数据。 在之前的例子中,我们主要是通过kubelet中自带的cadvisor采集容器的运行状态。今天我们来进一步完善监控系统,使用Node Exporter采集底层服务器的运行状态。

Node Exporter简介

Exporter是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。 与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取,默认的抓取地址为http://CURRENT_IP:9100/metrics

Prometheus提供多种类型的Exporter用于采集各种不同服务的运行状态。Node Exporter顾名思义,主要用于采集底层服务器的各种运行参数。

目前Node Exporter支持几乎所有常见的监控点,比如conntrackcpudiskstatsfilesystemloadavgmeminfonetstat等。 详细的监控点列表请参考其Github repo

部署Node Exporter

在Kubernetes中部署Node Exporter非常简单,我们使用DaemonSet功能,可以非常方便的在集群内的所有主机上启动Node Exporter。 在配合上Prometheus的服务发现功能,无需额外的设置,我们就可以把这些Node Exporter Pod加入到被采集的列表当中。

将以下配置文件保存为node-exporter.yaml, 并运行 kubectl create -f node-exporter.yaml

apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: 'true'
  labels:
    app: node-exporter
    name: node-exporter
  name: node-exporter
spec:
  clusterIP: None
  ports:
  - name: scrape
    port: 9100
    protocol: TCP
  selector:
    app: node-exporter
  type: ClusterIP
----
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: node-exporter
spec:
  template:
    metadata:
      labels:
        app: node-exporter
      name: node-exporter
    spec:
      containers:
      - image: prom/node-exporter:latest
        name: node-exporter
        ports:
        - containerPort: 9100
          hostPort: 9100
          name: scrape
      hostNetwork: true
      hostPID: true

国内的Kubernetes集群可以使用registry.cn-hangzhou.aliyuncs.com/tryk8s/node-exporter:latest 替换prom/node-exporter:latest解决image拉取的问题。

在确保所有服务器上的Node Exporter pod启动之后,我们就可以用Prometheus的web界面查看各个服务的状态了

查询服务器状态

继续使用Prometheus的web界面来验证Node Exporter的数据已经被正确的采集。

首先查询node_load1node_load5node_load15这三项CPU使用情况。

接着查询rate(node_network_receive_bytes[1m])rate(node_network_transmit_bytes[1m])这两项网络使用情况。

以及node_memory_MemAvailable所代表的剩余内存情况。

总结

通过DaemonSetService,我们向Kubernetes集群中的所有机器部署了Node Exporter。 Prometheus会自动通过服务发现找到这些Node Exporter服务,并从中采集服务器状态。

但是从使用过程中我们会发现,Prometheus的web界面比较适合用来做测试,如果日常使用还需要手动输入查询参数会很不方便。 接下来我们将使用Grafana来对Prometheus采集到的数据进行可视化展示。这样就可以在一个页面中图形化展示多个预定义的参数。