本页内容
- 先决条件
- 第 1 步 - 配置防火墙
- 第 2 步 - 将 SELinux 设置为宽松模式
- 第 3 步 - 配置 Nginx 与 PHP 仓库
- 第 4 步 - 安装 Zabbix 服务端
- 第 5 步 - 安装并配置 PostgreSQL
- 第 6 步 - 配置 PHP
- 第 7 步 - 安装 SSL
- 第 8 步 - 配置 Nginx
- 第 9 步 - 访问 Zabbix 前端
- 第 10 步 - 配置 SELinux
- 第 11 步 - 在远程系统上安装 Zabbix 客户端
- 第 11.1 步 - 在远程系统上配置防火墙
- 第 11.2 步 - 安装 Zabbix 客户端
- 第 11.3 步 - 配置 Zabbix 客户端
- 第 11.4 步 - 启动 Zabbix 客户端
- 第 12 步 - 将 Zabbix 客户端添加到 Zabbix 前端进行监控
- 第 13 步 - 配置邮件通知
- 第 14 步 - 创建新用户
- 第 15 步 - 发送测试告警
- 第 16 步 - 为 Linux 节点配置自动注册
- 总结
Zabbix 是一款免费且开源的 IT 基础设施监控解决方案,可用于监控网络、服务器、虚拟机和云服务。其核心由 C 和 Java 编写,前端使用 PHP 开发。前端提供了一个基于 Web 的界面,用于跟踪和监控网络利用率、CPU 负载、磁盘空间等指标,并可根据自定义触发器发送通知。
Zabbix 采用客户端/服务端(Client/Server)模型运行。适用于各种操作系统的客户端或 agent(代理)会主动连接服务端并上报数据。对于无法安装 agent 的系统,Zabbix 提供了使用通用监控协议(例如简单网络管理协议 SNMP 或智能平台管理接口 IPMI)的选项。
在本教程中,你将学习如何在 Rocky Linux 9 服务器上安装 Zabbix 服务端和客户端。
先决条件
- 两台运行 Rocky Linux 9 的服务器。其中一台作为服务端,另一台作为客户端,我们将通过服务端对其进行监控。
- 一个具有 sudo 权限的非 root 用户。
- 一个指向你服务器的完全限定域名(FQDN),例如 zabbix.example.com。
- 一个邮件服务商(如 Amazon SES 或 Mailgun)提供的 SMTP 账户。
- 确保所有软件包均为最新。 $ sudo dnf update
- 运行本教程及 Zabbix 服务端需要一些基础软件包,其中部分可能已安装在你的服务器上。 $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
两台运行 Rocky Linux 9 的服务器。其中一台作为服务端,另一台作为客户端,我们将通过服务端对其进行监控。
一个具有 sudo 权限的非 root 用户。
一个指向你服务器的完全限定域名(FQDN),例如 zabbix.example.com。
一个邮件服务商(如 Amazon SES 或 Mailgun)提供的 SMTP 账户。
确保所有软件包均已更新。
$ sudo dnf update
运行本教程及 Zabbix 服务端需要一些基础软件包,其中部分可能已安装在你的服务器上。
$ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
第 1 步 - 配置防火墙
第一步是配置防火墙。Rocky Linux 使用 Firewalld 防火墙,请先检查防火墙的状态。
$ sudo firewall-cmd --state
running
防火墙通过不同的区域(zone)工作,我们将使用默认的 public(公共)区域。列出防火墙当前已启用的所有服务和端口。
$ sudo firewall-cmd --permanent --list-services
它会显示如下输出。
cockpit dhcpv6-client ssh
Zabbix 服务端连接 agent 时需要开放 10050 和 10051 端口。
$ sudo firewall-cmd --add-port={10051/tcp,10050/tcp} --permanent
允许 HTTP 和 HTTPS 端口。
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
再次检查防火墙状态。
$ sudo firewall-cmd --permanent --list-all
你会看到类似的输出。
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http https ssh
ports: 10051/tcp 10050/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
重新加载防火墙以使更改生效。
$ sudo firewall-cmd --reload
第 2 步 - 将 SELinux 设置为宽松模式
将 SELinux 配置为宽松(permissive)模式运行。在该模式下,SELinux 不会阻止任何进程,但会将所有信息记录到审计日志文件中。我们稍后将利用这些记录来配置 SELinux 规则。
$ sudo setenforce 0 && sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
检查 SELinux 的状态。
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: permissive
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33
第 3 步 - 配置 Nginx 与 PHP 仓库
Zabbix 软件包会自动安装 PHP 和 Nginx,但会获取较旧的版本。因此,我们需要确保安装过程使用最新的可用版本。
创建并打开 /etc/yum.repos.d/nginx.repo 文件进行编辑。
$ sudo nano /etc/yum.repos.d/nginx.repo
在其中粘贴以下代码。
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
完成后,按 Ctrl + X,在提示时输入 Y 保存文件。
启用 Nginx 主线(mainline)仓库。
$ sudo dnf config-manager --enable nginx-mainline
接下来,我们需要配置 PHP 仓库。
第一步是获取 EPEL 仓库。
$ sudo dnf install epel-release -y
接下来,安装 Remi 仓库。
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
查看可用的 PHP 软件流(stream)。
$ dnf module list php -y
Name Stream Profiles Summary
php 8.1 common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 9 - x86_64
Name Stream Profiles Summary
php remi-7.4 common [d], devel, minimal PHP scripting language
php remi-8.0 common [d], devel, minimal PHP scripting language
php remi-8.1 common [d], devel, minimal PHP scripting language
php remi-8.2 common [d], devel, minimal PHP scripting language
php remi-8.3 common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
默认版本为 8.1。撰写本教程时,Zabbix 兼容 PHP 8.2,因此请启用 Remi 的 PHP 8.2 仓库。Zabbix 的下一版本将支持 PHP 8.3,如果你的 Zabbix 版本为 6.0.26 或更高,也可以启用该版本。
$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.2
现在,我们可以继续安装 Zabbix。
第 4 步 - 安装 Zabbix 服务端
EPEL 仓库默认提供 Zabbix 软件包。在进行安装之前,我们需要先将其禁用。打开 /etc/yum.repos.d/epel.repo 进行编辑,并在 [epel] 段落下添加以下一行。
[epel]
...
excludepkgs=zabbix*
按 Ctrl + X,在提示时输入 Y 保存文件。
Zabbix 的最新版本为 6.4.x,但我们将坚持使用 LTS(长期支持)版本,它在生产环境中要稳定得多。
安装 Zabbix 官方仓库。
$ sudo rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.noarch.rpm
清除所有 RPM 缓存。
$ sudo dnf clean all
安装 Zabbix 服务端、前端和 agent。我们将使用 PostgreSQL 数据库,因此需要 zabbix-web-pgsql 软件包。如果你使用的是 MySQL/MariaDB/Percona 数据库,则需要安装 zabbix-web-mysql 软件包。
$ sudo dnf install zabbix-server-pgsql zabbix-web-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
第 5 步 - 安装并配置 PostgreSQL
Zabbix 兼容 PostgreSQL 13 及以上版本。Rocky Linux 9 默认随附 PostgreSQL 13,但在本教程中我们将使用 PostgreSQL 16。
安装 PostgreSQL 仓库的 RPM 文件。
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
禁用系统内置的 PostgreSQL 模块。
$ sudo dnf -qy module disable postgresql
现在,可以使用以下命令安装 PostgreSQL。
$ sudo dnf install -y postgresql16-server postgresql16-contrib
初始化数据库。
$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
启用 PostgreSQL 服务。
$ sudo systemctl enable postgresql-16
启动 PostgreSQL 服务。
$ sudo systemctl start postgresql-16
检查 PostgreSQL 服务的状态。
$ sudo systemctl status postgresql-16
? postgresql-16.service - PostgreSQL 16 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled)
Active: active (running) since Thu 2024-01-18 14:54:46 UTC; 10s ago
Docs: https://www.postgresql.org/docs/16/static/
Process: 3407 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 3412 (postgres)
Tasks: 7 (limit: 24694)
Memory: 17.4M
CPU: 117ms
CGroup: /system.slice/postgresql-16.service
??3412 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/
??3413 "postgres: logger "
??3414 "postgres: checkpointer "
??3415 "postgres: background writer "
??3417 "postgres: walwriter "
??3418 "postgres: autovacuum launcher "
??3419 "postgres: logical replication launcher "
创建 Zabbix 数据库用户。
$ sudo -u postgres createuser --pwprompt zabbix
系统会提示你输入密码。
Enter password for new role:
Enter it again:
创建 Zabbix 数据库。
$ sudo -u postgres createdb -O zabbix zabbix
导入初始架构和数据库数据。系统会再次提示你输入密码。
$ zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
该过程可能需要几分钟才能完成。
打开 /etc/zabbix/zabbix_server.conf 文件进行编辑。
$ sudo nano /etc/zabbix/zabbix_server.conf
找到 DBPassword 变量,去掉行首的井号(#)以取消注释,并将其值设置为上一步所选择的密码。
DBPassword=psqlpassword
按 Ctrl + X,在提示时输入 Y 保存文件。
启动并启用 Zabbix 服务端和 agent 服务。
$ sudo systemctl enable zabbix-server zabbix-agent --now
第 6 步 - 配置 PHP
Zabbix 会安装我们将使用的 PHP 和 Nginx 配置文件,但在使用之前,我们需要先进行一些修改。
首先,打开 /etc/php-fpm.d/zabbix.conf 文件进行编辑。
$ sudo nano /etc/php-fpm.d/zabbix.conf
将 user = apache 和 group = apache 的值修改为 nginx,如下所示。
user = nginx
group = nginx
这是因为我们使用的是 Nginx 官方仓库中的版本,它以 nginx 用户身份运行,而不是发行版自带的 Nginx 所使用的 apache 用户。
你也可以在此处修改其他 PHP 相关参数或添加自定义定义。完成后,按 Ctrl + X,在提示时输入 Y 保存文件。
启动并启用 PHP-FPM 服务。
$ sudo systemctl enable php-fpm --now
第 7 步 - 安装 SSL
我们需要安装 Certbot 来生成 SSL 证书,这里将使用 Snapd 包管理器来完成。由于 Rocky Linux 没有预装 Snapd,需要先安装 Snapd 安装器。它依赖 EPEL(企业版 Linux 附加软件包)仓库才能工作,但我们在第 3 步中已经安装过,因此可以直接继续。
安装 Snapd。
$ sudo dnf install -y snapd
启用并启动 Snap 服务。
$ sudo systemctl enable snapd --now
安装 Snap core 软件包,并确保你的 Snapd 版本为最新。
$ sudo snap install core && sudo snap refresh core
创建 Snapd 运行所需的链接。
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
安装 Certbot。
$ sudo snap install --classic certbot
通过创建指向 /usr/bin 目录的符号链接,确保可以使用 certbot 命令。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
验证 Certbot 是否正常工作。
$ certbot --version
certbot 2.8.0
运行以下命令生成 SSL 证书。
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m
[email protected]
-d zabbix.example.com
上述命令会将证书下载到你服务器上的 /etc/letsencrypt/live/zabbix.example.com 目录。
生成 Diffie-Hellman 组证书。
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
检查 Certbot 续期调度服务。
$ sudo systemctl list-timers
你会看到 snap.certbot.renew.service 是计划运行的服务之一。
NEXT LEFT LAST PASSED UNIT ACTIVATES -------------------------------------------------------------------------------------------------------------------------------------
Sat 2024-01-20 10:04:02 UTC 1min 32s left Sat 2024-01-20 08:52:11 UTC 1h 10min ago dnf-makecache.timer dnf-makecache.service
Sun 2024-01-21 00:00:00 UTC 13h left Sat 2024-01-20 00:00:10 UTC 10h ago logrotate.timer logrotate.service
Sat 2024-01-20 21:13:00 UTC 11h left Sat 2024-01-20 08:19:11 UTC 1h 43min ago snap.certbot.renew.timer snap.certbot.renew.service
对该过程进行试运行,以检查 SSL 续期是否正常工作。
$ sudo certbot renew --dry-run
如果没有看到错误,说明一切就绪,你的证书将自动续期。
第 8 步 - 配置 Nginx
Zabbix 会安装一个默认的 Nginx 配置文件。我们需要对其进行编辑,添加用于启用 SSL 证书的代码,同时还需修改监听端口,并添加将 HTTP 链接重定向到 HTTPS 的代码。
打开 /etc/nginx/conf.d/zabbix.conf 文件进行编辑。
$ sudo nano /etc/nginx/conf.d/zabbix.conf
修改其中的代码,使文件内容如下所示。
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
root /usr/share/zabbix;
index index.php;
access_log /var/log/nginx/zabbix.access.log;
error_log /var/log/nginx/zabbix.error.log;
ssl_certificate /etc/letsencrypt/live/zabbix.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/zabbix.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/zabbix.example.com/chain.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
location = /favicon.ico {
log_not_found off;
}
location / {
try_files $uri $uri/ =404;
}
location /assets {
access_log off;
expires 10d;
}
location ~ /\.ht {
deny all;
}
location ~ /(api\/|conf[^\.]|include|locale) {
deny all;
return 404;
}
location /vendor {
deny all;
return 404;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/run/php-fpm/zabbix.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param DOCUMENT_ROOT /usr/share/zabbix;
fastcgi_param SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name zabbix.example.com;
return 301 https://$host$request_uri;
}
完成后,按 Ctrl + X,在提示时输入 Y 保存文件。
打开 /etc/nginx/nginx.conf 文件进行编辑。
$ sudo nano /etc/nginx/nginx.conf
在 include /etc/nginx/conf.d/*.conf; 这一行之前添加以下内容。
server_names_hash_bucket_size 64;
按 Ctrl + X,在提示时输入 Y 保存文件。
验证你的 Nginx 配置。
$ sudo nginx -t
启动并启用 Nginx 服务。
$ sudo systemctl enable nginx --now
第 9 步 - 访问 Zabbix 前端
在安装 Zabbix 前端之前,请设置 /etc/zabbix/web 目录的权限,以便 Nginx 能够访问它。
$ sudo chown -R nginx:nginx /etc/zabbix/web
在浏览器中打开 URL https://zabbix.example.com,你将看到如下界面。

点击“下一步(Next step)”按钮完成 Zabbix 安装。下一页面会检查系统要求是否均已满足。

如果没有问题,点击“下一步”按钮继续。随后系统会要求你输入数据库凭据。由于我们尚未配置数据库 TLS 加密,请取消勾选“Database TLS encryption”选项。

点击“下一步”按钮继续。输入你的 Zabbix 服务端的名称(此项为可选项,一旦配置,它将显示在菜单栏和页面标题中)。

点击“下一步”按钮继续。系统会要求你确认所有设置。

如果一切正常,点击“下一步”按钮继续。你会看到提示安装成功的消息。

点击“完成(Finish)”按钮完成安装,系统将跳转到登录页面。

默认用户名为 Admin,密码为 zabbix。输入登录信息后点击“Sign in”按钮,即可进入 Zabbix 仪表盘。

第 10 步 - 配置 SELinux
允许 HTTP 守护进程连接 Zabbix。
$ sudo setsebool -P httpd_can_connect_zabbix 1
允许 Zabbix 连接所有 TCP 端口。
$ sudo setsebool -P zabbix_can_network on
启用 daemons_enable_cluster_mode,以避免 HA 管理器报错。
$ sudo setsebool -P daemons_enable_cluster_mode on
利用审计日志创建自定义的 SELinux 策略包。
$ sudo grep "denied.*zabbix" /var/log/audit/audit.log | audit2allow -M zabbix_policy
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i zabbix_policy.pp
安装所创建的自定义 SELinux 策略包。
$ sudo semodule -i zabbix_policy.pp
运行命令以检查数据库错误。
$ sudo sealert -a /var/log/audit/audit.log
它会建议你应用大量的规则。
运行以下命令。
$ sudo ausearch -c 'php-fpm' --raw | audit2allow -M my-phpfpm
$ sudo semodule -X 300 -i my-phpfpm.pp
$ sudo ausearch -c 'zabbix_agentd' --raw | audit2allow -M my-zabbixagentd
$ sudo semodule -X 300 -i my-zabbixagentd.pp
应用策略,允许 Nginx 访问 PostgreSQL。
$ sudo setsebool -P httpd_can_network_connect_db 1
应用策略,允许连接到外部主机。
$ sudo setsebool -P httpd_can_network_connect 1
将 SELinux 设置为强制(enforcing)模式。
$ sudo setenforce 1 && sudo sed -i 's/^SELINUX=.*/SELINUX=enforcing/g' /etc/selinux/config
第 11 步 - 在远程系统上安装 Zabbix 客户端
Zabbix agent 的主要职责是从系统中收集信息并发送至中央 Zabbix 服务端进行分析。我们将在 Rocky Linux 9 系统上安装 agent,但你也可以在任何发行版上完成安装。
第 11.1 步 - 在远程系统上配置防火墙
开放 10050 端口,以允许 Zabbix agent 连接服务端。
$ sudo firewall-cmd --add-port=10050/tcp --permanent --zone=public
$ sudo firewall-cmd --reload
第 11.2 步 - 安装 Zabbix 客户端
除了最后一条安装命令外,你需要重复第 4 步的操作,即编辑 /etc/yum.repos.d/epel.repo 文件,并在 [epel] 段落中添加以下一行。
[epel]
...
excludepkgs=zabbix*
接下来,安装 Zabbix 仓库并清理 RPM 缓存。
$ sudo rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.noarch.rpm
$ sudo dnf clean all
安装 Zabbix agent。
$ sudo dnf install zabbix-agent
第 11.3 步 - 配置 Zabbix 客户端
Zabbix 支持基于证书的加密,但为了简化本教程,我们将使用预共享密钥(PSK)来保护服务端与 agent 之间的连接。
生成一个 PSK 文件。
$ sudo sh -c "openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"
显示密钥以便复制。
$ cat /etc/zabbix/zabbix_agentd.psk
797c84746dfe86f71b0f207785906d2bb886be27149b296d86df6b1ec9de6bbe
复制此密钥,因为我们稍后需要使用它。
Zabbix agent 的配置保存在 /etc/zabbix/zabbix-agentd.conf 文件中,打开该文件进行编辑。
$ sudo nano /etc/zabbix/zabbix_agentd.conf
取消以下变量的注释,并按如下所示更新其值。
Server=<zabbix_server_IP>
ServerActive=<zabbix_server_IP>
HostMetadata=ZabbixLinuxClient
Hostname=zabbixclient.example.com
将 Zabbix 服务端的 IP 地址作为 Server 和 ServerActive 变量的值。HostMetadata 变量可以是任意用于标识该系统的字符串,它也会被用于稍后将介绍的 Zabbix 前端自动注册流程中。Hostname 项指代 Zabbix agent 节点的系统主机名。
你可以使用以下命令查看主机名。
$ cat /etc/hostname
接下来,找到配置服务端与 agent 之间安全连接的段落。找到 TLSConnect 变量,将其值由 unencrypted 改为 psk,如下所示。
...
### Option: TLSConnect
# How the agent should connect to server or proxy. Used for active checks.
# Only one value can be specified:
# unencrypted - connect without encryption
# psk - connect using TLS and a pre-shared key
# cert - connect using TLS and a certificate
#
# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
# Default:
# TLSConnect=psk
...
接下来,定位到 TLSAccept 段落,将其值改为 psk,如下所示。
...
### Option: TLSAccept
# What incoming connections to accept.
# Multiple values can be specified, separated by comma:
# unencrypted - accept connections without encryption
# psk - accept connections secured with TLS and a pre-shared key
# cert - accept connections secured with TLS and a certificate
#
# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
# Default:
# TLSAccept=psk
...
接下来,找到 TLSPSKIdentity 段落,将其值改为 PSK 001,如下所示。
...
### Option: TLSPSKIdentity
# Unique, case sensitive string used to identify the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKIdentity=PSK 001
...
这就是你将通过 Zabbix Web 前端添加主机时所使用的 PSK ID。
最后,定位到 TLSPSKFile 段落,将其值改为 PSK 文件的路径,如下所示。
...
### Option: TLSPSKFile
# Full pathname of a file containing the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
...
完成后,按 Ctrl + X,在提示时输入 Y 保存文件。
第 11.4 步 - 启动 Zabbix 客户端
启动并启用 Zabbix agent 服务。
$ sudo systemctl enable zabbix-agent --now
第 12 步 - 将 Zabbix 客户端添加到 Zabbix 前端进行监控
我们可以将新主机添加到已有的主机组中,也可以创建新的主机组。主机组用于对监控的节点类型进行分类。要创建新的主机组,请在“Configuration(配置)”菜单下打开“Host groups(主机组)”选项。

在输入框中填写组名,然后点击“Apply(应用)”按钮创建该组。
要创建新主机,请点击“Configuration(配置)”菜单下的“Hosts(主机)”选项,然后点击右上角的“Create host(创建主机)”按钮。

填写 Zabbix 节点的主机名。
在“Templates(模板)”部分输入“Linux by Zabbix agent”,并从下拉列表中选择该模板。

同理,在“Groups(群组)”部分输入“Linux Servers”并选择它。

点击“Interfaces(接口)”部分下的“Add(添加)”按钮,并选择“Agent”。

然后填写 Zabbix 客户端节点的 IP 地址。完成后,完整的“New host(新建主机)”弹窗应如下所示。

接下来,切换到“Encryption(加密)”标签页。在“Connections to host”和“Connections from host”两个选项中均选择 PSK。将 PSK Identity 设置为 PSK 001(即此前在第 11.3 步中为 TLSPSKIdentity 变量设置的值),然后将 PSK 值设置为你之前在 agent 机器上生成的密钥。

完成后,点击“Add(添加)”按钮完成主机的添加。
你会在列表中看到新主机,并带有一个绿色标签,表示 agent 已连接到服务端且工作正常。

第 13 步 - 配置邮件通知
Zabbix 支持多种通知方式,如邮件、Slack、Telegram、短信等。在本教程中,我们将配置邮件通知。打开 Zabbix 前端,点击“Administration(管理)”,然后在左侧菜单中选择“Media types(报警媒介类型)”。你会看到两种邮件类型,一种用于纯文本邮件,另一种用于 HTML 邮件。

点击“Email (HTML)”选项,你将看到如下页面。

填写你的 SMTP 服务器信息。在本教程中,我们使用 Amazon SES 服务。填写完成后点击“Update(更新)”按钮保存配置,系统会返回“Media types”页面。点击页面上的“Test(测试)”按钮以测试邮件设置,将弹出一个窗口。填写你的邮箱地址,然后点击“Test”按钮发送一封测试邮件。

你会在弹窗中看到操作成功的提示,表示测试正常,你的收件箱也会收到如下邮件。点击“Cancel(取消)”按钮关闭弹窗。

第 14 步 - 创建新用户
默认的 Zabbix 用户并未配置接收任何通知。虽然可以为其配置,但默认用户同样存在安全隐患。最佳做法是创建一个新用户,然后禁用默认用户。
进入菜单中的“Administration(管理)>> Users(用户)”部分,点击右上角的“Create user(创建用户)”按钮打开如下页面。

填写用户信息。将用户组选择为“Zabbix administrators(Zabbix 管理员)”。完成后,点击“Media(媒介)”标签页,点击“Add(添加)”按钮并选择“Email (HTML)”作为类型。

在“Send to(发送到)”字段中填写你的邮箱地址,点击“Add(添加)”按钮以添加该邮件选项。接下来切换到“Permissions(权限)”标签页,点击“Select(选择)”按钮添加“Super admin(超级管理员)”角色。

点击“Add(添加)”按钮完成用户创建。接下来,你需要退出前端,以新用户身份重新登录,然后返回用户页面。点击 Admin 用户,选择“Disabled(已禁用)”组并更新该用户,这将禁用默认用户。
第 15 步 - 发送测试告警
默认情况下,Zabbix 会跟踪服务器的剩余磁盘空间,它会检测所有磁盘挂载点并定期进行检查。
第一步是启用通知触发器,以便 Zabbix 能够向所有管理员发送通知。Zabbix 已预先配置好默认触发器,我们需要将其启用。进入“Configuration(配置)>> Actions(动作)>> Trigger actions(触发器动作)”,点击“Disabled(已禁用)”状态,将其切换为“Enabled(已启用)”,如下所示。

接下来,登录到 Zabbix 节点,创建一个足够大的临时文件以触发磁盘使用率告警。
首先,确定服务器上的可用空间。
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 780M 51M 730M 7% /run
/dev/vda2 94G 12G 78G 13% /
/dev/vda1 260M 7.0M 253M 3% /boot/efi
tmpfs 390M 4.0K 390M 1% /run/user/1001
结果显示我们约有 78 GB 的可用空间。接下来,使用 fallocate 命令预分配超过磁盘空间 80% 的容量,其大小足以触发告警。
$ fallocate -l 74G /tmp/temp.img
再次检查磁盘使用情况。
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 780M 54M 726M 7% /run
/dev/vda2 94G 86G 3.9G 96% /
/dev/vda1 260M 7.0M 253M 3% /boot/efi
tmpfs 390M 4.0K 390M 1% /run/user/1001
Zabbix 会触发一条关于磁盘空间的告警,并发送一封相关邮件告警,邮件内容如下所示。

你也可以在仪表盘中查看该告警,它应在数秒内出现。

操作完成后,删除该临时文件。
$ rm -f /tmp/temp.img
你应该会收到另一封邮件,通知你问题已解决。

第 16 步 - 为 Linux 节点配置自动注册
当你需要向 Zabbix 服务端添加多个节点时,这一过程可能会变得有些繁琐。幸运的是,Zabbix 前端允许你通过自动注册(Auto registration)来自动化该流程。
进入“Actions(动作)>> Autoregistration actions(自动注册动作)”,点击右上角的“Create action(创建动作)”按钮。

在新页面中,为动作命名(例如“Auto registration of Linux servers(Linux 服务器自动注册)”)。
点击“Conditions(条件)”下方的“Add(添加)”按钮以添加条件,将类型选择为“Host metadata(主机元数据)”,运算符选择“contains(包含)”,值填写“Linux”。

点击“Add(添加)”继续,创建动作的页面应如下所示。

点击“Operations(操作)”标签页,选择“Add to host group(添加到主机组)”作为操作,并选择“Linux servers”作为主机组。点击“Add(添加)”按钮完成。

如果你希望使用 PSK 加密,也可以进行配置。进入“Administration(管理)>> General(常规)>> Autoregistration(自动注册)”菜单,启用两项加密选项。输入在 Zabbix 服务端创建的 PSK ID 和 PSK 密钥。你可以在每个节点上使用这组 PSK ID 和密钥,它们将使用这些值进行加密。

自此之后,每当你在 Linux 服务器上安装并配置 Zabbix agent,它都会自动被添加到 Zabbix 前端。
总结
至此,我们关于在 Rocky Linux 9 系统上安装与配置 Zabbix 服务端的教程就结束了。我们还在远程服务器上安装了 Zabbix agent 以连接服务端。如果你有任何问题,请在下方评论区留言。