【云运维】zabbix管理(续)
Zabbix管理
接《Zabbix 6.0 基于 LNMP 架构部署指南》后
zabbix首页登录后

监控主机
配置->模板

定义模板新名称

添加数据库信息


配置->主机->创建主机

主机群组

被监控主机配置

添加后直接生成

添加完毕后,先打开被监控端(192.168.100.111)安装mysql
一、环境说明
- 操作系统:CentOS 7
- MySQL 版本:5.7.17(需提前下载安装包)
- 依赖包:Boost 1.59.0(MySQL 5.7 编译必需)
二、安装前准备
1. 安装编译依赖工具
MySQL 源码编译需依赖 gcc、cmake、bison 等工具,执行以下命令批量安装:
# 安装基础编译依赖
[root@centos7 ~]# yum install -y ncurses ncurses-devel bison cmake
# 安装 C/C++ 编译器
[root@centos7 ~]# yum install -y gcc gcc-c++
2. 创建 MySQL 专用用户
为避免权限混乱,创建无登录权限的专用用户 mysql:
[root@centos7 ~]# useradd -s /sbin/nologin mysql
3. 解压安装包
假设已下载以下两个安装包到本地(可通过官网获取):
- MySQL 源码包:
mysql-5.7.17.tar.gz - Boost 依赖包:
boost_1_59_0.tar.gz
执行解压命令并移动到指定目录:
# 解压 MySQL 源码到 /opt 目录
[root@centos7 ~]# tar zxvf mysql-5.7.17.tar.gz -C /opt/
# 解压 Boost 到 /usr/local 目录
[root@centos7 ~]# tar zxvf boost_1_59_0.tar.gz -C /usr/local/
# 重命名 Boost 目录(方便编译时识别)
[root@centos7 ~]# cd /usr/local/
[root@centos7 local]# mv boost_1_59_0 boost
三、编译配置与安装
1. 进入源码目录
[root@centos7 local]# cd /opt/mysql-5.7.17/
2. CMake 编译配置(核心步骤)
执行以下命令进行编译参数配置,参数说明见下方表格:
[root@centos7 mysql-5.7.17]# [把下面的指令复制粘在这里,不要复制注释]
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ # MySQL 安装目录
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ # 套接字文件路径
-DSYSCONFDIR=/etc \ # 配置文件目录(my.cnf 存放处)
-DSYSTEMD_PID_DIR=/usr/local/mysql \ # PID 文件存放目录
-DDEFAULT_CHARSET=utf8 \ # 默认字符集 utf8
-DDEFAULT_COLLATION=utf8_general_ci \ # 默认排序规则
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ # 启用 InnoDB 引擎(必需)
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ # 启用 ARCHIVE 引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ # 启用 BLACKHOLE 引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ # 启用性能监控引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \ # 数据存储目录
-DWITH_BOOST=/usr/local/boost \ # Boost 依赖包路径
-DWITH_SYSTEMD=1 # 支持 systemd 管理服务
关键注意事项
-
若 CMake 过程中报错,必须先删除源码目录下的
CMakeCache.txt文件,解决错误后重新执行 CMake,否则错误会重复出现:rm -rf CMakeCache.txt -
确保 Boost 版本为 1.59.0,MySQL 5.7 不兼容更高或更低版本。
3. 编译与安装
使用 make 命令编译(-j2 表示启用 2 个线程加速,可根据 CPU 核心数调整,如 -j4):
[root@centos7 mysql-5.7.17]# make -j2
[root@centos7 mysql-5.7.17]# make install
- 编译过程耗时较长(取决于服务器配置),耐心等待即可。
- 若编译中出现依赖缺失报错,补充安装对应依赖后,删除
CMakeCache.txt重新编译。
四、初始化配置
1. 设置目录权限
将 MySQL 安装目录及数据目录权限赋予 mysql 用户,避免权限不足:
[root@centos7 mysql-5.7.17]# chown -R mysql:mysql /usr/local/mysql/
2. 配置 my.cnf 文件
创建并编辑 MySQL 主配置文件 /etc/my.cnf,直接复制以下内容(优化后的基础配置):
[root@centos7 mysql-5.7.17]# vim /etc/my.cnf
# 如果里面已经有内容了,删掉后再粘下面的
[client]
port = 3306 # 客户端连接端口
default-character-set=utf8 # 客户端默认字符集
socket = /usr/local/mysql/mysql.sock # 套接字文件路径[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock[mysqld]
user = mysql # 运行用户
basedir = /usr/local/mysql # 安装目录
datadir = /usr/local/mysql/data # 数据目录
port = 3306 # 服务端口
character_set_server=utf8 # 服务端默认字符集
pid-file = /usr/local/mysql/mysqld.pid # PID 文件路径
socket = /usr/local/mysql/mysql.sock # 套接字文件路径
server-id = 1 # 数据库服务器 ID(主从复制用)# SQL 模式配置(严格模式,避免脏数据)
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
保存后设置配置文件权限:
[root@centos7 mysql-5.7.17]# chown mysql:mysql /etc/my.cnf
3. 配置环境变量
将 MySQL 二进制命令路径添加到系统环境变量,方便全局调用:
# 写入环境变量配置文件
[root@centos7 mysql-5.7.17]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
[root@centos7 mysql-5.7.17]# echo 'export PATH' >> /etc/profile
# 生效环境变量
[root@centos7 mysql-5.7.17]# source /etc/profile
4. 初始化 MySQL 数据库
使用 mysqld 命令初始化数据目录(--initialize-insecure 表示不生成临时密码,直接设置空密码):
[root@centos7 mysql-5.7.17]# cd /usr/local/mysql/
[root@centos7 mysql] # bin/mysqld \
--initialize-insecure \ # 无密码初始化(生产环境建议用 --initialize 生成临时密码)
--user=mysql \ # 运行用户
--basedir=/usr/local/mysql \ # 安装目录
--datadir=/usr/local/mysql/data # 数据目录
五、服务管理配置
1. 配置 systemd 服务
MySQL 5.7 支持 systemd 管理,复制服务文件到系统目录:
[root@centos7 mysql]# cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
2. 启动 MySQL 服务
# 重新加载 systemd 配置
[root@centos7 mysql]# systemctl daemon-reload
# 启动 MySQL 服务
[root@centos7 mysql]# systemctl start mysqld
# 查看服务状态(确认是否启动成功)
[root@centos7 mysql]# systemctl status mysqld
# 查看 3306 端口监听情况
[root@centos7 mysql]# netstat -anpt | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 20478/mysqld
3. 设置开机自启
[root@centos7 mysql]# systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
六、初始化密码与远程访问授权
1. 设置 root 密码
初始化后 root 密码为空,执行以下命令设置密码(示例密码为 123,生产环境请设置强密码):
[root@centos7 mysql]# mysqladmin -u root -p password "123"
Enter password: '回车' # 执行后会提示输入「旧密码」,直接回车(初始为空)即可。
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
2. 登录 MySQL 测试
[root@centos7 mysql]# mysql -u root -p
[root@centos7 mysql 10:51:59]# mysql -u root -p
Enter password: '123'
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.17 Source distributionCopyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
3. 授权远程登录
默认 root 用户仅允许本地登录,若需远程连接(如 Navicat),执行以下授权命令:
# 授权 root 用户从任意 IP 访问所有数据库(密码 123)
mysql> grant all privileges on *.* to 'root'@'%' identified by '123' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
# 刷新权限使其生效
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)mysql> exit
Bye
安全说明
- 生产环境不建议授权
%(任意 IP),可指定具体 IP 如'192.168.1.0/24'。 - 建议创建专用远程用户,而非直接使用 root 账号。
被监控端结束后,在服务端安装邮件服务
在 Zabbix 监控系统中,邮件告警是核心通知方式之一。在 Zabbix-Server 服务器 上通过 mailx 配置邮箱服务、编写发送脚本,并集成到 Zabbix 告警媒介的完整步骤,确保监控异常时能及时收到邮件通知。
环境说明
- 服务器:Zabbix-Server (192.168.100.110)
- 邮件工具:
mailx(轻量邮件客户端,支持 SMTP 转发) - 邮箱服务商:163 邮箱(需开启「客户端授权码」,其他邮箱(QQ、企业邮箱)配置逻辑类似)
- 核心目标:实现 Zabbix 告警信息通过邮件实时推送
前置准备
- 163 邮箱账号(已完成实名认证)
- 开启邮箱「SMTP 服务」和「客户端授权码」(关键步骤,见下方说明)
如何获取 163 邮箱客户端授权码?
- 登录 163 邮箱网页版 → 进入「设置」→「POP3/SMTP/IMAP」
- 开启「SMTP 服务」(允许第三方客户端通过 SMTP 发送邮件)
- 点击「生成授权码」,按提示完成验证(如短信验证),获取一串 16 位授权码(不是邮箱登录密码,后续配置用,记得把授权码保存下来)
一、安装并配置 mailx 邮件服务
1. 在zabbix-server服务器上安装邮箱服务
mailx 是 Linux 系统自带的邮件客户端,若未安装,执行以下命令安装:
[root@zabbix-server ~]# yum install mailx -y
2. 配置 mailx 连接 163 邮箱
编辑 mailx 全局配置文件 /etc/mail.rc,在文件末尾添加 163 邮箱的 SMTP 配置:
# 注意网易邮箱需要开启客户端授权码进行第三方登录
[root@zabbix-server ~]# vim /etc/mail.rc
添加以下内容(替换为自己的邮箱和授权码):
# 发送邮件的邮箱地址(必须与 SMTP 账号一致)
set from=你的邮箱
# 163 邮箱 SMTP 服务器地址(固定为 smtp.163.com)
set smtp=smtp.163.com
# SMTP 认证的用户名(即邮箱地址)
set smtp-auth-user=你的邮箱
# SMTP 认证密码(**此处填 16 位客户端授权码**,不是邮箱登录密码)
set smtp-auth-password=16位客户端授权码
# 认证方式(固定为 login)
set smtp-auth=login
保存退出(:wq)。
3. 测试邮件发送功能
配置完成后,先手动测试是否能正常发送邮件,避免后续集成 Zabbix 时踩坑:
# 格式:echo "邮件内容" | mail -s "邮件主题" 接收邮箱
echo "hello world" | mail -s "zb-test" 你的邮箱
验证结果
- 登录接收邮箱(此处为 你的邮箱地址),查看是否收到测试邮件

