本页内容

  • 先决条件
  • 第 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,你将看到如下界面。

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 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(主机组)”选项。

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

在输入框中填写组名,然后点击“Apply(应用)”按钮创建该组。

要创建新主机,请点击“Configuration(配置)”菜单下的“Hosts(主机)”选项,然后点击右上角的“Create host(创建主机)”按钮。

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

填写 Zabbix 节点的主机名。

在“Templates(模板)”部分输入“Linux by Zabbix agent”,并从下拉列表中选择该模板。

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

完成后,点击“Add(添加)”按钮完成主机的添加。

你会在列表中看到新主机,并带有一个绿色标签,表示 agent 已连接到服务端且工作正常。

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

第 13 步 - 配置邮件通知

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

第 14 步 - 创建新用户

默认的 Zabbix 用户并未配置接收任何通知。虽然可以为其配置,但默认用户同样存在安全隐患。最佳做法是创建一个新用户,然后禁用默认用户。

进入菜单中的“Administration(管理)>> Users(用户)”部分,点击右上角的“Create user(创建用户)”按钮打开如下页面。

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

点击“Add(添加)”按钮完成用户创建。接下来,你需要退出前端,以新用户身份重新登录,然后返回用户页面。点击 Admin 用户,选择“Disabled(已禁用)”组并更新该用户,这将禁用默认用户。

第 15 步 - 发送测试告警

默认情况下,Zabbix 会跟踪服务器的剩余磁盘空间,它会检测所有磁盘挂载点并定期进行检查。

第一步是启用通知触发器,以便 Zabbix 能够向所有管理员发送通知。Zabbix 已预先配置好默认触发器,我们需要将其启用。进入“Configuration(配置)>> Actions(动作)>> Trigger actions(触发器动作)”,点击“Disabled(已禁用)”状态,将其切换为“Enabled(已启用)”,如下所示。

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

接下来,登录到 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 会触发一条关于磁盘空间的告警,并发送一封相关邮件告警,邮件内容如下所示。

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

操作完成后,删除该临时文件。

$ rm -f /tmp/temp.img

你应该会收到另一封邮件,通知你问题已解决。

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

第 16 步 - 为 Linux 节点配置自动注册

当你需要向 Zabbix 服务端添加多个节点时,这一过程可能会变得有些繁琐。幸运的是,Zabbix 前端允许你通过自动注册(Auto registration)来自动化该流程。

进入“Actions(动作)>> Autoregistration actions(自动注册动作)”,点击右上角的“Create action(创建动作)”按钮。

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

在新页面中,为动作命名(例如“Auto registration of Linux servers(Linux 服务器自动注册)”)。

点击“Conditions(条件)”下方的“Add(添加)”按钮以添加条件,将类型选择为“Host metadata(主机元数据)”,运算符选择“contains(包含)”,值填写“Linux”。

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

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

在 Rocky Linux 9 上安装并配置 Zabbix 服务端与客户端监控系统

自此之后,每当你在 Linux 服务器上安装并配置 Zabbix agent,它都会自动被添加到 Zabbix 前端。

总结

至此,我们关于在 Rocky Linux 9 系统上安装与配置 Zabbix 服务端的教程就结束了。我们还在远程服务器上安装了 Zabbix agent 以连接服务端。如果你有任何问题,请在下方评论区留言。