跳转至

Zabbix 的部署和使用

由于本人有许多私有服务器,例如家里有软路由、ESXi 和 Nas 等,在云服务商还有台服务器,学校也有软路由、备用 Nas 等,所以需要一个监控工具来集中监控这些服务器的资源使用情况。经过网上的搜索和熟人的推荐,最终选择了 Zabbix。

首先看看官方文档介绍:

Zabbix 是一个分布式服务器资源监控工具,可以集中监控多台服务器的 CPU、内存、硬盘、网络等资源的使用情况,并允许用户为几乎任何事件配置基于电子邮件的告警等通知,以实现对服务器问题做出快速反应。同时 Zabbix 也对数据存储提供出色的报告和数据可视化功能。

文档中还详细介绍了 Zabbix 的架构、功能、安装、配置等内容,这里大白话介绍下 Zabbix 的架构:

  • Zabbix Server:负责接收来自 Zabbix Agent 或 Zabbix Proxy 的数据,并将数据存储到数据库中,同时负责处理告警、报告等功能。
  • Zabbix Agent:安装在需要监控的服务器上,负责收集服务器的资源使用情况,并将数据发送给 Zabbix Server。
  • Zabbix Proxy:可选,负责接收来自 Zabbix Agent 的数据,并将数据发送给 Zabbix Server,可以减轻 Zabbix Server 的压力。

1. 配置一个 Server

这部分主要是在你想作为资源监控核心的服务器上安装 Zabbix Server、Frontend 和 Agent。其中 Frontend 是 Web 界面,而 Agent 是这台服务器上的监控代理(Server 当然也要监控自己)。

理论上直接按照官方文档的步骤安装即可,但这里因为我的服务器上安装了宝塔面板,已经有了 Nginx、MySQL、PHP 等环境了,所以步骤有些更改,这里记录下来。

1.1 安装 Zabbix 并创建数据库和导入数据

我用作中心的服务器是一台 Ubuntu 24.04 的服务器,在官方安装文档中选择相应的版本就可以看到官方的安装步骤了。

首先按照官方的步骤来:

  • 使用 root 用户
    Bash
    sudo -s
    
  • 安装 Zabbix 仓库
    Bash
    wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest+ubuntu24.04_all.deb
    dpkg -i zabbix-release_latest+ubuntu24.04_all.deb
    apt update
    
  • 安装 Zabbix Server、Frontend 和 Agent
    Bash
    apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
    
  • 创建数据库
    Bash
    mysql -uroot -p
    
    SQL
    create database zabbix character set utf8mb4 collate utf8mb4_bin;
    create user zabbix@localhost identified by 'YOUR_PASSWORD';
    grant all privileges on zabbix.* to zabbix@localhost;
    set global log_bin_trust_function_creators = 1;
    quit;
    
  • 导入数据
    Bash
    zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
    
  • 导入后关闭 log_bin_trust_function_creators 选项
    Bash
    mysql -uroot -p
    
    SQL
    set global log_bin_trust_function_creators = 0;
    quit;
    

然后接下来的步骤就和宝塔面板有关了,因为宝塔面板已经有了 Nginx、MySQL、PHP 等环境,所以不需要再安装这些软件,只需要在宝塔中添加一个站点并填写相应配置即可。

1.2 同步数据库(可选)

(这步其实无所谓,只是为了在宝塔中正确显示而已)首先在数据库中,我们点击右上方的「同步数据库」,将前面我们通过 cli 创建的数据库同步到宝塔面板中。并通过「改密」将密码改为我们前面设置的密码。

1.3 添加并配置 Nginx 站点

然后我们在宝塔面板中添加一个站点,勾选上 PHP(我这里是 8.0),域名端口什么的就根据需求填写就好。接下来进入到站点的设置>配置文件中,将 etc/zabbix/nginx.conf 中的内容相应部分复制到站点配置文件中,主要是以下部分(如果后续更新有变动,自行判断即可):

Nginx Configuration File
server
{
    ...

    root /usr/share/zabbix;

    ...

    #禁止在证书验证目录放入敏感文件
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }

    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:/var/run/php/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;
    }

    access_log  /www/wwwlogs/zabbix.www.yiges.site.log;
    error_log  /www/wwwlogs/zabbix.www.yiges.site.error.log;
}

