摘要:

node-exporter;Endpoint;


1、AirNet物理主机安装node-exporter服务;

[Unit]
Description=node_exporter
Documentation=https://github.com/prometheus/node_exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter  --collector.ntp  --collector.mountstats --collector.systemd  --collector.perf --collector.tcpstat
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
Restart=always
[Install]
WantedBy=multi-user.target

配置ServiceMonitor,通过Labels选择无头Service,没有selector的service不会出现Endpoint的信息,需要手工创建Endpoint绑定,Endpoint可以是内部的pod,下面是外部的服务,这里指定到要监控的AirNet物理主机的IP,一个Endpoints切片方式配置可以绑定多台物理服务器的IP

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: airnet-node-exporter
  namespace: monitoring
  labels:
    airnet: airnet-node-exporter
    namespace: monitoring
spec:
  jobLabel: airnet-app
  endpoints:
  - interval: 30s
    port: api
    scheme: http    
  namespaceSelector:
    matchNames:
    - monitoring
  selector:
    matchLabels:
      airnet: airnet-node-exporter
---
apiVersion: v1
kind: Service
metadata:
  labels:
    airnet: airnet-node-exporter
  name: airnet
  namespace: monitoring
spec:
  clusterIP: None
  clusterIPs:
  - None
  ports:
  - name: api
    port: 9100
    protocol: TCP
    targetPort: api
  type: ClusterIP 
---
kind: Endpoints
apiVersion: v1
metadata:
  name: airnet
  namespace: monitoring  
subsets:
  - addresses:
      - ip: 192.168.31.158
        nodeName: airnet-fdp1
      - ip: 192.168.31.184
        nodeName: airnet-acc-fdo1               
    ports:
      - port: 9100
        name: api
        protocol: TCP

问题:手动指定的外部Endpoints的IP地址过一段时间自动变为空值,导致Grafana监控无数据:

  • 原因是对于没有selector的service不会出现Endpoint的信息,需要手工创建Endpoint绑定,Endpoint可以是内部的pod,也可以是外部的服务。
  • 对于配置了selector的service,Service Controller会自动查找匹配这个selector的pod,并且创建出一个同名的endpoint对象,如果没有查找到匹配这个selector的pod,会出现自动创建的endpoint的IP地址为空的情况,因为与之前手工创建的外部Endpoint同名,覆写了手工创建Endpoint外部IP绑定,所以导致手工创建Endpoint绑定的外部IP没了。