一架构介绍
方案。是提供分布式系统监控,告警,自动化调用监控,可视化界面以及网络监视等功能
zabbix是对被管理节点进行数据库监控的节点
elk是对被管理节点进行日志监控的节点
MariaDB/MySQL:作为数据库,存储 Zabbix 的监控数据。
Nginx:作为 Web 服务器,处理 HTTP 请求。
PHP:作为后端脚本语言,运行 Zabbix 的前端页面和与数据库交互的逻辑。
服务交互流程
zabbix-agent 负责采集本地数据,将数据发给zabbix-server.所以后端所有被监控端都要装。 被动模式 :Zabbix Server 向 Agent 发起请求,Agent 响应并返回数据。 主动模式:Agent 主动向 Zabbix Server 发送数据,无需等待请求。
zabbix-server接收来自agent的数据对数据进行处理,分析,存储。然后zabbix-server把接收到的数据存到mysql。MariaDB 是 Zabbix 的后端数据库,用于存储所有监控数据和配置信息。
Zabbix Web 前端是一个基于 PHP 的动态网页,用于展示从数据库中读取的监控数据。 用户通过浏览器访问前端页面,查看监控状态、图表和告警信息。 Nginx:作为 Web 服务器,托管前端页面。 PHP-FPM:解析 PHP 脚本,生成动态内容。 MariaDB:提供数据支持。 前端展示流程:
- 用户访问
http://<server-ip>/。 - Nginx 接收请求并找到对应的 PHP 文件(如
index.php)。 - PHP 脚本连接到 MariaDB 数据库,查询监控数据。
- PHP 脚本生成 HTML 页面,并将其返回给 Nginx。
- Nginx 将 HTML 页面发送给用户的浏览器。
10051端口: zabbix-server的监听端口,用来监听agent返回的数据
10052端口: 外部程序可以通过 zabbix_sender 工具将自定义数据发送到 Zabbix Server 或 Proxy。
数据通过 10052 端口发送。
10050端口: 在zabbix-agent的监听端口,用来监听zabbix-server的请求
二部署过程关键
数据库
使用的mariadb数据库使用10.5版本,zabbix就要使用6.0版本,否则低版本的不支持 数据库这里作为存储zabbix采集到的监控数据
在数据库设置root密码为空的原因:
在 LNMP 架构中,Zabbix Server 和 MariaDB 通常部署在同一台服务器上,因此 root 用户主要通过 localhost 访问数据库。这种情况下,空密码不会显著增加安全风险。
在生产环境中,建议为 Zabbix 创建专用的数据库用户(如 zabbix),并授予最小必要权限,而不是直接使用 root 用户。
mysql_connect扩展自 PHP 5.5.0 起已废弃,改用mysqli或pdo_mysql
mysql -u root -p
CREATE DATABASE zabbix character set utf8 collate utf8_bin;
#创建一个空的数据库,叫zabbix
GRANT all privileges ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'admin123';
GRANT all privileges ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;
- 创建一个名为 `zabbix` 的数据库用户,并设置密码为 `admin123`。
- 授予该用户对所有数据库和表的全部权限(`ALL PRIVILEGES`)。
- 分别授予远程访问(`'zabbix'@'%'`)和本地访问(`'zabbix'@'localhost'`)的权限。
- 为 Zabbix Server 和 Agent 提供安全的数据库访问权限
nginx
nginx负责处理http请求,静态文件,将动态请求转发给php-FPM处理
vim/etc/nginx/conf.d/default.conf #配置location,在index中添加index.php。以支持index.php的首页
//9行 index index.php index.html index.htm; 这里最先访问到的是php类文件,这样方便把访问到的php文件直接发给php-fpm,避免资源浪费。
nginx配置以下内容确保正确把请求发给php-fpm
送到后端的php-fpm模块,默认情况下php配置块是被注释的,此时去掉注释并修改
//把fastcgi_param中的/scripts改为$document_root。root是配置php程序放置的根目录。
//29~35行
location ~ .php$ {
root /usr/share/nginx/html;
#指定php文件存放路径
fastcgi_pass 127.0.0.1:9000;
#指定PHP-fpm的监听地址和端口,nginx会把php的请求发到这个位置
fastcgi_index index.php;
#指定默认的php首页文件是index.php
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#定义传递给 PHP-FPM 的脚本路径参数
include fastcgi_params;
#引入默认的 FastCGI 参数配置文件,定义了 Nginx 和 PHP-FPM 之间的通信规则
}
这个是一个规则用于匹配以.php结尾的请求
PHP
PHP-FPM是一个php的进程管理器 1,负责解析和执行php脚本 2,接收来自nginx的动态请求,执行php脚本并返回结果
如果 PHP-FPM 和 Nginx 使用不同的用户,可能会导致以下问题: 文件访问权限问题:Nginx 需要读取 PHP 文件并将其传递给 PHP-FPM 处理。如果 PHP 文件的权限不允许 Nginx 用户访问,则会导致 403 错误。 生成文件的权限问题:PHP 脚本可能需要生成文件(如日志、缓存等)。如果 PHP-FPM 和 Nginx 使用不同的用户,生成的文件可能无法被另一方访问。
vim /etc/php-fpm.d/www.conf
添加user和group = nginx
vim /etc/php.ini
//配置php
vim /etc/php.ini #修改PHP配置文件
//359 expose_php = Off //隐藏php版本
//202 short_open_tag = On //支持php短标签
//以下为zabbix优化配置要求
//368 max_execution_time = 300 //执行时间
//378 max_input_time = 300 //接收数据等待时间
//389 memory_limit = 128M //每个脚本占用内存
//656 post_max_size = 16M //POST数据大小
//799 upload_max_filesize = 2M //上传文件大小
//800 always_populate_raw_post_data = -1 //需要添加可以用$HTTP_RAW_POST_DATA 接收post raw data(原始未处理数据)
//877 date.timezone = Asia/Shanghai //时区
PHP执行流程 用户访问一个PHP页面,NGINX接收到请求,NGINX根据配置文件判断请求的文件类型 静态文件nginx直接读取返回给用户,动态文件NGINX将请求转发php-fpm NGINX和php-fpm在一次流程中访问同一个文件所以他们的权限要一致
zabbix-server
解压下载源码包
tar zxvf zabbix-6.0.6.tar.gz
cd /root/zabbix-6.0.6/database/mysql
mysql -uroot -pabc123 zabbix < schema.sql
mysql -uroot -pabc123 zabbix < images.sql
mysql -uroot -pabc123 zabbix < data.sql
mysql -uroot -pabc123 zabbix < double.sql
mysql -uroot -pabc123 zabbix < history_pk_prepare.sql
#在前面已经创建了一个空的mysql库这里开始构建数据库内的结构,这个数据库专门为zabbix所用,用来保存监控采集到的数据
#进入数据库查看有178个表
yum install -y mysql-devel pcre-devel openssl-devel zlib-devel libxml2-devel net-snmp-devel net-snmp libssh2-devel OpenIPMI-devel libevent-devel openldap-devel libcurl-devel fping gcc gcc-c++ make 安装环境包
el libevent-devel openldap-devel libcurl-devel fping gcc gcc-c++ make
//创建zabbix用户
useradd -s /sbin/nglogin -M zabbix
cd zabbix-6.0.6/
//使得编译器在编译 C 代码时使用 GNU C99 标准
export CFLAGS="-std=gnu99"
./configure --sysconfdir=/etc/zabbix/ --enable-server --with-mysql --with-net-snmp --with-libxml2 --with-ssh2 --with-openipmi --with-zlib --with-libpthread --with-libevent --with-openssl --with-ldap --with-libcurl --with-libpcre
--with-libevent --with-openssl --with-ldap --with-libcurl --with-libpcre
//安装
make install
//检查版本
zabbix_server --version
二进制安装zabbix-server
修改配置文件
vim /etc/zabbix/zabbix_server.conf
zabbix_server --version
//修改zabbix-server配置文件
vim /etc/zabbix/zabbix_server.conf
//38行
LogFile=/var/log/zabbix_server.log 定义日志文件
//123行
DBPassword=admin123 指定maridb密码
touch /var/log/zabbix_server.log
chown zabbix:zabbix /var/log/zabbix_server.log
让zabbix有权限写入日志
vim /usr/lib/systemd/system/zabbix-server.service
[Unit]
Description=Zabbix Server with MySQL DB
After=syslog.target network.target mysqld.service
[Service]
Type=simple
ExecStart=/usr/local/sbin/zabbix_server -f
User=zabbix
[Install]
WantedBy=multi-user.target
配置项 | 作用 |
| --------- | ------------------- -----------|
| After | 服务依赖顺序,确保数据库已启动 |
| ExecStart | 指定服务器可执行文件启动 |
| User | 服务以 zabbix 用户运行保障安全 |
systemctl start zabbix-server
netstat -ntap | grep 10051
启动并监听端口
cp -r /root/zabbix-6.0.6/ui/* /usr/share/nginx/html/
chown -R nginx:nginx /usr/share/nginx/html/
部署zabbix前端
必须给予 nginx 权限才能正常访问
zabbix-agent部署
更新证书
yum update ca-certificates -y
安装zabbix官方仓库
rpm -ivh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
yum install zabbix-agent2 -y
启动服务
systemctl enable zabbix-agent2 --now
修改配置文件
vim /etc/zabbix/zabbix_agent2.conf
//启动服务
systemctl enable zabbix-agent2 --now
//修改配置文件
vim /etc/zabbix/zabbix_agent2.conf
13行 PidFile=/var/run/zabbix/zabbix_agentd.pid 记录zabbix-agent的进程id,便于管理
32行 LogFile=/var/log/zabbix/zabbix_agentd.log 记录agent的运行日志
43行 LogFileSize=0 定义单个文件的最大大小,0是不限制大小
82行 Server=192.168.175.155 //指向监控服务器用于被动模式(Passive Check),Agent 接收来自 Server 的请求。
135行 ServerActive=192.168.175.155 //指向监控服务器用于主动模式(Active Check),Agent 主动向 Server 发送数据
150行 Hostname=test //名称 hostname必须与zabbix-server的主机名一致
268行 Include=/etc/zabbix/zabbix_agentd.d/*.conf