Kubernetes监控体系(6)- prometheus监控node节点pod模式的-服务发现

1.

1.node-exporter采集的数据指标介绍

node-exporter:    采集node节点(物理机、虚拟机、云主机)监控指标数据,能够采集到主机的运行指标如CPU, 内存,磁盘,网络,文件数等信息

1.部署node-exporter
把node-export_v0_16.tar.gz镜像上传到master节点和node节点,然后解压镜像
docker load -i node-exporter_v0_16.tar.gz2.在k8s集群部署node-exporter组件
(1)在k8s-master节点生成一个node-export.yaml文件

cat node-export.yaml 

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
  namespace: monitor-sa
  labels:
    name: node-exporter
spec:
  selector:
    matchLabels:
     name: node-exporter
  template:
    metadata:
      labels:
        name: node-exporter
    spec:
      hostPID: true
      hostIPC: true
      hostNetwork: true
      containers:
      - name: node-exporter
        image: prom/node-exporter:v0.16.0
        ports:
        - containerPort: 9100
        resources:
          requests:
            cpu: 0.15
        securityContext:
          privileged: true
        args:
        - --path.procfs
        - /host/proc
        - --path.sysfs
        - /host/sys
        - --collector.filesystem.ignored-mount-points
        - '"^/(sys|proc|dev|host|etc)($|/)"'
        volumeMounts:
        - name: dev
          mountPath: /host/dev
        - name: proc
          mountPath: /host/proc
        - name: sys
          mountPath: /host/sys
        - name: rootfs
          mountPath: /rootfs
      tolerations:
      - key: "node-role.kubernetes.io/master"
        operator: "Exists"
        effect: "NoSchedule"
      volumes:
        - name: proc
          hostPath:
            path: /proc
        - name: dev
          hostPath:
            path: /dev
        - name: sys
          hostPath:
            path: /sys
        - name: rootfs
          hostPath:
            path: /

kubectl apply -f node-export.yaml 

2.通过node-export采集数据
curl http://192.168.124.16:9100/metrics
#node-export默认的监听端口是9100,可以看到当前主机获取到的所有监控数据,如下一段所示:

# HELP node_cpu_seconds_total Seconds the cpus spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="0",mode="idle"} 56136.98

# HELP node_load1 1m load average.
# TYPE node_load1 gauge
node_load1 0.58

#HELP:解释当前指标的含义,上面表示在每种模式下node节点的cpu花费的时间,以s为单位
#TYPE:说明当前指标的数据类型,上面是counter类型

node_cpu_seconds_total{cpu="0",mode="idle"} :
cpu0上idle进程占用CPU的总时间,CPU占用时间是一个只增不减的度量指标,从类型中也可以看出node_cpu的数据类型是counter(计数器)

node_load1该指标反映了当前主机在最近一分钟以内的负载情况,系统的负载情况会随系统资源的使用而变化,因此node_load1反映的是当前状态,数据可能增加也可能减少,从注释中可以看出当前指标类型为gauge(标准尺寸)


counter计数器:只是采集递增的指标
gauge标准尺寸:统计的指标可增加可减少

3.列举常见的监控指标:
node_boot_time:系统启动时间
node_cpu:系统CPU使用量
nodedisk*:磁盘IO
nodefilesystem*:文件系统用量
node_load1:系统负载
nodememeory*:内存使用量
nodenetwork*:网络带宽
node_time:当前系统时间
go_*:node exporter中go相关指标
process_*:node exporter自身进程相关运行指标

4.使用PromQL语句查询监控数据
rate(node_cpu[1m])

使用without表达式,可以将标签CPU去除后聚合数据即可:
avg without(cpu) (rate(node_cpu[1m]))

那如果需要计算系统CPU的总体使用率,通过排除系统闲置的CPU使用率即可获得:
1 - avg without(cpu) (rate(node_cpu{mode="idle"}[1m]))

5.PromQL总结
PromQL是Prometheus的查询语言,通过PromQL我们可以对数据进行查询,过滤,以及聚合,计算等操作。

2.cadvisor采集数据的配置

   - job_name: 'kubernetes-node-cadvisor'

      kubernetes_sd_configs:

      - role:  node

      scheme: https

      tls_config:

        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt

      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token

      relabel_configs:

      - action: labelmap

        regex: __meta_kubernetes_node_label_(.+)

      - target_label: __address__

        replacement: kubernetes.default.svc:443

      - source_labels: [__meta_kubernetes_node_name]

        regex: (.+)

        target_label: __metrics_path__

        replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor

tls_config配置的证书地址是每个Pod连接apiserver所使用的地址,基本上写死了,证书是我们Pod启动的时候kubelet给pod注入的一个证书,所有的pod启动的时候都会有一个ca证书注入进来

如要想要访问apiserver的信息,还需要配置一个token_file;

修改完成之后,我们需要configmap并且使用curl进行热更新(过程比较慢,需要等待会)。

 relabel_configs:

  # 用新的前缀代替原label name前缀,没有replacement的话功能就是去掉label name前缀

  # 例如:以下两句的功能就是将__meta_kubernetes_node_label_kubernetes_io_hostname

  # 变为kubernetes_io_hostname

  - action: labelmap

    regex: __meta_kubernetes_node_label_(.+)

    

  # replacement中的值将会覆盖target_label中指定的label name的值,

  # 即__address__的值会被替换为kubernetes.default.svc:443

  - target_label: __address__

    replacement: kubernetes.default.svc:443

    

  # 获取__meta_kubernetes_node_name的值

  - source_labels: [__meta_kubernetes_node_name]

    #匹配一个或多个任意字符,将上述source_labels的值生成变量

    regex: (.+)

    # replacement中的值将会覆盖target_label中指定的label name的值,

    # 即__metrics_path__的值会被替换为/api/v1/nodes/${1}/proxy/metrics,

    # 其中${1}的值会被替换为__meta_kubernetes_node_name的值

    target_label: __metrics_path__

    replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor

3.配置pod模式的服务发现.

 - job_name: kubernetes-pods
      kubernetes_sd_configs:
      - role: pod
      relabel_configs:
      - action: keep
        regex: true
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_scrape
      - action: replace
        regex: (.+)
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_path
        target_label: __metrics_path__
      - action: replace
        regex: ([^:]+)(?::\d+)?;(\d+)
        replacement: $1:$2
        source_labels:
        - __address__
        - __meta_kubernetes_pod_annotation_prometheus_io_port
        target_label: __address__
      - action: labelmap
        regex: __meta_kubernetes_pod_label_(.+)
      - action: replace
        source_labels:
        - __meta_kubernetes_namespace
        target_label: kubernetes_namespace
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_name
        target_label: kubernetes_pod_name

 

需要修改prometheus-server的pod,让prometheus可以抓取到

[root@k8s-master ~]# kubectl get pods -n monitor-sa

NAME                                 READY   STATUS    RESTARTS   AGE

node-exporter-7vs6m                  1/1     Running   3          27d

node-exporter-xqh6c                  1/1     Running   3          27d

prometheus-server-86cf69fb95-w2cjp   2/2     Running   0          12h

[root@k8s-master ~]# kubectl edit pods prometheus-server-86cf69fb95-w2cjp -n monitor-sa

修改annotations字段

metadata:

  annotations:

    cni.projectcalico.org/podIP: 10.244.1.54/32

prometheus.io/scrape: "true"   #默认是false,变成true,就可以被prometheus抓取到

修改好之后,在prometheus web界面,点击status->targets,可以看到target列表多了kubernetes-pod这个列表

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值