一、Grafana 是什么
Go 语言写的开源应用,专门做大数据的可视化展现。
Zabbix 自己也有图形界面,但是翻起来不方便,所以展示这一层换成 Grafana。
思路是在 Zabbix Server 那台机器上装 Grafana,启动服务,然后访问它的 Web 界面(云服务器的安全组和系统防火墙都要打开)。
中文镜像站:https://grafana.org.cn/docs/grafana/latest/setup-grafana/installation/
装之前先看一眼机器够不够。Grafana 官方给了个小型部署的最低配置:

浏览器这边也有要求,注意得开 JavaScript:

二、在 Ubuntu 上装 Grafana
Ubuntu 的安装文档:https://grafana.org.cn/docs/grafana/latest/setup-grafana/installation/debian/
1. 先认清四个包的对应关系
从 APT 仓库装的话,apt-get update 的时候 Grafana 会跟着自动更新。哪个版本对应哪个包、哪个仓库,先看这张表:

2. 安装必备软件包
sudo apt-get install -y apt-transport-https wget gnupg
3. 导入 GPG 密钥
这一步是确认软件包确实来自官方、没被篡改:
sudo mkdir -p /etc/apt/keyrings
# 指定下载文件保存的文件名和路径
sudo wget -O /etc/apt/keyrings/grafana.asc https://apt.grafana.com/gpg-full.key
sudo chmod 644 /etc/apt/keyrings/grafana.asc

644 就是属主 4+2 可读可写、属组和其他人只读,密钥文件这个权限刚好。
4. 添加稳定版仓库
echo "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
# 如果太慢需要把官方源换成国内镜像源
sudo sed -i 's|https://apt.grafana.com|https://mirrors.tuna.tsinghua.edu.cn/grafana/apt|' /etc/apt/sources.list.d/grafana.list
# 确认一下
cat /etc/apt/sources.list.d/grafana.list
# apt-get update后缓存了软件包的清单,需要刷新一下才能下载
apt-get update
# 如果update错误,可能是GPG密钥是镜像源的换成对应的
sudo wget -O /etc/apt/keyrings/grafana.asc https://mirrors.tuna.tsinghua.edu.cn/grafana/apt/gpg-full.key
sudo chmod 644 /etc/apt/keyrings/grafana.asc
sudo apt-get update
换镜像源之后如果 update 报错,多半是密钥还是官方那份,换成镜像站对应的就行(上面最后两行)。
5. 刷新软件包清单
# Updates the list of available packages
sudo apt-get update
到这里准备动作就基本完成了。
6. 装 Grafana
OSS 版:
# Installs the latest OSS release:
sudo apt-get install -y grafana
企业版:
# Installs the latest Enterprise release:
sudo apt-get install grafana-enterprise
如果还想加 beta 仓库,注意apt 自动升级时会跟着升到 beta 版,可能不稳定:
echo "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com beta main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
7. 启动服务
systemctl start grafana-server
root@VM-0-12-ubuntu:~# sudo systemctl enable grafana-server
Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /lib/systemd/system/grafana-server.service.
查一下状态,插件在陆续加载:

8. 开放端口
sudo ufw allow 3000/tcp
sudo ufw reload
sudo ufw status
默认用户名和密码都是 admin,安全组和防火墙都要放行 3000,然后访问 http://IP:3000。
第一次登录会弹出来让你改密码,我改成了自己常用的。进去之后的首页长这样:

三、配置 Zabbix 数据源
界面是英文的,实在懒得看可以用浏览器的右键翻译对付一下。
先建一个仪表盘(dashboard):

Grafana 默认就集成了不少数据源(Prometheus、Zabbix、MySQL 等),插件页里能看到:

装数据源插件的时候选最新兼容的版本,装完 Enable 启用。
1. 添加数据源
从 Connections 进去,加一个新的数据源,或者看已经配好的:

2. 配 URL
URL 这一项照它给的示例改,改成自己 Zabbix 的地址:

关键点:Zabbix 和 Grafana 装在同一台机器上,所以这里访问的是内网 IP —— 是 Grafana 去访问,不是浏览器去访问:
http://127.0.0.1:8888/zabbix/api_jsonrpc.php
填好再回到这个页面配置数据源。
3. 配用户名密码并测试
认证方式选 User and password,用户名填 Zabbix 的 Admin,密码填 Zabbix 的登录密码:

点 Save & test 测一下:

看到 Zabbix API version 7.0.30 就说明通了。
4. 建仪表盘
配完之后在这里就能直接建仪表盘了:

四、集成数据演示和排障
到这一步已经拿到两台主机的数据了:

1. Agent 连不上 Server 怎么查
如果 agent 的 10051 主动端口连不上 server,很可能是 server 的防火墙和安全组没放行:

# server执行
ufw allow from 10.1.0.0/16 to any port 10051 proto tcp
两个端口到底谁监听、谁主动连,一张表记牢:

2. 一条条命令确认
root@VM-4-16-ubuntu:/etc/zabbix# grep -E '^(Server|ServerActive|Hostname)' /etc/zabbix/zabbix_agent2.conf
Server=10.1.0.12
ServerActive=10.1.0.12:10051
Hostname=agent-02
# 这个配置告诉agent服务器,数据给哪个IP哪个端口
# 在server查看监听10051的服务
root@VM-0-12-ubuntu:~# lsof -i :10051
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zabbix_se 3221008 zabbix 10u IPv4 452186409 0t0 TCP *:zabbix-trapper (LISTEN)
zabbix_se 3221008 zabbix 11u IPv6 452186410 0t0 TCP *:zabbix-trapper (LISTEN)
zabbix_se 3221013 zabbix 10u IPv4 452186409 0t0 TCP *:zabbix-trapper (LISTEN)
zabbix_se 3221013 zabbix 11u IPv6 452186410 0t0 TCP *:zabbix-trapper (LISTEN)
# 有大量的进程监听,用于获取agent的数据
# 在agent上测试server连通性
root@VM-4-16-ubuntu:/etc/zabbix# nc -zv 10.1.0.12 10051
Connection to 10.1.0.12 10051 port [tcp/zabbix-trapper] succeeded!
# 如果卡住,就是不通
nc 这几个参数顺便记一下:

3. 用仪表盘判断连没连上
Zabbix 仪表盘的 Current problems 里如果冒出告警,那就是没连上主机,用上面的命令去探测:

这里啥也没有就是连上了。也可以看 Hosts 页面:Availability 是绿色的就是连上了,红色和灰色都不算。

4. 配分组、主机和监控指标
最后是在 Grafana 里按 Zabbix 的分组、主机、监控项取数:

一个遗留问题:不知道为什么,Zabbix 自己能拿到 server 的数据,但 Grafana 这边只能拿到 agent 的数据。先这样吧,回头再研究。