Zabbix

1 Zabbix 基础概述

1.1 核心信息

  • 官网:Zabbix: 企业级开源监控解决方案

  • 部署 / 产品手册:可通过官网下载

  • 适用企业:AWS、Juniper、IBM、腾讯等国内外知名企业均有使用

1.2 产品定位与特性

  • 定位:企业级开源分布式监控解决方案,用于监控网络参数、服务器 / 虚拟机 / 应用程序 / 服务 / 数据库 / 网站 / 云平台等的健康状态和完整性。
  • 核心特性:
    • 灵活告警:支持基于邮件的告警配置,快速响应服务器问题。
    • 数据可视化:提供报表和数据可视化功能,适配容量规划。
    • 监控方式:支持轮询和捕获两种方式。
    • 访问便捷:基于 Web 的前端界面,可随时随地评估网络和服务器状态。
    • 兼容性广:适用于小型组织到大型企业的 IT 基础设施监控。
    • 开源免费:基于 GNU GPL v2 许可证,源代码可自由分发。

1.3 架构组成

组件职责
Zabbix Server核心组件,接收 Agent 上报的可用性、完整性及统计数据,作为中央存储库保存配置、统计和运行数据。
数据库存储存储所有配置信息和 Zabbix 收集的数据。
Web 界面基于 Web 的访问入口,通常与 Server 部署在同一物理机,支持跨平台访问。
Zabbix Proxy可选组件,代表 Server 收集性能和可用性数据,分担 Server 负载。
Zabbix Agent部署在监控目标上,主动监控本地资源和应用程序并上报数据;分为 Agent(C 语言编写,轻量多平台)和 Agent2(Go 语言编写,灵活可扩展)。

1.4 数据流逻辑

需遵循 “主机→监控项→触发器→动作” 的配置顺序,即:

  1. 为监控目标创建主机条目;
  2. 为主机创建监控具体资源的监控项;
  3. 配置触发器(触发条件,如 CPU 负载过高);
  4. 配置动作(触发后响应,如发送邮件告警);
  5. 可通过模板功能简化配置流程。

2 Zabbix 部署(基于 LNMP 架构)

2.1 环境规划

主机名IP 地址功能
zabbix-server192.168.108.50部署 Zabbix Server、Nginx、MariaDB、PHP
mysql001192.168.108.51被监控主机,部署 Zabbix Agent2

2.2 部署 LNMP 基础环境

2.2.1 安装 Nginx
  1. 创建 YUM 源:vim /etc/yum.repos.d/nginx.repo,配置如下:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
enabled=1
gpgcheck=0
  1. 安装并启动:yum install nginx -y,systemctl start nginx,systemctl enable nginx。

  2. 防火墙配置:firewall-cmd --add-service=http --zone=public --permanent,firewall-cmd --reload。

  3. 测试:访问http://192.168.108.50,显示 Nginx 欢迎页即成功。

    在这里插入图片描述

2.2.2 安装 MariaDB
  1. 配置 YUM 源(Zabbix 6.0 需 MariaDB 10.5+):vim /etc/yum.repos.d/mariadb.repo,配置如下:
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.6/centos7-amd64/
enabled = 1
gpgcheck = 0
  1. 安装并启动:yum -y install mariadb-server mariadb,systemctl enable mariadb --now。
  2. 设置 root 密码:
mysql
DELETE FROM mysql.user WHERE User='';
ALTER USER root@localhost IDENTIFIED BY 'root123';
  1. 测试连接:mysql -uroot -proot123,登录成功即完成。
2.2.3 安装 PHP
  1. 配置依赖源:
yum -y install epel-release
sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/epel.repo
sed -i "s/metalink/#metalink/g" /etc/yum.repos.d/epel.repo
sed -i "s@https\?://download.[a-z]*\.\?[a-z]*/pub@https://repo.huaweicloud.com@g" /etc/yum.repos.d/epel.repo
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
  1. 安装 PHP 及扩展:
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
2.2.4 配置 Nginx 支持 PHP
  1. 修改 PHP-FPM 用户组:vim /etc/php-fpm.d/www.conf,将user和group改为nginx。
  2. 配置 Nginx 解析 PHP:vim /etc/nginx/conf.d/default.conf,修改如下:
