IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    如何使用Prometheus+Grafana监控Proxmox

    Zlatan Eevee发表于 2022-09-10 08:11:12
    love 0
    • prometheus-pve-exporter
    • Prometheus
    • Grafana

    家里的软路由是跑在一台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
    

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

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

    Grafana

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

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



沪ICP备19023445号-2号
友情链接