- 若未收到,排查方向:
- 授权码是否正确(最常见问题)
- SMTP 服务是否已开启
- 服务器防火墙是否放行 25 端口(SMTP 默认端口)
- 查看邮件日志:
tail -f /var/log/maillog排查错误信息
二、配置 Zabbix 告警脚本目录
Zabbix 会通过指定目录下的脚本发送告警,需先创建脚本目录并配置权限。
1. 确认 Zabbix 告警脚本路径配置
编辑 Zabbix-Server 主配置文件,确认告警脚本目录(默认是 /usr/lib/zabbix/alertscripts):
[root@zabbix-server ~]# cd /usr/local
[root@zabbix-server local]# ls
bin etc games include lib lib64 libexec sbin share src
[root@zabbix-server local]# vim /etc/zabbix/zabbix_server.conf
# 找到以下配置项(确保未注释,若路径不同可修改):
AlertScriptsPath=/usr/lib/zabbix/alertscripts
2. 创建脚本目录并设置权限
Zabbix 服务默认以 zabbix 用户运行,需确保目录权限对 zabbix 用户可读可写:
# 创建脚本目录(若已存在则跳过)
[root@zabbix-server local]# mkdir -p /usr/lib/zabbix/alertscripts
# 赋予 zabbix 用户目录所有权
[root@zabbix-server local]# chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts
# 重启 Zabbix-Server 使配置生效
[root@zabbix-server local]# systemctl restart zabbix-server.service[root@zabbix-server local]# ll /usr/lib/zabbix/
总用量 0
drwxr-xr-x 2 zabbix zabbix 6 11月 6 13:42 alertscripts
# 验证 Zabbix 服务状态(确保重启成功)
[root@zabbix-server local]# systemctl status zabbix-server.service
● zabbix-server.service - Zabbix Server with MySQL DBLoaded: loaded (/usr/lib/systemd/system/zabbix-server.service; enabled; vendor preset: disabled)Active: active (running) since 四 2025-11-06 13:43:01 CST; 40s agoMain PID: 1473 (zabbix_server)CGroup: /system.slice/zabbix-server.service
.......
三、编写 Zabbix 邮件告警脚本
在脚本目录下创建邮件发送脚本 mailx.sh,脚本会接收 Zabbix 传递的 3 个参数(接收人邮箱、邮件主题、邮件内容)。
1. 创建脚本文件
[root@zabbix-server local]# cd /usr/lib/zabbix/alertscripts
[root@zabbix-server alertscripts]# vim mailx.sh
# 添加以下脚本内容(核心功能:接收 Zabbix 参数,调用 mailx 发送邮件并记录日志):
#!/bin/bash
# Zabbix 邮件告警脚本
# 参数说明:$1=接收人邮箱,$2=邮件主题,$3=邮件内容# 处理邮件内容中的换行符(Zabbix 传递的内容可能含 \r\n,统一替换为 \n)
messages=`echo $3 | tr '\r\n' '\n'`
# 处理邮件主题中的换行符
subject=`echo $2 | tr '\r\n' '\n'`# 调用 mailx 发送邮件,并将日志写入 /tmp/mailx.log(方便排查问题)
echo "${messages}" | mail -s "${subject}" $1 >> /tmp/mailx.log 2>&1
2. 设置脚本权限
脚本需具备执行权限,且归属 zabbix 用户,否则 Zabbix 无法调用:
# 赋予执行权限
[root@zabbix-server alertscripts]# chmod +x /usr/lib/zabbix/alertscripts/mailx.sh
# 确保权限归属 zabbix 用户
[root@zabbix-server alertscripts]# chown zabbix:zabbix /usr/lib/zabbix/alertscripts/mailx.sh
3. 创建日志文件并设置权限
脚本中指定了日志输出到 /tmp/mailx.log,需提前创建并赋予权限:
# 创建日志文件
[root@zabbix-server alertscripts]# touch /tmp/mailx.log
# 赋予 zabbix 用户写权限(否则无法写入日志)
[root@zabbix-server alertscripts]# chown -R zabbix:zabbix /tmp/mailx.log
4. 测试脚本发送邮件
手动执行脚本,验证是否能正常发送(模拟 Zabbix 调用场景):
# 格式:./mailx.sh 接收人邮箱 "邮件主题" "邮件内容"
[root@zabbix-server alertscripts]# ./mailx.sh 你的邮箱 "say hi" "This is test"
验证结果:

