发布于  更新于 

GPU Server 监控不完全指南(Zabbix + Grafana)

By Yuyang Li and Yixin Zhu. 不定期更新优化。
Last update: Jun 1, 2023.

Using Zabbix 6.4 (Server / Agent 2) and Grafana Cloud.

完成这一手册后,监控运行的基本原理是:

  • Client 端主动联系 Server 端并完成自动注册;
  • Client 端定期与 Server 通信,获取一组 Template,并按照 Template 获取本地数据并向 Server 交付(工作在 Active 模式);
  • Server 端定期将数据交付 Grafana Cloud,由后者在指定的模板上展示。

准备工作

  1. 一台公网服务器,作为 Zabbix Server
  2. 若干台被监控服务器,作为 Zabbix Agent

配置 Zabbix Server

安装

按照下面的指南配置 Zabbix Server,完成 1、2 即可:

下载Zabbix

选配参考(OS 版本按照实际选择,数据库和 Web Server 按照喜好选择):

需要注意的点:

  • MySQL / PostgreSQL 需要自行安装,安装在本机即可;
    • MySQL 的常用平替 MariaDB 没有验证是否可行;
  • 由于 Zabbix 具有 Web 管理前端,且后续需要通过 HTTPS 接入 Grafana,建议使用境外服务器,避免备案麻烦;
  • Zabbix Server 会配套安装 Agent,相当于本机也是受监控主机之一;
  • 建议进一步使用 NGINX + Certbot 配置 HTTPS 访问与 HTTP Rewrite。

按照配置的前端端口即可登录管理前端。

配置前端面板(Web Frontend)

配置 Host Groups

使用 Host Groups 可以方便地管理服务器组。在 Data Collection > Host Groups 可以新建服务器组。可以按照用途(GPU Servers / Network Nodes)新建。

配置 Tempalte

我们将增加一个用来获取 Client GPU 数据的 template。将下面的文件下载:

  1. 下载 https://raw.githubusercontent.com/plambe/zabbix-nvidia-smi-multi-gpu/master/zbx_nvidia-smi-multi-gpu.xml
  2. Web Frontend:Data collection > Templates;
  3. 选择 ”Import“,选择刚才下载的 xml 文件,确认;
  4. 在列表(应该是第 5 页)找到添加的 Template Nvidida GPUs Performance,点击进入;
  5. 由于使用 Active 模式,我们需要做一些更改:
    1. Items > Number of GPUs,Type 改为 Zabbix agent (active)
    2. Discovery rules > GPU discovery,Type 改为 Zabbix agent (active)
    3. Discovery rules > Item prototypes,列表全选,点击 ”Mass Update“,选择”Type“,并改为 Zabbix agent (active)

至此,GPU 数据收集配置完成,数据为 Application/Nvidia

配置 Auto-Registration

启用 Auto-Registration,这样 Client 联系服务器后会自行注册,不需在 Server 端操作。

  1. Web Frontend: Alerts > Actions > Autoregistration actions;
  2. Create action,在 Action 标签页起名(随意),在 Operations 页增加自动注册后的操作
    1. Add host
    2. Add host groups:选择要添加到的 host groups
    3. Link to template
      1. Template/Operating Systems - Linux by Zabbix agent active
      2. Template - Template Nvidia GPUs Performace(上文添加的)
  3. 点击 ”Update“。

可以为 Auto-Registration 添加密码保护,防止第三方向 Server 注册。请参考:

2 Using pre-shared keys

配置 Grafana Cloud

注册 Grafana 账号,并选择创建 Grafana Cloud。

Grafana get started | Cloud, Self-managed, Enterprise

Plans:

Zabbix 插件

登录 Grafana Cloud 工作区,进入 Administration > Plugins,搜索找到 Zabbix:

按照指示安装,然后选择”Enable“。

配置 Zabbix Connector

请参考:

Configuration - Grafana-Zabbix Documentation

需要注意的点:

  • URL 写访问 Dashboard 的 URL(协议和端口一致)
  • 只需要改名字、HTTP URL、填账号密码即可,其他默认。

Dashboard 模板

Grafana 有很多预配置好的模板在

Dashboards | Grafana Labs

我们将使用:

Zabbix - Full Server Status | Grafana Labs

进入 Home > Dashboards,选择 New > Import,输入 ID:5363

点击 Load 后选择导入即可。可以按照自己的需求修改。特别地,上文增加的 GPU 监控需要手动添加(懒)

配置客户端

用 sudo 运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/bash

wget https://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.4-1+ubuntu22.04_all.deb
chmod +x zabbix-release_6.4-1+ubuntu22.04_all.deb
apt install ./zabbix-release_6.4-1+ubuntu22.04_all.deb --reinstall -y
apt update
apt install zabbix-agent2 zabbix-agent2-plugin-* --reinstall -y

echo "PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0

Include=/etc/zabbix/zabbix_agent2.d/*.conf
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf

ServerActive=128.199.145.178:10051
Hostname=$(hostname)
" > /etc/zabbix/zabbix_agent2.conf

wget https://gist.githubusercontent.com/YuyangLee/2731fe525ee65ac30ada1655800dd596/raw/1f4bcb13be2a4d05b98b45a47faa98e7971e005c/gpu.conf
mv /etc/zabbix/zabbix_agent2.d/plugins.d/gpu.conf /etc/zabbix/zabbix_agent2.d/plugins.d/gpu.conf.bak
mv gpu.conf /etc/zabbix/zabbix_agent2.d/plugins.d/gpu.conf

mkdir -p /etc/zabbix/scripts

wget https://raw.githubusercontent.com/plambe/zabbix-nvidia-smi-multi-gpu/master/get_gpus_info.sh
mv /etc/zabbix/scripts/get_gpus_info.sh /etc/zabbix/scripts/get_gpus_info.sh.bak
mv get_gpus_info.sh /etc/zabbix/scripts/get_gpus_info.sh

chmod +x /etc/zabbix/scripts/get_gpus_info.sh

systemctl restart zabbix-agent2
systemctl enable zabbix-agent2
rm -rf zabbix*

注意修改这行为你的 Zabbix Server 监听地址与端口(一般为 10051):

1
ServerActive=YOUR_SERVER_ADDR:YOUR_SERVER_PORT

运行完后,在 Server Web Frontend 的 Monitoring > Hosts 里可以找到自动添加的 host。

FAQ

systemctl 无法启动

经验表明,如果客户端 systemctl start 无法启动服务,大概率是数据库的问题,客户端的 log 甚至没有错误记录!可以尝试卸载 (apt purge zabbix-*)、清空本地服务器对应数据,之后后重新安装 Zabbix agent。

在 Windows 安装 Zabbix Agent 2

选择适用于 Windows 的 Agent 2 安装。

按照说明安装完成后,Zabbix 以服务的形式安装在 Windows 中,可以通过服务面板控制:

在安装时选择的配置并不适用于 active 模式,需要手动更改安装目录下的 zabbix_agent2.conf,将其中的 ServerActive修改为 Zabbix Server 地址。

特别地,上文为 autoregistration 选择了 Linux OS 和 NVIDIA 的 template,这不再适用于 Windows。需要在 Templates 里选择 Windows by Zabbix agent active。特别地,在更换 Template 的时候,务必通过 Unlink and clear 删除模板,不然原模板数据条目可能和新模板条目冲突,导致无法添加新模板。

同时,由于兼容性,Grafana 无法展示 Windows 系统的数据,只能通过 Problems 查看是否掉线。也许需要更多的 dashboard engineering。