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-server 192.168.108.50 部署 Zabbix Server、Nginx、MariaDB、PHP
mysql001 192.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 -ysystemctl start nginxsystemctl enable nginx

  2. 防火墙配置:firewall-cmd --add-service=http --zone=public --permanentfirewall-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 mariadbsystemctl 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,将usergroup改为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 --nowsystemctl 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.logchown 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-servernetstat -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 --nowsystemctl 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社区

更多推荐