FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章
  • 书籍
  • FreeBSD 中文期刊
  • 编辑日志
  • 2025-123 下游项目
    • FreeBSD 发布工程:新主管上任
    • GhostBSD:从易用到挣扎与重生
    • BSD Now 与将来
    • 字符设备驱动教程(第三部分)
    • 学会走路——连接 GPIO 系统
    • FreeBSD 中对 SYN 段的处理
    • FreeBSD 2024 年秋季峰会
  • 2024-1112 虚拟化
    • 字符设备驱动程序教程(第二部分)
    • 面向 Linux 和 Windows 用户的 bhyve
    • Xen 与 FreeBSD
    • Wifibox:一种嵌入式虚拟化无线路由器
    • 嵌入式 FreeBSD:Fabric——起步阶段
    • DGP:一种新的数据包控制方法
    • 会议报告:我在都柏林的 EuroBSDCon 体验
  • 2024-0910 内核开发
    • 字符设备驱动程序教程
    • VPP 移植到了 FreeBSD:基础用法
    • 利用 Kyua 的 Jail 功能提升 FreeBSD 测试套件的并行效率
    • FreeBSD 上的 Valgrind
    • 嵌入式 FreeBSD:探索 bhyve
    • TCP/IP 历险记:FreeBSD TCP 协议栈中的 Pacing
    • 实用软件:实现无纸化(Paperless)
  • 2024-0708 存储与文件系统
    • FreeBSD 中的 NVMe-oF
    • FreeBSD iSCSI 入门
    • 使用 ZFS 原生加密保护数据
    • 嵌入式 FreeBSD:打造自己的镜像
    • TCP LRO 简介
    • 基于 Samba 的时间机器备份
  • 2024-0506 配置管理对决
    • 基本系统中的 mfsBSD
    • rdist
    • Hashicorp Vault
    • 在 GitHub 上向 FreeBSD 提交 PR
    • 悼念 Mike Karels
    • 2024 年 5-6 月来信
    • 嵌入式 FreeBSD 面包板
    • TCP/IP 历险记:TCP BBLog
    • 实用软件:开发定制 Ansible 模块
  • 2024-0304 开发工作流与集成
    • FreeBSD 内核开发工作流程
    • FreeBSD 与 KDE 持续集成(CI)
    • 更现代的内核调试工具
    • 从零开始的 ZFS 镜像及 makefs -t zfs
    • 提升 Git 使用体验
  • 2024-0102 网络(十周年)
    • FreeBSD 中的 RACK 栈和替代 TCP 栈
    • FreeBSD 14 中有关 TCP 的更新
    • if_ovpn 还是 OpenVPN
    • SR-IOV 已成为 FreeBSD 的重要功能
    • FreeBSD 接口 API(IfAPI)
    • BATMAN:更优的可移动热点网络方式
    • 配置自己的 VPN——基于 FreeBSD、Wireguard、IPv6 和广告拦截
    • 实用软件:使用 Zabbix 监控主机
  • 2023-1112 FreeBSD 14.0
    • LinuxBoot:从 Linux 启动 FreeBSD
    • FreeBSD 容器镜像
    • 现在用 Webhook 触发我
    • 新的 Ports 提交者:oel Bodenmann (jbo@freebsd.org)
  • 2023-0910 Port 与软件包
    • 回忆录:与 Warner Losh(@imp)的访谈
    • 在你自己的仓库中定制 Poudriere 源
    • Wazuh 和 MITRE Caldera 在 FreeBSD Jail 中的使用
    • PEP 517
    • CCCamp 2023 旅行报告
  • 2023-0708 容器与云
    • 在 Firecracker 上的 FreeBSD
    • 使用 pot 和 nomad 管理 Jail
    • 会议报告:C 与 BSD 正如拉丁语与我们——一位神学家的旅程
    • 抒怀之旅:与 Doug Rabson 的访谈
    • 基于 Jail 的广告拦截教程
    • 我们收到的来信
  • 2023-0506 FreeBSD 三十周年纪念特刊
    • CheriBSD 近十多年的历程
    • AArch64:成为 FreeBSD 新的一级架构
    • 岁月如梭:我个人的时间线
    • 安装 FreeBSD 1.0:回顾 30 年前
    • ZFS 是如何进入 FreeBSD 的呢?
    • 我不是来自约克郡的,我保证!
    • 回忆录:采访 David Greenman Lawrence
    • FreeBSD 和早期的 Unix 社区
    • 早期的 FreeBSD 移植
    • FreeBSD 30 周年:成功的秘诀
    • FreeBSD 在日本:回忆之旅与今日之实
  • 2023-0304 嵌入式
    • CheriBSD port 和软件包
    • 让我们来试试 ChatGPT
    • GPU 直通
  • 2023-0102 构建 FreEBSD Web 服务器
    • ZFS 的原子 I/O 与 PostgreSQL
    • 虚拟实验室——BSD 编程研讨会
    • ZFS 简介
    • 会议报告:落基山庆祝女性计算机科学家
    • 进行中的工作/征求反馈:数据包批处理
    • 基金会与 FreeBSD 桌面
  • 2022-1112 可观测性和衡量标准
    • 在 FreeBSD 的 DDB 内核调试器中编写自定义命令
    • DTrace:老式跟踪系统的新扩展
    • 基于证书的 Icinga 监控
    • 活动监控脚本(activitymonitor.sh)
    • 实用 IPv6(第四部分)
    • EuroBSDCon 会议报道
    • 实用 Port:Prometheus 的安装与配置
    • 书评:《用火解决问题:管理老化的计算机系统(并为现代系统保驾护航)》Kill It with Fire: Manage Aging Computer Systems (and Future Proof Modern Ones)
  • 2022-0910 安全性
    • CARP 简介
    • 重构内核加密服务框架
    • PAM 小窍门
    • SSH 小窍门
    • 实用 IPv6(第三部分)
    • 书评:Understanding Software Dynamics(深入理解软件性能——一种动态视角)—— Richard L. Sites 著
    • 访谈:保障 FreeBSD 安全性
    • MCH 2022 会议报告
  • 2022-0708 科研、系统与 FreeBSD
    • 在 FreeBSD 上构建 Loom 框架
    • 教授本科生 Unix 课程
    • FreeBSD 入门研讨会
    • 实用 IPv6(第二部分)
    • 在 2022 年及以后推广 FreeBSD
    • 进行中的工作/征求反馈:Socket 缓冲区
    • FreeBSD 开发者峰会报告
    • 支持 Electromagnetic Field 2022
  • 2022-0506 灾难恢复
    • 使用 FreeBSD 构建高弹性的私有云
    • LLDB 14 —— FreeBSD 新调试器
    • 实用 IPv6(第一部分)
    • 利用 netdump(4) 进行事后内核调试
    • 进行中的工作/征求反馈:FreeBSD 启动性能
    • 实用 Port:在 OpenZFS 上设置 NFSv4 文件服务器
  • 2022-0304 ARM64 是一级架构
    • FreeBSD/ARM64 上的数据科学
    • Pinebook Pro 上的 FreeBSD
    • 嵌入式控制器的 ACPI 支持
    • 进行中的工作/征求反馈:Lumina 桌面征集开发人员
    • 实用 Port:如何设置 Apple 时间机器
  • 2022-0102 软件与系统管理
    • 为 FreeBSD Ports 做贡献
    • 使用 Git 贡献到 FreeBSD Ports
    • CBSD:第一部分——生产环境
    • 将 OpenBSD 的 pf syncookie 代码移植到 FreeBSD 的 pf
    • 进行中的工作/征求反馈:mkjail
    • 《编程智慧:编程鬼才的经验和思考》(The Kollected Kode Vicious)书评
    • 会议报告:EuroBSDCon 2021 我的第一次 EuroBSDCon:一位新组织者的视角
  • 2021-1112 存储
    • 开放通道 SSD
    • 构建 FreeBSD 社区
    • 与完美操作系统同行 27 年
    • 进行中的工作/征求反馈:OccamBSD
    • 通过 iSCSI 导入 ZFS ZIL——不要在工作中这样做——就像我做的那样
  • 2021-0910 FreeBSD 开发
    • FreeBSD 代码审查与 git-arc
    • 如何为 FreeBSD 实现简单的 USB 驱动程序
    • 内核开发技巧
    • 程序员编程杂谈
  • 2021-0708 桌面/无线网
    • 通往 FreeBSD 桌面的直线路径
    • FreeBSD 13 中的人机接口设备 (HID) 支持
    • Panfrost 驱动程序
    • 用 Git 更新 FreeBSD
    • FreeBSD 的新面孔
    • 想给你的桌面加点佐料?
  • 2021-0506 安全
    • 七种提升新安装 FreeBSD 安全性的方法
    • copyinout 框架
    • 使用 TLS 改善 NFS 安全性
    • Capsicum 案例研究:Got
    • 对 Jail 进行安全扫描
  • 2021-0304 FreeBSD 13.0
    • 展望未来
    • FreeBSD 13.0 工具链
    • FreeBSD 13.0 中有新加载器吗?
    • TCP Cubic 准备起飞
    • OpenZFS 中的 Zstandard 压缩
    • 会议报告:FreeBSD 供应商峰会
    • Git 不够吗?
  • 2021-0102 案例研究
    • Tarsnap 的 FreeBSD 集群
    • BALLY WULFF
    • Netflix Open Connect
    • FreeBSD 的新面孔
    • 写作学者的 FreeBSD
    • 在世界之巅
  • 2020-1112 工作流/持续集成(CI)
    • FreeBSD Git 快速入门
    • 使用 syzkaller 进行内核 Fuzzing
    • Mastering Vim Quickly 书评
    • 线上会议实用技巧
    • 在控制台上进行网络监控
  • 2020-0910 贡献与入门
    • 采访:Warner Losh,第 2 部分
    • 代码审查
    • 撰写良好的提交消息
    • 如何在不是程序员的情况下做出贡献——成为 FreeBSD 译者
    • 如何成为文档提交者
    • 谷歌编程之夏
    • 为 FreeBSD 期刊撰写文章
    • 你为什么使用 FreeBSD
    • FreeBSD 的新面孔
  • 2020-0708 基准测试/调优
    • FreeBSD Friday
    • 采访:Warner Losh,第 1 部分
    • 构建和运行开源社区
    • 在 FreeBSD 上轻松搭建我的世界(Minecraft)服务器
    • FreeBSD 的新面孔
  • 2020-0506 网络性能
    • 内核中的 TLS 卸载
    • 访谈:Michael W Lucas
    • FreeBSD 桌面发行版
    • 使用 Poudriere 进行 Port 批量管理
    • FreeBSD 的新面孔
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
  • 安装设置 Zabbix
  • 数据库设置
  • 配置 Zabbix
  • 配置 Zabbix Agent
  • Zabbix 前端
  • 网站问题
  • 解决方案