完成后重启 Nginx。

1.4 配置 PHP

然后在打开 PHP 的设置面板,在 配置修改 中将 max_input_time 改为 300,并在 安装扩展 中安装 ldap 扩展,最后在 配置文件 中搜索 disable_functions 并将这行用 ; 注释掉(如果怕存在安全问题,可以在稍后 Zabbix Frontend 的配置过程中查看站点的 log 报错来具体删除对应函数的禁用,我这里就一视同仁了 bushi )。

完成后记得重启 PHP。

1.5 配置 Zabbix Server

然后更改 Zabbix Server 的配置文件 etc/zabbix/zabbix_server.conf 中的以下部分:

Text Only
...

DBPassword=YOUR_PASSWORD

...

DBSocket=/tmp/mysql.sock

...

对比官方流程,主要是要额外将 MySQL 的 socket 路径改为宝塔安装的 MySQL 的 socket 默认路径。

最后记得在宝塔面板中重启 Nginx。

1.6 安全组

需要配置服务器防火墙和安全组开放以下端口:

  • Zabbix Frontend:80(或建立站点时自定义的端口)
  • Zabbix Server:10051(或你更改的 zabbix_server.conf 中的监听端口,为后面添加其他非本地 Agent 时使用)

1.7 初始化 Zabbix Frontend

此时,进入你设定的站点 ip 或域名,就可以看到 Zabbix Frontend 的安装界面了,按照提示一步步安装即可,这里的数据库注意填写和前面一样的配置(即 Server 和 Frontend 使用同一个数据库)。

然后就可以在 Frontend 中看到当前服务器主机本身的监控数据了。

2. 配置 Active Agent

接下来就是在其他服务器上安装 Zabbix Agent 了,这里以一台内网中的 Ubuntu 22.04 为例。

首先,由于是内网服务器,所以只能使用 Zabbix Agent 的 Active 模式,即 Agent 主动向 Server 发送数据。如果服务器有公网 IP,可以使用 Passive 模式,即 Server 主动向 Agent 询问数据,相应的 Agent 配置类似。

2.1 安装 Zabbix Agent

首先还是根据官方的步骤来:

  • 使用 root 用户
    Bash
    sudo -s
    
  • 安装 Zabbix 仓库
    Bash
    wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest+ubuntu22.04_all.deb
    dpkg -i zabbix-release_latest+ubuntu22.04_all.deb
    apt update
    
  • 安装 Zabbix Agent
    Bash
    apt install zabbix-agent2 zabbix-agent2-plugin-*
    

2.2 配置一个 Agent

然后更改 Agent 的配置文件 etc/zabbix/zabbix_agent2.conf 中的以下部分:

Text Only
...

Server=YOUR_ZABBIX_SERVER_IP_OR_DOMAIN:10051

...

ServerActive=YOUR_ZABBIX_SERVER_IP_OR_DOMAIN:10051

...

Hostname=YOUR_AGENT_HOSTNAME

...

2.3 启动 Agent

最后启动 Agent:

Bash
systemctl start zabbix-agent2
systemctl enable zabbix-agent2

2.4 在 Zabbix Frontend 中添加 Host

然后在 Zabbix Frontend 中找到 Monitoring>Hosts,点击 Create host,填写 Hostname 和 Agent 的配置文件一致。然后再添加一个 Interface,类型为 Agent,这里由于是内网服务器,所以填写 IP 填写 0.0.0.0``,Port 填写0,即可。最后再 Template 中添加一个模板,选择Linux by Zabbix agent active` 即可。

保存后,进入 Monitoring>Latest data,并选择相应 Host,如果可以收到数据,说明 Agent 添加成功。

3. 配置一个 Passive Agent

TODO

4. 配置一个 Proxy 及其下 Agent

TODO

5. 配置自动加入 Zabbix Server

TODO

6. 配置规则与警告

TODO

7. 写在最后

Zabbix 的功能非常强大,可以监控的内容非常多,而且可以自定义监控项、触发器、报警等,非常适合用来监控多台服务器的运行和资源使用情况。

评论