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 用户
- 安装 Zabbix 仓库
- 安装 Zabbix Server、Frontend 和 Agent
- 创建数据库
- 导入数据
- 导入后关闭 log_bin_trust_function_creators 选项
然后接下来的步骤就和宝塔面板有关了,因为宝塔面板已经有了 Nginx、MySQL、PHP 等环境,所以不需要再安装这些软件,只需要在宝塔中添加一个站点并填写相应配置即可。
1.2 同步数据库(可选)
(这步其实无所谓,只是为了在宝塔中正确显示而已)首先在数据库中,我们点击右上方的「同步数据库」,将前面我们通过 cli 创建的数据库同步到宝塔面板中。并通过「改密」将密码改为我们前面设置的密码。
1.3 添加并配置 Nginx 站点
然后我们在宝塔面板中添加一个站点,勾选上 PHP(我这里是 8.0),域名端口什么的就根据需求填写就好。接下来进入到站点的设置>配置文件
中,将 etc/zabbix/nginx.conf
中的内容相应部分复制到站点配置文件中,主要是以下部分(如果后续更新有变动,自行判断即可):
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
中的以下部分:
对比官方流程,主要是要额外将 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 用户
- 安装 Zabbix 仓库
- 安装 Zabbix Agent
2.2 配置一个 Agent
然后更改 Agent 的配置文件 etc/zabbix/zabbix_agent2.conf
中的以下部分:
...
Server=YOUR_ZABBIX_SERVER_IP_OR_DOMAIN:10051
...
ServerActive=YOUR_ZABBIX_SERVER_IP_OR_DOMAIN:10051
...
Hostname=YOUR_AGENT_HOSTNAME
...
2.3 启动 Agent
最后启动 Agent:
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 的功能非常强大,可以监控的内容非常多,而且可以自定义监控项、触发器、报警等,非常适合用来监控多台服务器的运行和资源使用情况。