在GitHub上编辑
导出为 PDF
  1. 2024-0102 网络(十周年)

实用软件:使用 Zabbix 监控主机

上一页配置自己的 VPN——基于 FreeBSD、Wireguard、IPv6 和广告拦截下一页LinuxBoot:从 Linux 启动 FreeBSD

最后更新于1个月前

  • 原文链接:

  • 作者:Benedict Reuschling

我想了解发生了什么,尤其是我负责的服务器和机器发生了什么。监控这些系统已经成为我的一种好习惯。每天需要检查的机器实在太多了,而且在大多数时候,也不会发生什么特别的事情。但当出现问题时,我也希望能够知道:哪怕是在我睡觉时,或者不在终端旁边的时候。监控也能让我对我的机器群有个整体了解。有时我会发现某个主机已经完成了它的任务,但还未被回收。甚至有时候,我发现可以把新服务迁移到一台未充分利用的机器上,而不是启动一台新主机和 jail。

图表在显示机器在一段时间内的活动方面对我非常有帮助。上周的系统负载是否异常?还是大学的实验小组开始活动了?那块硬盘逐渐满了,最好去处理一下。不时会出现像这样的问题,而通过图表展示的机器指标可以帮助我回答这些问题。

任何一位好的系统管理员都会因为知道他们的系统在运行而睡得更香。监控软件能告诉你它们正在运行,你甚至可以为管理层提供每台机器的正常运行时间报告,制成 PPT。