五、Zabbix 后台配置邮件告警媒介
脚本测试通过后,需在 Zabbix 后台配置「报警媒介类型」,让 Zabbix 能调用脚本发送告警。
1. 登录 Zabbix 管理后台
访问 Zabbix 前端地址http://192.168.100.110/zabbix.php?action=dashboard.view,使用管理员账号登录。
2. 创建报警媒介类型
管理->报警媒介类型->创建媒体类型


脚本参数
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
添加成功结果图:

3. 后续配置(告警触发必备)
邮件媒介类型创建后,还需完成以下两步,才能实现告警自动发送:
- 给 Zabbix 用户配置报警媒介:
- 进入「管理」→「用户」

- 点击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}
- 恢复操作

参数参照上一个告警的,把告警换成恢复即可
- 最后点击添加

- 动作添加完成

- 监视主页面仪表盘

- 测试-> 在被监控端关闭数据库服务
[root@centos7 ~ 14:28:38]# systemctl stop mysqld
- 等待一段时间后

- 检查接收告警邮件

- 恢复操作
[root@centos7 ~ 19:39:17]# systemctl restart mysqld
- 等待一段时间后
)
- 检查接收重启告警邮件以及恢复邮件

六、常见问题排查
- 脚本手动执行正常,但 Zabbix 不发送邮件:
- 检查脚本目录权限:
ls -ld /usr/lib/zabbix/alertscripts确保zabbix用户有执行权限 - 查看 Zabbix 日志:
tail -f /var/log/zabbix/zabbix_server.log排查是否有脚本调用错误 - 检查日志文件权限:
/tmp/mailx.log是否允许zabbix用户写入
- 检查脚本目录权限:
- 邮件发送失败,日志提示「authentication failed」:
- 确认
smtp-auth-password是 16 位客户端授权码,而非邮箱登录密码 - 重新生成 163 邮箱授权码,更新
/etc/mail.rc配置
- 确认
- 服务器无法连接 SMTP 服务器:
- 检查防火墙是否放行 25 端口(SMTP 默认端口):
firewall-cmd --list-ports | grep 25,若未放行则执行firewall-cmd --permanent --add-port=25/tcp && firewall-cmd --reload - 检查服务器是否能 ping 通
smtp.163.com,排除网络问题
- 检查防火墙是否放行 25 端口(SMTP 默认端口):