index index.php index.html index.htm;
location ~ \.php$ {
    root /usr/share/nginx/html;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
  1. 配置 PHP(优化 Zabbix 运行环境):vim /etc/php.ini,修改如下:
short_open_tag = On  # 支持短标签
expose_php = Off     # 隐藏版本
max_execution_time = 300  # 执行时间
max_input_time = 300      # 接收数据等待时间
memory_limit = 128M       # 脚本内存限制
post_max_size = 16M       # POST数据大小
upload_max_filesize = 2M  # 上传文件大小
always_populate_raw_post_data = -1  # 新增配置
date.timezone = Asia/Shanghai  # 时区
  1. 启动服务:systemctl enable php-fpm --now,systemctl restart nginx。
2.2.5 环境测试
  1. PHP 语法测试:vim /usr/share/nginx/html/info.php,写入<?php phpinfo(); ?>,访问http://192.168.108.50/info.php,显示 PHP 信息即成功。

    在这里插入图片描述

  2. 数据库连接测试:修改info.php为:

<?php
$link=mysqli_connect('127.0.0.1','root','root123');
if ($link) echo "success";
else echo "fail";
?>

访问页面显示success即成功(注:mysql_connect 扩展已废弃,改用 mysqli 或 pdo_mysql)。

在这里插入图片描述

2.3 部署 Zabbix Server

2.3.1 准备 Zabbix 数据库
  1. 创建数据库及用户:
mysql -uroot -proot123
CREATE DATABASE zabbix character set utf8 collate utf8_bin;  # collate影响字符排序和比较
GRANT all privileges ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix123';
GRANT all privileges ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix123';
flush privileges;
quit
  1. 测试 Zabbix 数据库连接:修改info.php为:
<?php
$link=mysqli_connect('127.0.0.1','zabbix','zabbix123');
if ($link) echo "Zabbix数据库连接成功";
else echo "Zabbix数据库连接失败";
?>

访问页面显示成功即完成。

在这里插入图片描述

2.3.2 导入 Zabbix 数据库脚本
  1. 解压 Zabbix 源码包:tar zxvf zabbix-6.0.6.tar.gz。
  2. 导入脚本(按顺序执行):
cd /root/zabbix-6.0.6/database/mysql/
mysql -uroot -proot123 zabbix < schema.sql
mysql -uroot -proot123 zabbix < images.sql
mysql -uroot -proot123 zabbix < data.sql
mysql -uroot -proot123 zabbix < double.sql
mysql -uroot -proot123 zabbix < history_pk_prepare.sql
  1. 验证:mysql -uroot -proot123 zabbix,执行show tables;,显示 178 张表即成功。
2.3.3 编译安装 Zabbix Server
  1. 安装依赖包:
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
  1. 创建 Zabbix 用户:useradd -s /sbin/nologin -M zabbix。
  2. 编译配置:
export CFLAGS="-std=gnu99"  # 指定C99标准
cd 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
  1. 安装:make install。
  2. 验证版本:zabbix_server --version。
2.3.4 配置 Zabbix Server
  1. 修改配置文件:vim /etc/zabbix/zabbix_server.conf,关键配置:
LogFile=/var/log/zabbix_server.log  # 日志文件路径
DBPassword=zabbix123             # 数据库密码
AlertScriptsPath=/usr/lib/zabbix/alertscripts  # 告警脚本目录(后续配置)
  1. 创建日志文件并授权:touch /var/log/zabbix_server.log,chown zabbix.zabbix /var/log/zabbix_server.log。
  2. 创建 Systemd 服务: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
User=zabbix
[Install]
WantedBy=multi-user.target
  1. 启动服务:systemctl start zabbix-server,netstat -ntap | grep 10051(监听 10051 端口即成功)。
2.3.5 部署 Zabbix Web 前端
  1. 复制前端文件:cp -r /root/zabbix-6.0.6/ui/* /usr/share/nginx/html/。

  2. 授权:chown -R nginx:nginx /usr/share/nginx/html/。

  3. 网页配置:访问http://192.168.108.50,按向导完成配置:

    在这里插入图片描述

    • 必要条件检测:确保所有项通过。

      在这里插入图片描述

    • 数据库配置:类型选 MySQL,数据库名 zabbix,用户 zabbix,密码 zabbix123。

      在这里插入图片描述

    • 服务器配置:默认即可。

      在这里插入图片描述

    • 安装完成:默认用户名Admin,密码zabbix。

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

2.4 部署被监控端(Zabbix Agent2)

  1. 环境准备:关闭防火墙systemctl stop firewalld.service,关闭 SELinuxsetenforce 0,设置主机名hostnamectl set-hostname mysql001。
  2. 安装 Agent2:
yum update ca-certificates -y
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
  1. 配置 Agent2:vim /etc/zabbix/zabbix_agent2.conf,关键配置:
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=192.168.108.50  # 指向Zabbix Server
ServerActive=192.168.108.50  # 指向Zabbix Server
Hostname=mysql001  # 主机名(需与Server端配置一致)
Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf
  1. 启动服务:systemctl enable zabbix-agent2.service --now,systemctl restart zabbix-agent2。

3 Zabbix 管理配置

3.1 监控主机配置

  1. 登录 Zabbix Web:http://192.168.108.50,用户名 Admin,密码 zabbix。

  2. 配置模板(可选):配置→模板→创建模板,定义模板名称(如 MySQL 模板)。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  3. 创建主机:配置→主机→创建主机:

    • 主机名称:mysql001(与 Agent2 配置一致)。

    • 群组:选择合适群组(如 Linux servers)。

    • 接口:添加客户端接口,IP 为 192.168.108.51,端口 10050(Agent2 默认端口)。

    • 模板:链接已创建的模板或系统自带模板(如 Template DB MySQL)。

      在这里插入图片描述

  4. 验证:主机列表中 “可用性” 显示绿色即监控正常。

    在这里插入图片描述

3.2 邮件告警配置

3.2.1 配置 Server 端邮件服务(mailx+QQ 邮箱)
  1. 安装 mailx:yum install mailx -y。
  2. 配置 mail.rc:vim /etc/mail.rc,末尾添加:
set from=你的QQ邮箱
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=你的QQ邮箱
set smtp-auth-password=你的QQ邮箱SMTP授权码  # 需在QQ邮箱开启SMTP并获取
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
  1. 获取 QQ 邮箱 SSL 证书(账号与安全——设置——安全设置——开启服务——获得SMTP/IMAP授权码):
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt  # 信任证书
  1. 测试邮件发送:mailx -s "邮箱测试" 接收邮箱,输入正文后按 Ctrl+D 发送,查收邮件确认。
3.2.2 配置 Zabbix 告警脚本
  1. 创建脚本目录并授权:
mkdir -p /usr/lib/zabbix/alertscripts
chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts
systemctl restart zabbix-server.service
  1. 编写邮件脚本:vim /usr/lib/zabbix/alertscripts/mailx.sh,内容如下:
#!/bin/bash
#send mail
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1
  1. 授权脚本:
touch /tmp/mailx.log
chown -R zabbix.zabbix /tmp/mailx.log
chmod +x /usr/lib/zabbix/alertscripts/mailx.sh
  1. 测试脚本:./mailx.sh 接收邮箱 "测试脚本" "脚本发送成功",查收邮件确认。
3.2.3 配置 Zabbix 告警规则
  1. 创建报警媒介类型:管理→报警媒介类型→创建媒体类型:

    • 名称:mail-test(自定义)。

    • 类型:脚本。

    • 脚本名称:mailx.sh。

    • 脚本参数:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}。

      在这里插入图片描述

  2. 配置用户告警媒介:管理→用户→点击 Admin→报警媒介→添加:

    • 类型:选择 mail-test。

    • 收件人:填写接收告警的邮箱。

    • 点击 “添加” 后,点击 “更新” 保存。

      在这里插入图片描述

  3. 创建动作:配置→动作→Trigger actions→删除默认动作→创建动作:

    • 名称:自定义(如 MySQL 告警)。

    • 触发条件:配置触发规则(如 “主机群组 = Linux servers”)。

    • 操作:

      • 主题:{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}。

        在这里插入图片描述

  4. 测试告警:在被监控端执行systemctl stop mysqld,等待一段时间后,Zabbix Web 会显示告警,接收邮箱会收到告警邮件。

4 关键补充说明

  • collate 作用:影响字符类型列的排序、比较、筛选(WHERE、ORDER BY)、分组(GROUP BY)及索引创建,Zabbix 数据库需配置为 utf8_bin 以保证字符处理一致性。

  • Agent 与 Agent2 区别:Agent 轻量支持多平台,Agent2 灵活可通过插件扩展,推荐使用 Agent2。
    AME} 恢复IP:{HOST.IP} 恢复时间:{EVENT.DATE}-{EVENT.TIME} 恢复等级:{TRIGGER.SEVERITY} 恢复信息:{TRIGGER.NAME}:{ITEM.VALUE} 恢复ID:{EVENT.ID}`。

     [外链图片转存中...(img-KrF7KPU6-1766941542869)]
    
  1. 测试告警:在被监控端执行systemctl stop mysqld,等待一段时间后,Zabbix Web 会显示告警,接收邮箱会收到告警邮件。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