有一款能够做这些事情的监控系统,它叫做 Zabbix。它是一种开源的 IT 基础设施监控解决方案,由一家公司开发,必要时还能提供专业支持。我使用的完整功能版本运行在长期支持周期中,我发现其安装过程有很好的文档支持。一台中央服务器会从运行代理的系统中收集数据。服务器提供了 Web UI,里面有仪表板、图表、某些事件的警报等功能。对我来说,另一个好处是 FreeBSD 并非一款陌生的操作系统,Zabbix 提供了机器模板来监控重要的指标,比如 CPU、内存,哪怕是 ZFS。

我在 jail 中运行 Zabbix,未遇到过什么大问题。这个基于 PHP 的解决方案需要一款数据库来存储指标。可以使用 Postgres、MySQL/MariaDB、SQLite,甚至是 IBM 和 Oracle 的商业 DB2 数据库服务器。监控本身通过 SNMP/IPMI、SSH 和简单的 ping 来检查可用性。对于主动监控(收集实时机器指标),需要在主机上安装代理。Zabbix 还提供了监控整个子网的功能,可检测新主机,在它们出现时自动将其添加到监控中。还可以为特定的主机和特定情况(例如磁盘已满)设置触发器,可以通过 Web 界面配置这些触发器。可以通过电子邮件、Jabber、SMS 和自定义脚本操作发送相关事件的警报。

