4

如何使用Prometheus+Grafana监控Proxmox

 1 year ago
source link: https://ieevee.com/tech/2022/09/10/proxmox.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

家里的软路由是跑在一台Dell的小机器(Optiplex 5050)上,使用Proxmox做的虚拟化,跑的Openwrt。前不久发现家里有时候网络会很卡顿,后来在Proxmox上看监控发现openwrt虚拟机在这个时间段内,CPU跑到了100%,难怪会非常卡。

我还有一台Dell的小机器(Optiplex 5080),也是Proxmox的虚拟化,两台Dell加起来一共有5个虚拟机,是时候上个监控了。

社区对于Proxmox的监控一般有 +Prometheus 和 +influxdb 两种方式,我这里采用的是 +Prometheus。

prometheus-pve-exporter

和Node exporter一样,也需要一个 Proxmox exporter,可以用prometheus-pve-exporter项目。prometheus-pve-exporter调用Proxmox的API采集指标,然后Prometheus再从 prometheus-pve-exporter 抓取metrics数据,最后通过Grafana展示。

prometheus-pve-exporter的配置可以使用配置文件,也可以使用环境变量。我这里传入了 PVE_USER/PVE_PASSWORD/PVE_VERIFY_SSL,用来调用Proxmox API时进行认证。由于是监控请求,因此建议在Proxmox上新建一个只读的用户,不要使用root。Proxmox新建用户很简单,在页面上操作即可,但给用户授权只能通过命令行进行。

如下,给用户 monitor@pve授予PVEAuditor权限。

pveum aclmod / -user monitor@pve -role PVEAuditor

注意,PVE_USER的格式是user@pve或者user@pam,两者的区别是,pve是proxmox的用户,比如我这里是2台Proxmox组成的集群,建立一个pve用户就可以访问2台Proxmox机器;pam是linux的用户,不同的Proxmox机器的用户名密码可能不同(Proxmox实际也是一台Linux机器)。

PVE_VERIFY_SSL需要设置为false,因为是自签的证书。

prometheus-pve-exporter可以直接启动,也可以容器化启动。因为后面要使用Prometheus来监控,所以我将prometheus-pve-exporter部署到了kubernetes上去,并创建了一个svc。Deployment的写法类似于:

docker run --name prometheus-pve-exporter -d -p 127.0.0.1:9221:9221 -v /path/to/pve.yml:/etc/pve.yml prompve/prometheus-pve-exporter

创建的svc:

apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: pve-exporter
  name: pve-exporter
  namespace: default
spec:
  ports:
  - name: pve-exporter-0
    port: 9221
    protocol: TCP
    targetPort: 9221
  selector:
    app: pvc-exporter-5050
  type: LoadBalancer

prometheus-pve-exporter启动后,可以通过http请求metrics:

http://{service loadbalancer ip}:9221/pve?target=1.2.3.4

一个prometheus-pve-exporter可以请求多个Proxmox(target)。

Prometheus

我这里使用的是Prometheus Operator,因此只要配置ServiceMonitor即可。endpoints配置2台Proxmox。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    k8s-app: pve-exporter
  name: pve-exporter
spec:
  endpoints:
  - interval: 30s
    params:
      target:
      - 1.1.1.1
    path: /pve
    port: pve-exporter-0
    scheme: http
  - interval: 30s
    params:
      target:
      - 1.1.1.2
    path: /pve
    port: pve-exporter-0
    scheme: http
  jobLabel: k8s-app
  namespaceSelector:
    matchNames:
    - default
  selector:
    matchLabels:
      k8s-app: pve-exporter

注意namespaceSelectorselector.matchLabels和上面创建的pve-exporter要匹配起来。

ServiceMonitor创建后,Prometheus Operator会自动刷新Prometheus配置,之后在Prometheus上可以查看pve的监控信息(例如pve_up)。

Grafana

Proxmox数据收集到Prometheus后,就可以通过Grafana展示了。这里我使用的是Proxmox via Prometheus by Pietro Saccardi

至此,就可以比较方便的统一展示所有Proxmox虚拟机的状态了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK