配置Prometheus抓取k8s集群外的监测数据

摘要:
K8s集群中的Prometheus通过crd服务监视器捕获监控数据。每个服务监视器对应于一个或多个服务。它负责获取这些服务上指定端口暴露的监控数据,并将其报告给普罗米修斯。此外,您需要为此服务配置标签,以便稍后服务监视器可以进行筛选。query=nvidia_gpu_memory_used_Bytes查看是否有监控数据输出。创建普罗米修斯规则后,检查普罗米修斯门户页面上的目标列,看看新创建的报警项是否已经存在。

K8s集群内的Prometheus抓取监测数据是通过servicemonitor这个crd来完成的。每个servicemonitor对应Prometheus中的一个target。每个servicemonitor对应一个或多个service,负责获取这些service上指定端口暴露的监测数据,并向Prometheus上报。

service是k8s集群内的资源。如果想让service对应集群外的应用,则必须手动创建endpoint。

下面以运行在集群外的某个机器上的gpu-exporter为例。

一、手动创建endpoint

gpu-exporter占用宿主机的9445端口,因此创建endpoint如下:

apiVersion: v1
kind: Endpoints
metadata:
  name: gpu-data
subsets:
- addresses:
  - ip: [宿主机ip]
  ports:
  - port: 9445
    name: gpu

注意,为了后面创建servicemonitor时使用,这里给port起一个名字。

二、创建service与endpoint绑定

创建与endpoint名字相同的service,则二者会自动绑定。

apiVersion: v1
kind: Service
metadata:
  name: gpu-data
  labels:
    app: gpu-data
spec:
  ports:
  - port: 9445
    targetPort: 9445
    name: gpu

注意,service的name字段必须与endpoint相同,并且下面port的name也需要相同。另外,需要为这个service配置一个label,以便后面servicemonitor进行筛选。

创建后,执行kubectl describe,看看service的endpoint字段是否已经显示为[宿主机ip]:9445。执行curl [service的ip]:9445,看看有没有监测数据的返回值。

三、创建servicemonitor

创建与service同名的servicemonitor:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app: prometheus
    prometheus: prometheus
  name: gpu-data
spec:
  endpoints:
  - interval: 10s
    path: /
    targetPort: 9445
    port: gpu
  jobLabel: k8s-app
  namespaceSelector:
    matchNames:
    - default
  selector:
    matchLabels:
      app: gpu-data

servicemonitor的label需要查看Prometheus中对应的servicemonitor字段:

kubectl get prometheus -n kube-system prometheus-operator-prometheus -o yaml 

查看serviceMonitorSelector.matchExpressions字段中对应的key、value对,选出一对填写在metadata.labels中即可。

下面的spec.endpoint中,port填写前面service和endpoint中定义的port名字,path这里是/,因为gpu-exporter直接暴露在ip:9445/下。很多情况下会填写/metrics。

后面selector需要填写之前service定义的label。

创建后,查看Prometheus的页面,查找target,看看是否出现了default/gpu-data这一个target。

四、判断数据是否已经为Prometheus接受

可以直接通过http api判断:

curl [prometheus的pod或serviceip]:9090/api/v1/query?query=nvidia_gpu_memory_used_bytes

看看有无监测数据输出。

五、配置告警项

更进一步的,在Prometheus接收到监测数据后,可以配置相关的告警项,使GPU的告警数据可以被AlertManager接收到。

配置告警项通过创建Prometheusrule资源来实现。这里创建了GPU显存利用率超过90%告警的指标:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    app: prometheus-rules
    cato: node
    release: prometheus-operator
  name: gpu.alert
  namespace: kube-system
spec:
  groups:
  - name: gpu.alert.rules
    rules:
    - alert: GPUMemUsageHigh
      annotations:
        description: 'instance: {{ $labels.instance }}, value: {{ $value }}'
        summary: GPU Memory Usage > 0.9 for 2m
      expr: nvidia_gpu_memory_used_bytes / 24032378880 > 0.9
      for: 2m
      labels:
        severity: warning

其中,metadata.labels应该与prometheus的ruleSelector.matchLabels字段完全一致。通过以下命令查看ruleSelector.matchLabels字段,将其完全复制到prometheusrule中的metadata.labels字段中:

kubectl get prometheus -n kube-system -o yaml | grep ruleSelector -A 10

另外,gpu-exporter没有显存利用率指标,只有显存利用量,因此需要用nvidia_gpu_memory_used_bytes除以GPU卡的总显存量,以获取显存利用率指标。

创建prometheusrule后,查看prometheus的portal页面的targets栏,看看新创建的告警项是否已存在。

免责声明:文章转载自《配置Prometheus抓取k8s集群外的监测数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇七大国内外主流云计算开发平台Jmeter录制后的脚本调优下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

新东方在有状态服务 In K8s 的实践

作者|周培,新东方架构部容器组专家 有状态服务建设一直以来都是 K8s 中非常具有挑战性的工作,新东方在有状态服务云化过程中,采用定制化 Operator 与自研本地存储服务结合的模式,增强了 K8s 原生本地存储方案的能力,在摸索中稳步推进企业的容器化建设。 新东方有状态服务 In K8s 的现状 如上图所示,上层 Pod 由自定义的 Operator...

Prometheus+Alertmanager+Grafana监控组件容器化部署

直接上部署配置文件 docker-compose.yml version: '3' networks: monitor: driver: bridge services: prometheus: image: prom/prometheus container_name: prometheus hostname: promet...

修改prometheus默认端口,修改grafana默认端口

修改prometheus的默认端口 进入prometheus目录,编辑prometheus.yml文件 在prometheus.yml路径中,运行命令 #启动prometheus./prometheus --config.file=prometheus.yml --web.listen-address=:8001 & 修改gr...

Docker and Kubernetes -- 监控(weave scope)

docker常用的监控工具 weave scope 简介 Weave Scope是Docker和Kubernetes的可视化监控管理软件 Weave Scope 会自动生成容器之间的关系图,方便理解容器之间的关系,也方便监控容器化和微服务化的应用 安装部署 官方安装文档Installing Weave Scope:https://www.weave...

Centos7 k8s v1.5.2二进制部署安装-kube-proxy

一、安装kube-proxy 1、概述 运行在每个节点上,监听 API Server 中服务对象的变化,再通过管理 IPtables 来实现网络的转发 Kube-Proxy 目前支持三种模式: UserSpace:k8s v1.2 后就已经淘汰 IPtables:目前默认方式 IPVS--推荐,支持7层:需要安装ipvsadm、ipset 工具包和加载 i...

k8s全栈监控之metrics-server和prometheus

一、概述 使用metric-server收集数据给k8s集群内使用,如kubectl,hpa,scheduler等 使用prometheus-operator部署prometheus,存储监控数据 使用kube-state-metrics收集k8s集群内资源对象数据 使用node_exporter收集集群中各节点的数据 使用prometheus收集api...