安装设置 Zabbix

接下来,让我们看看如何安装这个监控解决方案。我从新的 FreeBSD 14.0 jail 开始,这个 jail 连接到我正在监控的网络,并且从 Web 或者单独的 Poudriere 服务器下载所需的包。请注意,我将 Port 默认的 MySQL 配置改为 PostgreSQL,可以通过在 net-mgmt/zabbix64-server 目录下运行 make config 来进行更改。

我们需要安装以下包:

# pkg install zabbix64-server zabbix64-frontend-php82 postgresql15-server nginx

在之前的尝试中,我使用的是 zabbix6-server 和前端,因为我以为 6.4 版本最终会变成 6.5 版本。但 Zabbix 的发布周期有所不同。长期支持版本是主要版本(此处为 6 版),而小版本发布(如 6.4)的支持周期较短。我转而使用长期支持版本,因为我不想总是处于监控软件的最前沿,而更倾向于当前功能集被使用过一段时间。稳定性是我的首要目标。你不会希望每次新版本发布时都去修复监控软件,尤其是当你依赖它来监控关键设备时。

使用 sysrc 启动时启用相关服务:

# sysrc zabbix_server_enable=yes
# sysrc zabbix_agentd_enable=yes
# sysrc postgresql_enable=yes
# sysrc nginx_enable=yes
# sysrc php_fpm_enable=yes

在我的配置中,我没有使用 SNMP(以后可能会变),但是 pkg-message 里有关于如何启用 SNMP 守护进程的详细信息。如果你需要的话,可以参考。

在安装包之后,我们的首要任务是设置 Zabbix 数据库。我喜欢使用 Postgres,所以在这个设置中我使用了 Postgres。正如前文所述,也支持其他的数据库,你可以根据自己的喜好选择数据存储解决方案。

数据库设置

首先,我切换到 postgres 用户,该用户是作为安装包的一部分进行安装的。

# su postgres

切换到 /var/db/postgres(这是 postgres 的主目录)后,我运行命令 initdb 来初始化数据库集群。然后,我使用命令 pg_ctl 启动数据库,因为我们需要一个运行中的数据库来导入 Zabbix 的基础表。

$ cd /var/db/postgres
$ initdb data
$ pg_ctl -D ./data start

在数据库启动后,我切换到以下目录:

$ cd /usr/local/share/zabbix64/server/database/postgresql/

在这儿,存放着数据库模板文件,用于创建表、触发器以及其他相关数据库对象。

