CentOS7 源码安装 Zabbix6.0|完整记录服务端、代理、邮件报警全过程

📅 2026/7/31 6:25:31
CentOS7 源码安装 Zabbix6.0|完整记录服务端、代理、邮件报警全过程
Zabbix摘要本文详细介绍了Zabbix企业级开源监控系统的完整部署与配置流程。首先概述了Zabbix的核心组件Server、Agent、Proxy、数据库、Web界面和核心概念监控项、触发器、动作、模板等然后通过搭建LNMP架构环境逐步演示了Zabbix Server的安装、数据库导入、Web界面配置全过程。接着详细说明了被监控端Agent的部署方法以及如何在Zabbix Web界面中添加主机、配置模板实现基础监控。最后重点讲解了邮件告警服务的配置包括QQ邮箱集成、告警脚本编写、动作规则设置并通过实际测试验证了监控告警功能的有效性。文章还展示了MySQL数据库监控和系统资源监控的实际效果为读者提供了从零开始搭建企业级监控系统的完整实践指南。zabbix官网https://www.zabbix.com/cn部署手册https://www.zabbix.com/cn/download产品手册https://www.zabbix.com/cn/manuals以下企业都在用当前支持版本生命周期Zabbix概述Zabbix 由 Alexei Vladishev 创建目前由 Zabbix SIA 积极开发和维护。Zabbix 是一款企业级开源分布 式监控解决方案。Zabbix 是一款用于监控网络众多参数、服务器/虚拟机/应用程序/服务/数据库/网站/云平台等健康状态和 完整性的软件。 Zabbix 提供灵活的告警机制允许用户为几乎任何事件配置基于邮件的告警从而实现 对服务器问题的快速响应。基于存储数据 Zabbix 提供出色的报表和数据可视化功能使其成为容量规 划的理想选择。Zabbix 同时支持轮询和捕获两种方式。所有 Zabbix 报表、统计信息及配置参数均可通过基于 Web 的前 端界面访问。该 Web 前端确保您可以从任何位置评估网络状态和服务器健康状况。经过适当配置 Zabbix 可在 IT 基础设施监控中发挥重要作用无论是对拥有少量服务器的小型组织还是对拥有众多服 务器的大型企业都同样适用。Zabbix 完全免费。 Zabbix 基于 GNU 通用公共许可证 version 第 2 版编写和分发这意味着其源代码可 自由分发并面向公众开放。zabbix核心组件1. Zabbix Server核心整个系统的大脑负责数据接收、处理、存储、告警判断、任务调度。功能接收 Agent/Proxy/SNMP 数据、触发告警、管理配置、提供 Web 后端。部署生产环境建议独立服务器支持 HA 高可用。2. Zabbix Agent/Agent 2被监控端部署在被监控主机采集本地数据系统、应用并上报。AgentC 语言开发轻量、单线程适合基础监控。Agent 26.x 推荐Go 语言多线程、插件化MySQL/Redis/K8s性能更强。模式主动Agent→Server、被动Server→Agent。3. Zabbix Proxy可选分布式代理 Server 采集数据减轻 Server 负载、跨地域 / 跨网络监控、网络隔离。不存储数据仅转发适合大规模、多机房场景。4. 数据库Database存储配置主机、模板、触发器、历史数据、趋势数据。支持MySQL/MariaDB最常用、PostgreSQL、Oracle。5. Web 界面Web Interface基于 PHP 的可视化控制台用于配置、查看监控、告警管理、报表。路径 http:///zabbix 。6. 其他工具Zabbix Sender手动 / 脚本向 Server 推送自定义数据。Zabbix GetServer 端手动测试获取 Agent 数据调试用。Zabbix核心定义监控项Item采集的具体指标如 CPU 使用率、内存占用、网卡流量是数据采集的最小 单元。触发器Trigger基于监控项设置的阈值规则如 CPU使用率90%持续5分钟 触发异常状态。动作Action触发器异常后执行的操作发邮件、短信、执行脚本、告警升级。模板Template预定义的监控项、触发器、图形集合可批量应用到主机简化配置。主机Host被监控的设备服务器、交换机、虚拟机需关联模板才能监控。主动模式Agent 主动向 Server 推送数据适合跨网络、降低 Server 负载。被动模式Server 主动向 Agent 拉取数据默认模式配置简单。使用场景服务器监控Linux/Windows 服务器CPU、内存、磁盘、网络、进程、负载、日志。网络设备监控交换机、路由器、防火墙端口流量、状态、CPU、内存SNMP。应用服务监控WebNginx/Apache、数据库MySQL/PostgreSQL/Oracle、中间件Redis、Kafka、 Tomcat、容器Docker/K8s。云平台监控阿里云、AWS、VMware、OpenStack 虚拟机与资源状态。业务指标监控接口响应时间、订单量、用户在线数、API 成功率自定义脚本 / Zabbix Sender。分布式 / 跨机房监控多地域机房、网络隔离环境用 Zabbix Proxy 代理采集。告警与自愈异常自动通知、执行恢复脚本、服务重启、故障升级通知。搭建LNMP架构Zabbix基于LNMP架构部署zabbix-server通过Centos-7-template模板克隆产生mysql001通过mysql01克隆产生安装nginx#创建nginx的yum源[rootzabbix-server ~]# vim /etc/yum.repos.d/nginx.repo[nginx]namenginx repobaseurlhttp://nginx.org/packages/centos/7/$basearch/enabled1gpgcheck0#安装nginx[rootzabbix-server ~]# yum install nginx -y#开启服务[rootzabbix-server ~]# systemctl start nginx[rootzabbix-server ~]# systemctl enable nginx#防火墙放行http服务[rootzabbix-server ~]# firewall-cmd --add-servicehttp --zonepublicsuccess[rootzabbix-server ~]# firewall-cmd --add-servicehttp --zonepublic --permanentsuccess[rootzabbix-server ~]# firewall-cmd --reloadsuccess先测试nginx环境安装mariadb配置yum源#配置Mariadb10.x yum源zabbix6.0必须使用该版本低版本不支持[rootzabbix-server ~]# vim /etc/yum.repos.d/mariadb.repo[mariadb]nameMariaDB baseurlhttps://mirrors.aliyun.com/mariadb/yum/10.6/centos7-amd64/ enabled1gpgcheck0下载mariadb#安装mariadb[rootzabbix-server ~]# yum -y install mariadb-server mariadb#开启并自启服务[rootzabbix-server ~]# systemctl enable mariadb --now#登录数据库设置root密码、删除匿名用户[rootzabbix-server ~]# mysqlWelcome to the MariaDB monitor. Commands end with;or\g. Your MariaDB connectionidis3Server version:10.6.19-MariaDB MariaDB Server Copyright(c)2000,2018, Oracle, MariaDB Corporation Ab and others. Typehelp;or\hforhelp. Type\ctoclearthe current input statement. MariaDB[(none)]DELETE FROM mysql.user WHEREUser;Query OK,2rows affected(0.010sec)MariaDB[(none)]ALTERUSERrootlocalhost IDENTIFIED BYroot123;Query OK,0rows affected(0.005sec)MariaDB[(none)]连接数据库测试[rootzabbix-server ~]# mysql -uroot -proot123Welcome to the MariaDB monitor. Commands end with;or\g. Your MariaDB connectionidis5Server version:10.6.19-MariaDB MariaDB Server Copyright(c)2000,2018, Oracle, MariaDB Corporation Ab and others. Typehelp;or\hforhelp. Type\ctoclearthe current input statement. MariaDB[(none)]安装php# 安装epel源[rootzabbix-server ~]# yum -y install epel-release# 修改epel配置开启baseurl注释metalink替换为华为云镜像[rootzabbix-server ~]# sed -i s/#baseurl/baseurl/g /etc/yum.repos.d/epel.repo[rootzabbix-server ~]# sed -i s/metalink/#metalink/g /etc/yum.repos.d/epel.repo[rootzabbix-server ~]# sed -i shttps\?://download.[a-z]*\.\?[a-z]*/pubhttps://repo.huaweicloud.comg /etc/yum.repos.d/epel.repo# 安装webtatic源php72源[rootzabbix-server ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm# 安装php7.2全套组件[rootzabbix-server ~]# yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-ldap php72w-bcmath配置nginx支持php#修改php‑fpm配置文件把apache改为nginx[rootzabbix-server ~]# vim /etc/php-fpm.d/www.conf# 修改两行8usernginx10groupnginx#配置location在index中添加index.php支持index.php首页[rootzabbix-server ~]# vim /etc/nginx/conf.d/default.conf9index index.php index.html index.htm;#配置php请求转发到后端php‑fpm模块#默认php配置块被注释取消注释并修改fastcgi_param把/scripts改为$document_root29location ~\.php${30root /usr/share/nginx/html;31fastcgi_pass127.0.0.1:9000;32fastcgi_index index.php;33fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;34include fastcgi_params;35}配置php#修改PHP配置文件[rootzabbix-server ~]# vim /etc/php.ini# 通用配置202short_open_tagOn#支持php短标签359expose_phpOff#隐藏php版本# zabbix优化配置要求368max_execution_time300#脚本最大执行时间378max_input_time300#接收数据等待时间389memory_limit128M#每个脚本占用内存656post_max_size16M#POST提交数据最大大小799upload_max_filesize2M#上传文件大小800always_populate_raw_post_data-1877date.timezoneAsia/Shanghai#设置时区为东八区#启动php‑fpm服务设置开机自启[rootzabbix-server ~]# systemctl enable php-fpm --now#重启nginx[rootzabbix-server ~]# systemctl restart nginx测试测试php首页[rootzabbix-server ~]# vim /usr/share/nginx/html/info.php?php phpinfo();?测试连接数据库[rootzabbix-server ~]# vim /usr/share/nginx/html/info.php?php$linkmysqli_connect(127.0.0.1,root,root123);if($link)echosuccess;elseechofail;?# $linkmysqli_connect(127.0.0.1,root,root123); 设置变量$link连接数据库# if ($link) echo success; 如果连接上输出success# else echo fail; 连接不上输出fail注mysql_connect扩展自 PHP 5.5.0 起已废弃改用mysqli或pdo_mysql# 创建zabbix用的数据库及账号[rootzabbix-server ~]# mysql -uroot -proot123Welcome to the MariaDB monitor. Commands end with;or\g. Your MariaDB connectionidis19Server version:10.5.10-MariaDB MariaDB Server Copyright(c)2000,2018, Oracle, MariaDB Corporation Ab and others. Typehelp;or\hforhelp. Type\ctoclearthe current input statement. MariaDB[(none)]CREATE DATABASE zabbix charactersetutf8 collate utf8_bin;Query OK,1row affected(0.001sec)MariaDB[(none)]GRANT all privileges ON *.* TOzabbix%IDENTIFIED BYzabbix123;Query OK,0rows affected(0.002sec)MariaDB[(none)]GRANT all privileges ON *.* TOzabbixlocalhostIDENTIFIED BYzabbix123;Query OK,0rows affected(0.002sec)MariaDB[(none)]flush privileges;Query OK,0rows affected(0.002sec)MariaDB[(none)]quit Bye[rootzabbix-server ~]#collate的作用对于mysql中那些字符类型的列如VARCHARCHARTEXT类型的列都需要有一个COLLATE类型来 告知mysql如何对该列进行排序和比较。COLLATE会影响到ORDER BY语句的顺序会影响到WHERE条 件中大于小于号筛选出来的结果会影响DISTINCT、GROUP BY、HAVING语句的查询结果。另外 mysql建索引的时候如果索引列是字符类型也会影响索引创建只不过这种影响我们感知不到。凡是 涉及到字符类型比较或排序的地方都会和COLLATE有关。测试连接zaabix数据库[rootzabbix-server ~]# vim /usr/share/nginx/html/info.php?php$linkmysqli_connect(127.0.0.1,zabbix,zabbix123);if($link)echoZabbix数据库连接成功;elseechoZabbix数据库连接失败;?测试zabbix-server导入数据库#解压[rootzabbix-server ~]# tar zxvf zabbix-6.0.6.tar.gz#导入数据库[rootzabbix-server ~]# cd /root/zabbix-6.0.6/database/mysql/#查看数据库脚本文件[rootzabbix-server mysql]# lsdata.sql double.sql history_pk_prepare.sql images.sql Makefile.am Makefile.in schema.sql#依次导入SQL脚本到zabbix数据库[rootzabbix-server mysql]# mysql -uroot -proot123 zabbix schema.sql[rootzabbix-server mysql]# mysql -uroot -proot123 zabbix images.sql[rootzabbix-server mysql]# mysql -uroot -proot123 zabbix data.sql[rootzabbix-server mysql]# mysql -uroot -proot123 zabbix double.sql[rootzabbix-server mysql]# mysql -uroot -proot123 zabbix history_pk_prepare.sql#进入zabbix数据库检查表[rootzabbix-server mysql]# mysql -uroot -proot123Welcome to the MariaDB monitor. Commands end with;or\g. Your MariaDB connectionidis32Server version:10.5.10-MariaDB MariaDB Server Copyright(c)2000,2018, Oracle, MariaDB Corporation Ab and others. Typehelp;or\hforhelp. Type\ctoclearthe current input statement. MariaDB[(none)]use zabbix;Reading table informationforcompletion of table andcolumnnames You can turn off this feature to get a quicker startup with-ADatabase changed MariaDB[zabbix]show tables;----------------------------|Tables_in_zabbix|----------------------------|acknowledges|......|widget_field|----------------------------178rowsinset(0.002sec)#一共178张表MariaDB[zabbix]安装软件包#安装zabbix编译依赖环境包[rootzabbix-server ~]# 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# 创建zabbix系统用户无登录shell不创建家目录[rootzabbix-server ~]# useradd -s /sbin/nologin -M zabbix#设置编译环境变量编译器使用GNU C99标准[rootzabbix-server ~]# export CFLAGS-stdgnu99#进入源码目录执行configure预编译[rootzabbix-server ~]# cd zabbix-6.0.6/[rootzabbix-server zabbix-6.0.6]# ./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#编译安装[rootzabbix-server zabbix-6.0.6]# make install#检查zabbix‑server版本验证安装[rootzabbix-server ~]# zabbix_server --version修改zabbix-server配置文件#修改zabbix‑server配置文件[rootzabbix-server ~]# vim /etc/zabbix/zabbix_server.conf38LogFile/var/log/zabbix_server.log123DBPasswordzabbix123#创建日志文件并修改属主属组[rootzabbix-server ~]# touch /var/log/zabbix_server.log[rootzabbix-server ~]# chown zabbix.zabbix /var/log/zabbix_server.log#创建systemd服务文件管理zabbix‑server[rootzabbix-server ~]# vim /usr/lib/systemd/system/zabbix-server.service#写入以下内容[Unit]DescriptionZabbix Server with MySQL DBAftersyslog.target network.target mysqld.service[Service]TypesimpleExecStart/usr/local/sbin/zabbix_server-fUserzabbix[Install]WantedBymulti-user.target#重载systemd配置启动zabbix‑server[rootzabbix-server ~]# systemctl daemon-reload[rootzabbix-server ~]# systemctl start zabbix-server#查看10051端口监听验证服务启动[rootzabbix-server ~]# netstat -ntap | grep 10051tcp000.0.0.0:100510.0.0.0:* LISTEN2610/zabbix_server前端页面复制到站点#复制zabbix前端网页文件到nginx网站根目录[rootzabbix-server ~]# cp -r /root/zabbix-6.0.6/ui/* /usr/share/nginx/html/#修改网页目录属主属组为nginx[rootzabbix-server ~]# chown -R nginx:nginx /usr/share/nginx/html/#重启nginx[rootzabbix-server ~]# systemctl restart nginxhttp://192.168.108.50默认登陆用户名Admin默认登陆密码zabbix被监控端安装agent通过前面mysql章节的mysql01克隆mysql001#关闭防火墙、临时关闭selinux、修改主机名[rootmysql001 ~]# systemctl stop firewalld.service[rootmysql001 ~]# setenforce 0[rootmysql001 ~]# hostnamectl set-hostname mysql001#更新CA证书[rootmysql001 ~]# yum update ca-certificates -y#安装zabbix‑agent2 yum源[rootmysql001 ~]# rpm -ivh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm#安装zabbix‑agent2客户端[rootmysql001 ~]# yum install zabbix-agent2 -y#启动并设置开机自启[rootmysql001 ~]# systemctl enable zabbix-agent2.service --now#修改agent2配置文件[rootmysql001 ~]# vim /etc/zabbix/zabbix_agent2.conf13PidFile/var/run/zabbix/zabbix_agent2.pid32LogFile/var/log/zabbix/zabbix_agent2.log43LogFileSize082Server192.168.108.50#被动模式指向zabbix‑server地址135ServerActive192.168.108.50#主动模式指向zabbix‑server地址146Hostnamemysql001#本机主机名web页面添加主机时必须保持一致283Include/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf#重启agent2服务[rootmysql001 ~]# systemctl restart zabbix-agent2zabbix管理http://192.168.108.50zabbix首页登录后监控主机配置-模板定义模板新名称添加数据库信息$MYSQL.DSN 写被监控端数据库IP配置-主机-创建主机群组选择模板选择被监控主机配置Inteerfaces: 添加客户端端口是10050是zabbix客户端插件监听端口添加后直接生成可用性绿色正常一开始灰色等一会停止启动mysql服务观察现象停止mysql服务观察zabbix[rootmysql001 ~]# systemctl stop mysqld发现告警了mysql001这个主机服务down了跑到mysql001恢复服务运行[rootmysql001 ~]# systemctl start mysqld问题已经解决邮件服务记录下来lmsbtquhuzhqcage在zabbix-server服务器上安装邮箱服务[rootzabbix-server ~]# yum install mailx -y配置邮箱服务#配置mail.rc实现发送QQ邮箱告警在文件末尾追加配置[rootzabbix-server ~]# vim /etc/mail.rc# ----文件末尾新增----setfrom2370787636qq.com#发件邮箱替换为自己邮箱setsmtpsmtps://smtp.qq.com:465setsmtp-auth-user2370787636qq.com#登录邮箱账号setsmtp-auth-passwordlmsbtquhuzhqcage#QQ邮箱授权码替换成自己的setsmtp-authlogin#set smtp-use-starttls #不要开启开启会验证失败注释掉setssl-verifyignore#set nss-config-dir/root/.certs #证书目录该行注释直接使用系统nssdbsetnss-config-dir/etc/pki/nssdb/#修改nssdb目录权限[rootzabbix-server ~]# chmod -R 755 /etc/pki/nssdb/因为需要QQ邮箱的SSL证书所以我们还需要手动的获取QQ邮箱的证书保存到本地指定的目录里以备调 用和验证具体命令如下#创建证书存放目录[rootzabbix-server ~]# mkdir -p /root/.certs/#获取QQ邮箱SMTP证书保存到本地[rootzabbix-server ~]# echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne /-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p ~/.certs/qq.crt#导入证书1[rootzabbix-server ~]# certutil -A -n GeoTrust SSL CA -t C,, -d ~/.certs -i ~/.certs/qq.crt#导入证书2[rootzabbix-server ~]# certutil -A -n GeoTrust Global CA -t C,, -d ~/.certs -i ~/.certs/qq.crt#查看证书库确认导入成功[rootzabbix-server ~]# certutil -L -d /root/.certs为了防止出现前文所说的发送邮件警告提示还需要进入邮箱SSL证书存放目录 /root/.certs 里执行如 下命令[rootzabbix-server ~]# cd /root/.certs/[rootzabbix-server .certs]# certutil -A -n GeoTrust SSL CA - G3 -t Pu,Pu,Pu -d ./ -i qq.crt返回如下提示即可Notice: Trust flag u issetautomaticallyifthe private key is present.这是为了信任证书的标记操作。至此已经完成了mailx结合QQ邮箱发送系统邮件的部署了通过命令行发送测试邮件试试吧# 执行命令后进入交互式编辑输入正文后按 CtrlD 结束并发送[rootzabbix-server ~]# mailx -s 邮箱测试 2370787636qq.com你真帅啊 哈哈哈 EOT#ctrl_d[rootzabbix-server ~]#前往QQ邮箱查收测试邮件创建脚本目录并重启zabbix服务[rootzabbix-server ~]# vim /etc/zabbix/zabbix_server.conf548AlertScriptsPath/usr/lib/zabbix/alertscripts[rootzabbix-server ~]# mkdir -p /usr/lib/zabbix/alertscripts[rootzabbix-server ~]# chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts[rootzabbix-server ~]# systemctl restart zabbix-server.service编写邮件发送脚本[rootzabbix-server ~]# vim /usr/lib/zabbix/alertscripts/mailx.sh#!/bin/bash#send mailmessagesecho$3|tr\r\n\nsubjectecho$2|tr\r\n\necho${messages}|mail-s${subject}$1/tmp/mailx.log21权限设置[rootzabbix-server ~]# touch /tmp/mailx.log[rootzabbix-server ~]# chown -R zabbix.zabbix /tmp/mailx.log[rootzabbix-server ~]# chmod x /usr/lib/zabbix/alertscripts/mailx.sh测试脚本发送邮件[rootzabbix-server ~]# cd /usr/lib/zabbix/alertscripts/[rootzabbix-server alertscripts]# ./mailx.sh 2370787636qq.com hello mailx.sh This is test已收到邮件告警服务管理-报警媒介类型创建媒体类型创建媒体类型脚本参数{ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE}添加成功管理-用户点击Admin进入选择报警媒介添加类型选择刚刚创建的mail-test设置完成后点击添加收件人填写自己邮箱地址一定要进行更新配置-动作-Trigger actions先删除默认动作然后创建动作定义操作主题 {TRIGGER.STATUS}:{TRIGGER.NAME}消息 告警主机{HOST.NAME}告警 IP{HOST.IP}告警时间{EVENT.DATE}-{EVENT.TIME}告警等级{TRIGGER.SEVERITY}告警信息{TRIGGER.NAME}:{ITEM.VALUE}事件 ID{EVENT.ID}主题 {TRIGGER.STATUS}:{TRIGGER.NAME}消息 恢复主机{HOST.NAME}恢复 IP{HOST.IP}恢复时间{EVENT.DATE}-{EVENT.TIME}恢复等级{TRIGGER.SEVERITY}恢复信息{TRIGGER.NAME}:{ITEM.VALUE}恢复 ID{EVENT.ID}恢复操作最后点击添加动作添加完成监视主页面仪表盘在被监控端关闭数据库服务[rootmysql001 ~]# systemctl stop mysqld等待一段时间后检查接收告警邮件mysql其他监控信息监控mysql001 系统资源使用加压看效果[rootmysql001 ~]# dd if/dev/zero of/mnt/memoryfile bs1G count3