从源代码安装
您可以通过从源代码编译来获取最新版本的 Zabbix。
另请参见获取 Zabbix 源代码。
此处提供了从源代码安装 Zabbix 的分步教程。
安装 Zabbix 守护进程
1 下载源代码归档文件
前往 Zabbix 下载页面 并下载源代码归档文件。下载完成后,运行以下命令 解压源代码:
tar -zxvf zabbix-8.0.0.tar.gz
请在命令中输入正确的 Zabbix 版本。它必须 与已下载归档文件的名称匹配。
2 创建用户账户
所有 Zabbix 守护进程都在非特权系统用户下运行。
如果 Zabbix 守护进程从非特权用户账户启动,它将继续以该用户身份运行。
在默认配置中,如果守护进程以 root 启动,它将切换到必须存在的 zabbix 用户账户。
要创建 zabbix 系统用户和组,请运行以下命令。
基于 RedHat 的系统:
groupadd --system zabbix
useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
基于 Debian 的系统:
addgroup --system --quiet zabbix
adduser --quiet --system --disabled-login --ingroup zabbix --home /var/lib/zabbix --no-create-home zabbix
无需为 Zabbix 前端单独创建用户账户。
安全建议
如果 Zabbix 服务器 和 agent 在同一台机器上运行,建议让它们在不同的用户账户下运行。 如果两者以同一用户身份运行,agent 将能够访问服务器的配置文件,这可能会将敏感信息(例如数据库密码)暴露给 Zabbix 中任何具有 Admin 级别权限的用户。
以 root、bin 或任何其他具有特殊权限的账户运行 Zabbix 都存在安全风险。
主目录(可选)
Zabbix 进程不需要主目录,因此通常不建议创建。 但是,如果您需要依赖主目录的功能(例如将 MySQL 凭据存储在 $HOME/.my.cnf 中),则可以使用以下命令创建主目录。
在基于 RedHat 的系统上,运行:
mkdir -m u=rwx,g=rwx,o= -p /usr/lib/zabbix
chown zabbix:zabbix /usr/lib/zabbix
在基于 Debian 的系统上,运行:
mkdir -m u=rwx,g=rwx,o= -p /var/lib/zabbix
chown zabbix:zabbix /var/lib/zabbix
3 创建 Zabbix 数据库
对于 Zabbix 服务器 和 proxy 守护进程,以及 Zabbix 前端,都需要一个 数据库。运行 Zabbix agent 则不需要数据库。
已提供用于创建数据库 schema 并插入数据集的 SQL 脚本。Zabbix proxy 数据库只需要 schema,而 Zabbix 服务器数据库除了 schema 之外 还需要数据集。
创建好 Zabbix 数据库后,请继续执行后续的 Zabbix 编译步骤。
4 配置源码
构建 Zabbix 服务器、Zabbix proxy 或 Zabbix agent 需要 C99 及 GNU 扩展。
可通过设置 CFLAGS="-std=gnu99" 显式指定此版本:
export CFLAGS="-std=gnu99"
如果从 Zabbix Git repository 安装, 则必须先运行:\
./bootstrap.sh
为 Zabbix 服务器或 proxy 配置源码时,必须指定要使用的数据库类型。
服务器或 proxy 进程一次只能编译一种数据库类型。
要查看所有受支持的配置选项,请在解压后的 Zabbix 源码目录中运行:
./configure --help
要为 Zabbix 服务器和 agent 配置源码,可以运行 类似如下命令:
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi --with-ares
要为 Zabbix 服务器(使用 PostgreSQL 等)配置源码,可以运行:
./configure --enable-server --with-postgresql --with-net-snmp
要为 Zabbix proxy(使用 SQLite 等)配置源码,可以运行:
./configure --prefix=/usr --enable-proxy --with-net-snmp --with-sqlite3 --with-ssh2
要为 Zabbix agent 配置源码,可以运行:
./configure --enable-agent
或者,对于 Zabbix agent 2:
./configure --enable-agent2
构建 Zabbix agent 2 必须安装受支持的 Go 版本。
编译选项说明:
--enable-agent- 编译 Zabbix agent,以及 Zabbix get 和 Zabbix sender 命令行工具。--with-libcurl- 虚拟机监控、SMTP 身份验证以及web.page.*Zabbix agent 监控项 所必需。另请参见:Requirements (libcurl)。--with-libxml2- 虚拟机监控所必需。--with-libpcre2[=DIR]- Zabbix 始终使用 PCRE2 库进行编译;此选项仅允许指定自定义 PCRE2 安装路径。--with-mysql=/path/to/mysql_config- 指定特定 MySQL 客户端库配置的路径。在安装了多个版本的 MySQL 或 MariaDB 时很有用。--enable-static- 静态链接库(Solaris 不支持)。如果计划将编译后的二进制文件分发到缺少所需库的系统,请使用此选项。不建议在构建 Zabbix 服务器时使用。要静态构建服务器,需要每个外部库都提供静态版本。configure 脚本不会自动检查这一点。--with-stacksize=<value>- 以 KB 为单位设置每个线程的栈大小(例如--with-stacksize=512)。如果 Zabbix 因栈溢出而崩溃或卡住,可以增大此值(例如,在默认线程栈限制较低的系统上进行预处理时)。
如果 ./configure 因缺少库或其他问题而失败,请检查 config.log 文件以获取详细错误信息。
例如,如果缺少 libssl,直接显示的错误消息可能会产生误导:
checking for main in -lmysqlclient... no
configure: error: Not found mysqlclient library
在这种情况下,config.log 会显示实际原因:
/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
另请参见:
5 编译并安装所有内容
如果从 Zabbix Git repository 安装, 则必须先运行:\
$ make dbschema
make install
此步骤应由具有足够权限的用户执行(通常为
'root',或使用 sudo)。
默认情况下,运行 make install 会将守护进程二进制文件
(zabbix_server, zabbix_agentd, zabbix_proxy) 安装到 /usr/local/sbin,并将
客户端二进制文件 (zabbix_get, zabbix_sender) 安装到 /usr/local/bin。
如果要指定不同于 /usr/local 的位置,请在前一步配置源码时使用 --prefix 键,例如 --prefix=/home/zabbix。在这种情况下,守护进程二进制文件将安装到 <prefix>/sbin 下,而工具程序将安装到 <prefix>/bin 下。Man 手册页将安装到 <prefix>/share 下。
6 审查并编辑配置文件
- 编辑 Zabbix agent 配置文件 /usr/local/etc/zabbix_agentd.conf
你需要为每台安装了 zabbix_agentd 的主机配置此文件。
你必须在该文件中指定 Zabbix 服务器的 IP 地址。 来自其他主机的连接将被拒绝。
- 编辑 Zabbix 服务器配置文件 /usr/local/etc/zabbix_server.conf
你必须指定数据库名称、用户和密码(如果有)。
如果你的安装规模较小(最多十台受监控主机),其余参数保持默认值即可满足需求。不过,如果你想最大限度提高 Zabbix 服务器(或 proxy)的性能,则应修改默认参数。
- 如果你已安装 Zabbix proxy,请编辑 proxy 配置文件 /usr/local/etc/zabbix_proxy.conf
你必须指定服务器 IP 地址和 proxy 主机名(该主机名必须为服务器所知),以及数据库名称、用户和密码(如果有)。
使用 SQLite 时,必须指定数据库文件的完整路径; 不需要 DB 用户和密码。
7 启动守护进程
在服务器端运行 zabbix_server。
zabbix_server
请确保您的系统允许分配 36MB(或稍多一些)的共享内存,否则服务器可能无法启动,并且您会在服务器日志文件中看到“Cannot allocate shared memory for <type of cache>.”。 这种情况可能发生在 FreeBSD、Solaris 8 上。\
在所有被监控的机器上运行 zabbix_agentd。
zabbix_agentd
请确保您的系统允许分配 2MB 的共享内存,否则 agent 可能无法启动,并且您会在 agent 日志文件中看到“Cannot allocate shared memory for collector.”。 这种情况可能发生在 Solaris 8 上。
如果您已安装 Zabbix proxy,请运行 zabbix_proxy。
zabbix_proxy
安装 Zabbix Web 前端
复制 PHP 文件
Zabbix 前端是用 PHP 编写的,因此运行它需要一个支持 PHP 的 Web 服务器。
安装只需将 ui 目录中的 PHP 文件复制到 Web 服务器的 HTML 文档目录即可。
Apache Web 服务器的 HTML 文档目录常见位置包括:
- /usr/local/apache2/htdocs(从源码安装 Apache 时的默认目录)
- /srv/www/htdocs(OpenSUSE、SLES)
- /var/www/html(Debian、Ubuntu、Fedora、RHEL)
建议使用子目录而不是 HTML 根目录。
要创建子目录并将 Zabbix 前端文件复制到其中,请执行以下命令,并将 <htdocs> 替换为实际目录:
mkdir <htdocs>/zabbix
cd ui
cp -a . <htdocs>/zabbix
如果计划使用英语以外的其他语言,请参见安装额外的前端语言中的说明。
安装前端
有关 Zabbix 前端安装向导的信息,请参见 Web 界面安装 页面。
安装 Zabbix agent 2 可加载插件
仅当您想要监控内置插件未涵盖的目标时,才需要安装 Zabbix agent 2 可加载插件(例如 MongoDB 服务器或集群、PostgreSQL 及其分支等)。 请参见完整的可加载插件和内置插件列表。
安装插件前,请先查看其 README 文件。 其中可能包含特定要求和安装说明。
若要从源码安装,请先下载并解压可加载插件的源码归档文件。
要编译插件,请进入解压后的插件目录并运行 make:
make
构建 Zabbix agent 2 可加载插件时,必须安装受支持的 Go 版本。
插件可执行文件可以放置在任何位置,只要 Zabbix agent 2 能够加载它即可。 请在插件配置文件中指定插件二进制文件的路径,例如,对于 PostgreSQL 插件,可在 postgresql.conf 中指定:
Plugins.PostgreSQL.System.Path=/path/to/executable/zabbix-agent2-plugin-postgresql
必须在 Zabbix agent 2 配置文件的 Include 参数中指定插件配置文件的路径:
Include=/path/to/plugin/configuration/file/postgresql.conf
有关配置插件的更多详细信息,请继续参见设置。
Zabbix 提供的可加载插件使用简单的 makefile,并包含以下构建目标:
make- 构建插件make clean- 删除构建插件时创建的所有文件make check- 运行自检(需要真实的监控目标,例如 PostgreSQL 数据库)make style- 使用golangci-lint检查 Go 代码风格make format- 使用go fmt格式化 Go 代码make dist- 创建包含所有依赖项的源码归档文件
安装 Java 网关
仅当您想监控 JMX 应用程序时,才需要安装 Java 网关。Java 网关是轻量级的,不需要数据库。
要从源码安装,首先下载并解压源码归档文件。
要编译 Java 网关,请使用 --enable-java 选项运行 ./configure 脚本。建议您指定 --prefix 选项,以请求使用默认 /usr/local 以外的安装路径,因为安装 Java 网关时创建的是整个目录树,而不仅仅是单个可执行文件。
./configure --enable-java --prefix=$PREFIX
要将 Java 网关编译并打包为 JAR 文件,请运行 make。请注意,在此步骤中,您需要确保路径中有 javac 和 jar 可执行文件。
make
现在,您将在 src/zabbix_java/bin 中获得一个 zabbix-java-gateway-$VERSION.jar 文件。如果您可以接受从发行目录中的 src/zabbix_java 运行 Java 网关,那么您可以继续查看有关配置和运行 Java 网关 的说明。否则,请确保您具有足够的权限并运行 make install。
make install
有关配置和运行 Java 网关的更多详细信息,请继续参见设置。
安装 Zabbix Web 服务
仅当您想要使用计划报表时,才需要安装 Zabbix Web 服务。
如果从源码安装,请先下载并解压源码归档文件。
要编译 Zabbix Web 服务,请运行 ./configure 脚本并使用 --enable-webservice 选项。
必须安装受支持的 Go 版本才能构建 Zabbix Web 服务。
在安装了 Web 服务的机器上运行 zabbix_web_service:
zabbix_web_service
有关配置计划报表生成功能的更多详细信息,请继续参阅设置。
获取 Zabbix 源代码
获取 Zabbix 源代码有多种方式:
- 您可以从 Zabbix 官方网站下载已发布的稳定版本
- 您可以从 Zabbix 官方网站的开发者页面下载 nightly build
- 您可以从 Git 源代码仓库系统获取最新的开发版本:
- 完整仓库的主要地址为 https://git.zabbix.com/scm/zbx/zabbix.git
- Master 分支和受支持的发布版本也镜像到了 Github: https://github.com/zabbix/zabbix
必须安装 Git 客户端才能克隆该仓库。官方命令行 Git 客户端软件包在各发行版中通常名为 git。例如,在 Debian/Ubuntu 上安装时,请运行:
sudo apt-get update
sudo apt-get install git
要获取全部 Zabbix 源代码,请切换到您希望放置代码的目录并执行:
git clone https://git.zabbix.com/scm/zbx/zabbix.git
编译问题
这些是关于从源码编译 Zabbix 的已知问题。对于所有其他情况,请参见已知问题页面。
位于非标准位置的库
Zabbix 允许您指定位于非标准位置的库。在下面的示例中,Zabbix 将从指定的非标准位置运行 curl-config,并使用其输出确定要使用的正确 libcurl。
$ ./configure --enable-server --with-mysql --with-libcurl=/usr/local/bin/curl-config
如果这是系统中安装的唯一 libcurl,这样可以正常工作;但如果在标准位置还安装了另一个 libcurl(例如由包管理器安装),则可能无法正常工作。当 Zabbix 需要较新版本的库,而其他应用程序仍需要较旧版本时,就会出现这种情况。
因此,当同一组件也存在于标准位置时,指定非标准位置中的组件并不总是有效。
例如,如果您使用安装在 /usr/local 中的较新 libcurl,同时系统中仍安装了 libcurl 软件包,Zabbix 可能会选错库,从而导致编译失败:
usr/bin/ld: ../../src/libs/zbxhttp/libzbxhttp.a(http.o): in function 'zbx_http_convert_to_utf8':
/tmp/zabbix-master/src/libs/zbxhttp/http.c:957: undefined reference to 'curl_easy_header'
collect2: error: ld returned 1 exit status
这里,函数 curl_easy_header() 在较旧的 /usr/lib/x86_64-linux-gnu/libcurl.so 中不可用,但在较新的 /usr/local/lib/libcurl.so 中可用。
问题出在链接器标志的顺序上,一种解决方案是在 LDFLAGS 变量中指定库的完整路径:
$ LDFLAGS="-Wl,--no-as-needed /usr/local/lib/libcurl.so" ./configure --enable-server --with-mysql --with-libcurl=/usr/local/bin/curl-config
请注意 -Wl,--no-as-needed 选项,在某些系统上可能需要使用该选项(另请参见 Debian-based 系统上的默认链接选项)。
某些系统上的栈大小过小
如果 Zabbix 因栈溢出而崩溃或卡死,您可以在配置源码时使用 --with-stacksize 选项来增大每个线程的栈大小。
此问题可能会出现在默认线程栈限制较低的系统上,尤其是在预处理期间,因为会创建多个线程。
以下示例将每个线程的栈大小设置为 512 KB:
./configure --enable-server --with-mysql --with-stacksize=512
在基于 Linux 的系统上,您可以使用 ulimit -s 命令在运行时检查系统的线程栈限制。