接下来,我运行 PostgreSQL 的交互式命令行工具 psql。在 psql 中,我创建了一个新的数据库 zabbix,还为其创建一个同名的用户、设置了密码。在授予该用户对 zabbix 数据库的所有权限后,我退出了 psql,切换到我们刚刚创建的 zabbix 用户。

psql -d template1
psql> create database zabbix;
psql> CREATE USER zabbix WITH password 'yourZabbixPassword’;
psql> GRANT ALL PRIVILEGES ON DATABASE zabbix to zabbix;
psql> exit

再次使用 psql 作为新创建的 zabbix 用户登录到空的 zabbix 数据库中。然后,我们依次加载包含 Zabbix 表定义(以及其他一些数据库对象)的三个文件:schema.sql、images.sql 和 data.sql,这些文件位于我们之前切换到的本地目录中。完成后,我们可以再次退出数据库。

$ psql -U zabbix zabbix
psql> \i schema.sql
psql> \i images.sql
psql> \i data.sql
psql> exit

至此,数据库设置完成。接下来,我们配置 Zabbix。

配置 Zabbix

Zabbix 需要知道用哪款数据库来存储监控指标、监控哪些机器以及其他大量的配置信息。Zabbix 的主要配置文件位于 /usr/local/etc/zabbix64/zabbix_server.conf,它是一个简单的 键=值 格式文件。文件中的注释介绍了每个配置项的作用,大多数配置项是被注释掉的。在完成必要的修改后,我的配置文件如下所示:

SourceIP=IP.address.of.monitoring-host
LogFile=/var/log/zabbix/zabbix_server.log
DBHost=
DBName=zabbix
DBUser=zabbix
DBPassword=yourZabbixPassword
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1

我首先定义了中央 Zabbix 服务器的 SourceIP 地址,用于收集监控指标。请注意,前端(Web UI)不一定要与监控服务器位于同一主机,但我在这里将它们集中管理。然后,我定义了 Zabbix 运行时发生事件的日志文件路径(LogFile)。如果尚未创建该路径和文件,我需要手动创建之,再将文件所有者设置为 Zabbix 用户(这是随安装包创建的用户)。

另外,我并未忘记为 DBHost 配置项设置值。当使用 PostgreSQL 时,此项应该为空。以后,如果你需要自定义配置文件,你可能会想起这一点,再做出不同的配置。对我而言,这样可以减少输入,当然,使用其他数据库时可能需要设置 DBHost 的值,所以如果你不使用 PostgreSQL,请根据实际情况进行调整。

我们在数据库设置中创建了 DBName、DBUser 和 DBPassword(明文密码)。这些配置项将 Zabbix 连接到数据库实例,以便在监控过程中存储和检索数据。我使用了 Timeout 和 LogSlowQueries 的默认值。到目前为止我没有调整它们,但我知道,如果遇到资源限制,调整这些值会是个好办法。Zabbix 本身还会收集一些内部统计信息,参数 StatsAllowedIP 定义了可以接受这些统计信息的 IP 地址。对我的使用场景而言,localhost 已完全足够。如果你有多个 Zabbix 实例并且希望它们互相监控,那么你可以在此处定义多个 IP 地址。

这就是 Zabbix 服务器配置文件的基本设置。我使用的是代理监控方式来监控客户端和服务器本身。如果你使用 SNMP,可能还需要其他配置项。详细信息可查阅 Zabbix 的文档。

配置 Zabbix Agent

代理程序名为 Zabbix Agentd(经典的 Unix 守护进程),应该在服务器 jail 启动时运行它。可以通过命令 sysrc 在 /etc/rc.conf 添加启动项,如下所示:

# sysrc zabbix_agentd_enable=yes

与服务器配置文件相邻的还有代理的配置文件。代理配置文件名为 zabbix_agentd.conf,位于 /usr/local/etc/zabbix64/zabbix_agentd.conf。在我做了一些自定义修改后,文件内容如下所示:

LogFile=/var/log/zabbix/zabbix_agentd.log
SourceIP=IP.address.of.host-to-monitor
Server=IP.address.of.monitoring-host
ServerActive=127.0.0.1
Hostname=Zabbix server

