【云运维】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 源码编译需依赖 gcccmakebison 等工具,执行以下命令批量安装:

bash 复制代码
# 安装基础编译依赖
[root@centos7 ~]# yum install -y ncurses ncurses-devel bison cmake
# 安装 C/C++ 编译器
[root@centos7 ~]# yum install -y gcc gcc-c++
2. 创建 MySQL 专用用户

为避免权限混乱,创建无登录权限的专用用户 mysql

bash 复制代码
[root@centos7 ~]# useradd -s /sbin/nologin mysql
3. 解压安装包

假设已下载以下两个安装包到本地(可通过官网获取):

  • MySQL 源码包:mysql-5.7.17.tar.gz
  • Boost 依赖包:boost_1_59_0.tar.gz

执行解压命令并移动到指定目录:

bash 复制代码
# 解压 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. 进入源码目录
bash 复制代码
[root@centos7 local]# cd /opt/mysql-5.7.17/
2. CMake 编译配置(核心步骤)

执行以下命令进行编译参数配置,参数说明见下方表格

bash 复制代码
[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,否则错误会重复出现:

    bash 复制代码
    rm -rf CMakeCache.txt
  • 确保 Boost 版本为 1.59.0,MySQL 5.7 不兼容更高或更低版本。

3. 编译与安装

使用 make 命令编译(-j2 表示启用 2 个线程加速,可根据 CPU 核心数调整,如 -j4):

bash 复制代码
[root@centos7 mysql-5.7.17]# make -j2 
[root@centos7 mysql-5.7.17]# make install
  • 编译过程耗时较长(取决于服务器配置),耐心等待即可。
  • 若编译中出现依赖缺失报错,补充安装对应依赖后,删除 CMakeCache.txt 重新编译。
四、初始化配置
1. 设置目录权限

将 MySQL 安装目录及数据目录权限赋予 mysql 用户,避免权限不足:

bash 复制代码
[root@centos7 mysql-5.7.17]# chown -R mysql:mysql /usr/local/mysql/
2. 配置 my.cnf 文件

创建并编辑 MySQL 主配置文件 /etc/my.cnf,直接复制以下内容(优化后的基础配置):

bash 复制代码
[root@centos7 mysql-5.7.17]# vim /etc/my.cnf
# 如果里面已经有内容了,删掉后再粘下面的
ini 复制代码
[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

保存后设置配置文件权限:

bash 复制代码
[root@centos7 mysql-5.7.17]# chown mysql:mysql /etc/my.cnf
3. 配置环境变量

将 MySQL 二进制命令路径添加到系统环境变量,方便全局调用:

bash 复制代码
# 写入环境变量配置文件
[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 表示不生成临时密码,直接设置空密码):

bash 复制代码
[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 管理,复制服务文件到系统目录:

bash 复制代码
[root@centos7 mysql]# cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
2. 启动 MySQL 服务
bash 复制代码
# 重新加载 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. 设置开机自启
bash 复制代码
[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,生产环境请设置强密码):

bash 复制代码
[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 测试
bash 复制代码
[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 distribution

Copyright (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),执行以下授权命令:

sql 复制代码
# 授权 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 告警信息通过邮件实时推送
前置准备
  1. 163 邮箱账号(已完成实名认证)
  2. 开启邮箱「SMTP 服务」和「客户端授权码」(关键步骤,见下方说明)
如何获取 163 邮箱客户端授权码?
  1. 登录 163 邮箱网页版 → 进入「设置」→「POP3/SMTP/IMAP」
  2. 开启「SMTP 服务」(允许第三方客户端通过 SMTP 发送邮件)
  3. 点击「生成授权码」,按提示完成验证(如短信验证),获取一串 16 位授权码(不是邮箱登录密码,后续配置用,记得把授权码保存下来)
一、安装并配置 mailx 邮件服务
1. 在zabbix-server服务器上安装邮箱服务

mailx 是 Linux 系统自带的邮件客户端,若未安装,执行以下命令安装:

bash 复制代码
[root@zabbix-server ~]# yum install mailx -y
2. 配置 mailx 连接 163 邮箱

编辑 mailx 全局配置文件 /etc/mail.rc,在文件末尾添加 163 邮箱的 SMTP 配置:

bash 复制代码
# 注意网易邮箱需要开启客户端授权码进行第三方登录
[root@zabbix-server ~]# vim /etc/mail.rc

添加以下内容(替换为自己的邮箱和授权码):

ini 复制代码
# 发送邮件的邮箱地址(必须与 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 时踩坑:

bash 复制代码
# 格式:echo "邮件内容" | mail -s "邮件主题" 接收邮箱
echo "hello world" | mail -s "zb-test" 你的邮箱

验证结果

  1. 登录接收邮箱(此处为 你的邮箱地址),查看是否收到测试邮件
  1. 若未收到,排查方向:
    • 授权码是否正确(最常见问题)
    • SMTP 服务是否已开启
    • 服务器防火墙是否放行 25 端口(SMTP 默认端口)
    • 查看邮件日志:tail -f /var/log/maillog 排查错误信息
二、配置 Zabbix 告警脚本目录

Zabbix 会通过指定目录下的脚本发送告警,需先创建脚本目录并配置权限。

1. 确认 Zabbix 告警脚本路径配置

编辑 Zabbix-Server 主配置文件,确认告警脚本目录(默认是 /usr/lib/zabbix/alertscripts):

bash 复制代码
[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 用户可读可写:

bash 复制代码
# 创建脚本目录(若已存在则跳过)
[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 DB
   Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; enabled; vendor preset: disabled)
   Active: active (running) since 四 2025-11-06 13:43:01 CST; 40s ago
 Main PID: 1473 (zabbix_server)
   CGroup: /system.slice/zabbix-server.service
.......
三、编写 Zabbix 邮件告警脚本

在脚本目录下创建邮件发送脚本 mailx.sh,脚本会接收 Zabbix 传递的 3 个参数(接收人邮箱、邮件主题、邮件内容)。

1. 创建脚本文件
bash 复制代码
[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 无法调用:

bash 复制代码
# 赋予执行权限
[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,需提前创建并赋予权限:

bash 复制代码
# 创建日志文件
[root@zabbix-server alertscripts]# touch /tmp/mailx.log
# 赋予 zabbix 用户写权限(否则无法写入日志)
[root@zabbix-server alertscripts]# chown -R zabbix:zabbix /tmp/mailx.log
4. 测试脚本发送邮件

手动执行脚本,验证是否能正常发送(模拟 Zabbix 调用场景):

bash 复制代码
# 格式:./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. 创建报警媒介类型

管理->报警媒介类型->创建媒体类型

脚本参数

bash 复制代码
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

添加成功结果图:

3. 后续配置(告警触发必备)

邮件媒介类型创建后,还需完成以下两步,才能实现告警自动发送:

  1. 给 Zabbix 用户配置报警媒介
  • 进入「管理」→「用户」
  • 点击Admin进入
  • 切换到「报警媒介」标签
  • 点击「添加」
  • 类型选择刚刚创建的Mail-Test
  • 填写接收告警的邮箱,设置告警级别(如「警告及以上」),设置完成后点击添加
  • 点击「更新」保存(一定要做)
  1. 配置动作(触发告警后执行脚本)
  • 配置->动作->Trigger actions
  • 如果已经有内容了,先删除后创建
  • 创建动作
  • 定义操作

配置参数:

bash 复制代码
默认接收人 : {TRIGGER.STATUS}:{TRIGGER.NAME}
默认信息:
告警主机:{HOST.NAME}
告警 IP:{HOST.IP}
告警时间:{EVENT.DATE}-{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}:{ITEM.VALUE}
事件 ID:{EVENT.ID}
  • 恢复操作

参数参照上一个告警的,把告警换成恢复即可

  • 最后点击添加
  • 动作添加完成
  • 监视主页面仪表盘
  1. 测试-> 在被监控端关闭数据库服务
bash 复制代码
[root@centos7 ~ 14:28:38]# systemctl stop mysqld
  • 等待一段时间后
  • 检查接收告警邮件
  • 恢复操作
bash 复制代码
[root@centos7 ~ 19:39:17]# systemctl restart mysqld
  • 等待一段时间后

)

  • 检查接收重启告警邮件以及恢复邮件
六、常见问题排查
  1. 脚本手动执行正常,但 Zabbix 不发送邮件
    • 检查脚本目录权限:ls -ld /usr/lib/zabbix/alertscripts 确保 zabbix 用户有执行权限
    • 查看 Zabbix 日志:tail -f /var/log/zabbix/zabbix_server.log 排查是否有脚本调用错误
    • 检查日志文件权限:/tmp/mailx.log 是否允许 zabbix 用户写入
  2. 邮件发送失败,日志提示「authentication failed」
    • 确认 smtp-auth-password 是 16 位客户端授权码,而非邮箱登录密码
    • 重新生成 163 邮箱授权码,更新 /etc/mail.rc 配置
  3. 服务器无法连接 SMTP 服务器
    • 检查防火墙是否放行 25 端口(SMTP 默认端口):firewall-cmd --list-ports | grep 25,若未放行则执行 firewall-cmd --permanent --add-port=25/tcp && firewall-cmd --reload
    • 检查服务器是否能 ping 通 smtp.163.com,排除网络问题
相关推荐
☆璇2 小时前
【Linux】Reactor反应堆模式
linux·运维·服务器·网络
半桔2 小时前
【IO多路转接】epoll 高性能网络编程:从底层机制到服务器实战
linux·运维·服务器·网络·php
刘某的Cloud2 小时前
openvswitch-ovs-流表
linux·运维·openstack·系统·neutron·openvswitch
Yiiz.2 小时前
RHCE练习
运维
物联网软硬件开发-轨物科技2 小时前
【轨物方案】轨物科技低压综保智慧运维方案:以AIoT重塑电气安全与能效新范式
运维·科技·安全
恒创科技HK2 小时前
香港100G高防服务器的防御力如何?
运维·服务器
Hoxy.R2 小时前
iSCSI 磁盘扩容后节点不刷新容量的问题解决(StarWind + Linux)
linux·运维·服务器
lytao1232 小时前
使用 dnsmasq 搭建本地 DNS 服务器完整指南
运维·服务器·dns
海棠AI实验室2 小时前
AI代发货(DropShopping)革命:构建自动化电商帝国终极指南
运维·人工智能·自动化