zabbix监控部署

46 阅读7分钟

一架构介绍

方案。是提供分布式系统监控,告警,自动化调用监控,可视化界面以及网络监视等功能 image.png

zabbix是对被管理节点进行数据库监控的节点

elk是对被管理节点进行日志监控的节点

MariaDB/MySQL:作为数据库,存储 Zabbix 的监控数据。

Nginx:作为 Web 服务器,处理 HTTP 请求。

PHP:作为后端脚本语言,运行 Zabbix 的前端页面和与数据库交互的逻辑。

服务交互流程

image.png

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:提供数据支持。 前端展示流程:

  1. 用户访问 http://<server-ip>/
  2. Nginx 接收请求并找到对应的 PHP 文件(如 index.php)。
  3. PHP 脚本连接到 MariaDB 数据库,查询监控数据。
  4. PHP 脚本生成 HTML 页面,并将其返回给 Nginx。
  5. 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