我们可以在此文件中找到一些熟悉的配置项。应把 LogFile 设置为一个不同的文件,以便区分来自服务器和客户端的消息,尤其是服务器端的消息。被监控的机器一般不会运行服务器部分,因此它们不会与服务器日志混淆。目录应该已经存在,但若没有,可使用命令 touch 手动创建该文件。SourceIP 与监控主机的发送指标相同。对于其他客户端,可以将其设置为目标主机的 IP 地址或者 DNS 地址。ServerIP 在所有系统中保持一致,因为我们使用的是集中式系统来收集监控数据。ServerActive 前面已经讨论过,而 Hostname 是 Zabbix 内部使用的标识符,用于区分不同的系统。

Zabbix 前端

Zabbix 前端需要一台已启用 PHP 的,正在运行的 Web 服务器,且需要一个自己的配置文件。前端需要知道如何从后台获取指标和其他数据,这也是另一个配置文件需要数据库凭证的原因。该文件位于 /usr/local/www/zabbix64/conf/zabbix.conf.php,正好与其余的 Zabbix 网站文件放在一起。文件中有几个注释,指引你填入适当的值。我的配置如下所示:

<?php
// Zabbix GUI 配置文件
  $DB['TYPE']             = 'POSTGRESQL';
  $DB['SERVER']           = 'localhost';
  $DB['PORT']             = '0';
  $DB['DATABASE']         = 'zabbix';
  $DB['USER']             = 'zabbix';
  $DB['PASSWORD']         = 'yourZabbixPassword';
  $DB['SCHEMA']           = '';

关于 TLS 加密的额外设置留给读者自行研究。强烈建议采用 TLS 加密,否则如果有恶意监听者在网络中间,可能会获取到发送监控数据的主机的许多信息。我在这里并未讨论 TLS 配置,以便教程专注于如何让 Zabbix 正常运行。

我选择的 Web 服务器是 nginx,但其他 Web 服务器也可以正常工作。修改后的 nginx 主配置文件 nginx.conf 如下所示:

worker_processes 1;
events {
  worker_connections 1024;
}
http {
  include             mime.types;
  default_type        application/octet-stream;
  sendfile            von;
  keepalive_timeout   65;
  server {
    listen            80;
    server_name       localhost;
    root /usr/local/www/zabbix64;
    index index.php index.html index.htm;
    location / {
      try_files $uri $uri/ =404;
    }
    location ~ .php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_param REMOTE_USER $remote_user;
      fastcgi_pass unix:/var/run/php-fpm.sock;
      fastcgi_index index.php;
      include fastcgi_params;
    }
    error_page    500 502 503 504   /50x.html;
    location = /50x.html {
      root   /usr/local/www/nginx-dist;
    }
}}

请注意,这里也缺少了现在 Web 上普遍采用的 SSL/TLS 设置。我使用了一个 SSL 代理来处理请求,但使用 Let’s Encrypt 解决方案既便宜又容易实现。再次强调,这里我专注于 Zabbix 本身。

对于 PHP 配置,有几项设置需要调整才能在生产环境中使用。编辑 /usr/local/etc/php-fpm.d/www.conf 文件,并将以下设置修改为:

listen = "/var/run/php-fpm.sock"

取消注释以下行:

listen.owner
listen.group
listen.mode

/usr/local/etc/php.ini 文件应该使用生产环境值,因此请将 /usr/local/etc/php.ini-production 复制再重命名为 php.ini。我们还没有完全完成配置,因为 Zabbix 安装后会检查一些 PHP 设置,并且会报错某些值过低(或完全错误)。为了顺利完成配置,请修改这些值并将时区更改为你所在的时区:

date.timezone = Europe/Berlin
post_max_size = 16M
max_execution_time = 300
max_input_time = 300

保存这些文件后,执行命令 sysrc nginx_enable=yes,再启动所有 Zabbix 相关服务:

service postgresql restart
service php-fpm start
service nginx start
zabbix_server start
zabbix_agentd start

网站问题

这一切顺利完成,我在 Zabbix 的日志文件中看到了几行新的记录(服务器和代理端都有)。我兴奋地打开浏览器,输入 Zabbix 的链接,结果什么也没有发生。页面上只有一片空白。于是我重启了服务,检查了日志文件,重新核对了配置文件,依然是同样的空白页面。我换了一个浏览器,排除浏览器故障,但结果还是一样的白屏。

每当你在 BSD 大会上遇到我时(这应该是很有可能的发生事情),都会注意到我的头发已经很少了。我可以归咎于基因和环境因素,但从事 IT 工作无疑是导致我在这种情况下抓狂的一个大原因。按照文档,这应该是能正常工作的,那为什么网页上什么都没有显示呢?

如果不是运气让我找到了正确的方向,这篇文章就会在这里以一个不令人不悦的结尾告终。我打开了 Zabbix 的常见问题解答,正巧看到这一段:

If “opcache” is enabled in the PHP 7.3 configuration, Zabbix frontend may show a blank screen when loaded for the first time. This is a registered PHP bug. To work around this, please set the “opcache.optimization_level” parameter to 0x7FFFBFDF in the PHP configuration (/usr/local/etc/php.ini file). https://www.zabbix.com/documentation/current/en/manual/installation/known_issues
如果在 PHP 7.3 配置中启用了 “opcache”,Zabbix 前端可能在首次加载时显示空白页面。这是一个已知的 PHP 错误。为了解决这个问题,请将参数 “opcache.optimization_level” 设置为 0x7FFFBFDF,并将其添加到 PHP 配置中(`/usr/local/etc/php.ini` 文件)。 https://www.zabbix.com/documentation/current/en/manual/installation/known_issues

解决方案

好的,我打开文件 /usr/local/etc/php.ini,并将 opcache.optimization_level 设置为:

opcache.optimization_level=0x7FFFBFDF

虽然这个值看起来有些晦涩,但当你,亲爱的读者,进行这个设置时,这个设置可能是必要的,亦可能不是。我保留了这个设置,以避免再次遇到麻烦。在重启服务后,我终于见到了 Zabbix 的 Web 配置界面。设置过程主要是确认 PHP 配置和后台数据库的值,设置 Web 前端的密码,然后第一次登录。

你可能会发现,在新安装的 Zabbix 中没有任何主机。要至少看到你自己的监控服务器,请点击左侧的“监控”(大眼睛图标),然后点击“主机”。在新页面中,点击右上角的“创建主机”按钮。会出现一个表单,你可以在其中输入主机的名称、IP 地址和使用的监控方式(在我们的例子中是 Zabbix Agent)。模板字段提供了某些类型主机的默认值,当你开始输入操作系统名称时,我们会找到一款适用于 FreeBSD 的模板。组会将具有相似特征的主机逻辑地组合在一起(你可以创建任意数量的组)。这使得过滤变得更容易,若发生故障,可能会告诉你哪些其他系统需要关注。在接口部分,点击“添加”再选择 Agent。新的输入字段将出现,你可以在其中输入 IP 地址/DNS 名称。默认的代理端口是 10050,因此请检查是否有防火墙规则阻止访问。简介是可选的,但随着服务器数量的增加,提醒自己每个系统的目的还是有用的。点击蓝色的“添加”按钮创建主机。若一切顺利,它会出现在你的主机列表中,并且很快就会有代理收集的数据和一些图表显示出来。仪表板将显示监控期间发现一切问题。

查看 Zabbix 文档,了解如何监控整个子网,如何使用 SNMP 监控,以及如何自动添加主机,而无需在 Zabbix 中逐一点击每个主机。探索 Zabbix UI 的其他功能,发现你以前没有注意到的那些新功能,定期查看,看看是否有异常情况。祝你监控愉快!


BENEDICT REUSCHLING 是 FreeBSD 项目的文档提交者,也是文档工程团队的成员。过去,他曾担任了两届 FreeBSD 核心团队成员。他在德国达姆施塔特应用技术大学管理着一个大数据集群,并为本科生教授“Unix 开发者”课程。Benedict 还是每周播客 bsdnow.tv 的主持人之一。

Practical Ports: Monitor Your Hosts with Zabbix