Zabbix 6.4 全栈部署与运维完全指南
版本 : Zabbix 6.4.21 / MySQL 8.0.45 / Ubuntu 24.04 / Apache 2.4.58 / PHP 8.3
部署日期 : 2026-05-31
架构: 1 × Zabbix Server + 3 × Zabbix Agent + MySQL 监控 + 钉钉告警
目录
- 架构设计
- 服务器信息
- [Zabbix Server 部署](#Zabbix Server 部署)
- [Zabbix Agent 批量部署](#Zabbix Agent 批量部署)
- [MySQL 监控配置](#MySQL 监控配置)
- 钉钉告警集成
- 配置参数详解
- 运维命令参考
- 错误与解决
- 附录
1. 架构设计
┌─────────────────────────────────────────────────────────────┐
│ Zabbix 监控架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ │
│ │ Zabbix Agent 2 │◄── node-2 (ecs-6b2c-0004) │
│ │ 183.87.37.69 │ 192.168.0.203 │
│ └────────┬────────┘ │
│ │ Agent:10050 │
│ ▼ │
│ ┌─────────────────────────────────────────────┐ │
│ │ Zabbix Server (ecs-6b2c-0002) │ │
│ │ 119.8.46.41 / 192.168.0.234 │ │
│ │ ┌───────────┐ ┌─────────┐ ┌──────────┐ │ │
│ │ │ Zabbix │ │ MySQL │ │ Apache │ │ │
│ │ │ Server │ │ 8.0.45 │ │ PHP 8.3 │ │ │
│ │ │ :10051 │ │ :3306 │ │ :80 │ │ │
│ │ └───────────┘ └─────────┘ └──────────┘ │ │
│ │ │ │ │ │ │
│ │ │ ┌─────────┴───────┐ │ │ │
│ │ │ │ zabbix DB │ │ │ │
│ │ │ │ (告警模板/数据) │ │ │ │
│ │ │ └─────────────────┘ │ │ │
│ │ │ │ │ │ │
│ │ AlertScript────────────► DingTalk │ │ │
│ │ (zabbix_dingtalk.py) Webhook │ │ │
│ └───────────────────────────────────────┘ │ │
│ ▲ ▲ │
│ │ Agent:10050 │ Agent:10050 │
│ ┌────────┴────────┐ ┌───────────┴─────────┐ │
│ │ Zabbix Agent 2 │ │ Zabbix Agent 2 │ │
│ │ node-1 │ │ node-3 │ │
│ │ ecs-6b2c-0003 │ │ ecs-6b2c-0001 │ │
│ │ 121.91.174.18 │ │ 119.8.50.194 │ │
│ │ 192.168.0.163 │ │ 192.168.0.158 │ │
│ │ ┌──────────┐ │ └───────────────────────┘ │
│ │ │ MySQL │ │ │
│ │ │ 8.0.45 │ │ │
│ │ │ :3306 │ │ │
│ │ └──────────┘ │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
数据流:
- Agent 采集指标 → 推送至 Zabbix Server (TCP:10051)
- Zabbix Server 写入 MySQL 数据库
- 触发器触发 → AlertManager 脚本 → DingTalk Webhook
- 管理员访问 Web 控制台 (Apache :80)
2. 服务器信息
| 主机名 | 公网 IP | 内网 IP | 角色 | 配置 |
|---|---|---|---|---|
| ecs-6b2c-0002 | 119.8.46.41 | 192.168.0.234 | Zabbix Server + MySQL + Web | 2vCPU / 4G / c6.large |
| ecs-6b2c-0003 | 121.91.174.18 | 192.168.0.163 | Zabbix Agent + MySQL 监控目标 | 2vCPU / 4G / c6.large |
| ecs-6b2c-0004 | 183.87.37.69 | 192.168.0.203 | Zabbix Agent | 2vCPU / 4G / c6.large |
| ecs-6b2c-0001 | 119.8.50.194 | 192.168.0.158 | Zabbix Agent | 2vCPU / 4G / c6.large |
所有服务器: Ubuntu 24.04 LTS, root/1qaz@WSX, 华为云可用区2
3. Zabbix Server 部署
3.1 添加 Zabbix 6.4 官方仓库
bash
wget -q https://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.4-1+ubuntu24.04_all.deb -O /tmp/zabbix-release.deb
dpkg -i /tmp/zabbix-release.deb
apt update -qq
3.2 安装核心组件
bash
DEBIAN_FRONTEND=noninteractive apt install -y \
zabbix-server-mysql \
zabbix-frontend-php \
zabbix-apache-conf \
zabbix-sql-scripts \
zabbix-agent \
mysql-server-8.0 \
php-mysql \
libapache2-mod-php
3.3 MySQL 数据库初始化
bash
# 创建 Zabbix 数据库和用户
mysql -u root -e "
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'zabbix_pass';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;
"
# 解决二进制日志函数限制
mysql -u root -e "SET GLOBAL log_bin_trust_function_creators = 1;"
# 导入 Zabbix Schema (约 170+ 表)
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz \
| mysql --default-character-set=utf8mb4 -uzabbix -pzabbix_pass zabbix
3.4 配置 zabbix_server.conf
文件 : /etc/zabbix/zabbix_server.conf
ini
DBName=zabbix # 数据库名,默认值
DBUser=zabbix # 数据库用户名,默认值
# DBHost=localhost # 注释表示使用 Unix Socket 连接
DBPassword=zabbix_pass # ⚠️ 生产环境需修改
详细参数说明见 [§7.1 zabbix_server.conf 详解](#§7.1 zabbix_server.conf 详解)。
3.5 配置 PHP 和 Web
文件 : /etc/zabbix/web/zabbix.conf.php
php
<?php
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = 'localhost';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = 'zabbix_pass';
$ZBX_SERVER = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = 'Zabbix Server';
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
文件 : /etc/php/8.3/apache2/php.ini
ini
date.timezone = Asia/Shanghai # 中国时区
3.6 启动服务
bash
systemctl restart zabbix-server zabbix-agent apache2
systemctl enable zabbix-server zabbix-agent apache2
3.7 验证
bash
# 检查 Zabbix Server 进程
systemctl status zabbix-server
# 检查端口监听
ss -tlnp | grep -E '10051|80'
# 访问 Web 控制台
curl -s -o /dev/null -w '%{http_code}' http://localhost/zabbix/
# 返回: 200
Web 访问 : http://119.8.46.41/zabbix
默认账号 : Admin / zabbix
4. Zabbix Agent 批量部署
4.1 安装 Zabbix Agent 2
在所有被监控节点(node-1/node-2/node-3)上执行:
bash
# 添加仓库
wget -q https://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.4-1+ubuntu24.04_all.deb
dpkg -i zabbix-release_6.4-1+ubuntu24.04_all.deb
apt update -qq
# 安装 Agent 2
apt install -y zabbix-agent2
4.2 配置 Agent
文件 : /etc/zabbix/zabbix_agent2.conf(关键参数)
ini
Server=119.8.46.41,192.168.0.234,127.0.0.1
# ⚠️ 必须同时包含 Zabbix Server 的公网和内网 IP
# 原因: Zabbix Server 通过内网 192.168.0.234 连接 Agent
# 如果只写公网 IP,内网连接会被 Agent 拒绝
ServerActive=119.8.46.41
# Agent 主动模式连接的 Server IP
Hostname=ecs-6b2c-0004
# 主机名,必须与 Zabbix Web 中配置的主机名一致
各节点 Hostname 分配:
| 节点 | SSH 别名 | Hostname | IP |
|---|---|---|---|
| node-1 | 121.91.174.18 | ecs-6b2c-0003 | 192.168.0.163 |
| node-2 | 183.87.37.69 | ecs-6b2c-0004 | 192.168.0.203 |
| node-3 | 119.8.50.194 | ecs-6b2c-0001 | 192.168.0.158 |
4.3 启动 Agent
bash
systemctl restart zabbix-agent2
systemctl enable zabbix-agent2
systemctl status zabbix-agent2
4.4 添加主机到 Zabbix
通过 Zabbix API 批量添加:
python
# 关键 API 调用
host.create({
"host": "ecs-6b2c-0003",
"name": "ecs-6b2c-0003 (Node-1)",
"interfaces": [{
"type": 1, # Zabbix Agent
"main": 1, # 主接口
"useip": 1, # 使用 IP 连接
"ip": "192.168.0.163",
"port": "10050"
}],
"groups": [{"groupid": "ECS Cluster"}],
"templates": [{"templateid": "Linux by Zabbix agent"}]
})
4.5 验证 Agent 连通性
bash
# 从 Zabbix Server 测试
zabbix_get -s 192.168.0.163 -k system.hostname
zabbix_get -s 192.168.0.203 -k system.hostname
zabbix_get -s 192.168.0.158 -k system.hostname
5. MySQL 监控配置
5.1 安装 MySQL
在 node-1 上:
bash
DEBIAN_FRONTEND=noninteractive apt install -y mysql-server-8.0
5.2 创建 Zabbix 监控用户
sql
CREATE USER 'zbx_monitor'@'localhost' IDENTIFIED BY 'zbx_monitor_pass';
GRANT USAGE, PROCESS, REPLICATION CLIENT ON *.* TO 'zbx_monitor'@'localhost';
FLUSH PRIVILEGES;
权限说明:
| 权限 | 用途 |
|---|---|
| USAGE | 基础连接权限 |
| PROCESS | 查看所有连接 (SHOW PROCESSLIST) |
| REPLICATION CLIENT | 查看复制状态 (SHOW SLAVE STATUS) |
5.3 配置 Zabbix Agent MySQL 插件
文件 : /etc/zabbix/zabbix_agent2.d/mysql.conf
ini
Plugins.Mysql.Default.Uri=tcp://127.0.0.1:3306
Plugins.Mysql.Default.User=zbx_monitor
Plugins.Mysql.Default.Password=zbx_monitor_pass
Plugins.Mysql.Timeout=5
5.4 添加 MySQL 模板
通过 Zabbix API:
python
host.update({
"hostid": "<node-1-host-id>",
"templates": [
{"templateid": "Linux by Zabbix agent"},
{"templateid": "MySQL by Zabbix agent"} # 追加 MySQL 模板
],
"macros": [
{"macro": "{$MYSQL.DSN}", "value": "tcp://127.0.0.1:3306"},
{"macro": "{$MYSQL.USER}", "value": "zbx_monitor"},
{"macro": "{$MYSQL.PASSWORD}", "value": "zbx_monitor_pass"}
]
})
5.5 验证 MySQL 指标
bash
# 重启 Agent 使插件生效
systemctl restart zabbix-agent2
# 测试 MySQL 指标采集
/usr/sbin/zabbix_agent2 -t mysql.ping # → 1 (连接正常)
/usr/sbin/zabbix_agent2 -t mysql.version # → 8.0.45-0ubuntu0.24.04.1
# 从 Zabbix Server 端验证
zabbix_get -s 192.168.0.163 -k mysql.ping # → 1
zabbix_get -s 192.168.0.163 -k mysql.version # → 8.0.45-0ubuntu0.24.04.1
MySQL 监控指标覆盖:
| 指标类别 | 典型 Key | 说明 |
|---|---|---|
| 连接状态 | mysql.ping |
连通性测试 |
| 版本信息 | mysql.version |
MySQL 版本号 |
| 查询统计 | mysql.questions.rate, mysql.qps |
每秒查询量 |
| 线程数 | mysql.threads_connected, mysql.threads_running |
连接/运行线程 |
| 缓冲池 | mysql.innodb.buffer_pool_hit_rate |
InnoDB 命中率 |
| 复制延迟 | mysql.slave_delay |
主从延迟 |
| 表锁 | mysql.table_locks_waited.rate |
表锁等待率 |
6. 钉钉告警集成
6.1 告警脚本
文件 : /usr/lib/zabbix/alertscripts/zabbix_dingtalk.py
python
#!/usr/bin/env python3
"""
Zabbix 钉钉告警脚本
通过 Zabbix Media Type 调用,发送 HMAC 签名消息到 DingTalk
"""
import sys, json, hmac, hashlib, base64, time
import urllib.request, urllib.parse
def send_dingtalk(webhook_url, secret, title, content):
timestamp = str(round(time.time() * 1000))
string_to_sign = f"{timestamp}\n{secret}"
hmac_code = hmac.new(
secret.encode('utf-8'),
string_to_sign.encode('utf-8'),
hashlib.sha256
).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
full_url = f"{webhook_url}×tamp={timestamp}&sign={sign}"
data = {
"msgtype": "markdown",
"markdown": {"title": title, "text": content}
}
req = urllib.request.Request(
full_url,
data=json.dumps(data).encode('utf-8'),
headers={'Content-Type': 'application/json'}
)
urllib.request.urlopen(req, timeout=10)
if __name__ == "__main__":
webhook_url = sys.argv[1] # 来自 Media Type 的 sendto
subject = sys.argv[2]
message = sys.argv[3]
SECRET = "SEC7acf1b961d10d3f476f2e9a793148482d75b627b61913c44833b49cc8c35e3a2"
markdown = f"""## 🚨 Zabbix Alert
{message}
---
**Time**: {time.strftime('%Y-%m-%d %H:%M:%S')}
"""
send_dingtalk(webhook_url, SECRET, subject, markdown)
权限设置:
bash
chmod 755 /usr/lib/zabbix/alertscripts/zabbix_dingtalk.py
chown zabbix:zabbix /usr/lib/zabbix/alertscripts/zabbix_dingtalk.py
6.2 配置 Media Type
通过 Zabbix API 创建 DingTalk 媒体类型:
python
mediatype.create({
"name": "DingTalk",
"type": 1, # Script 类型
"exec_path": "zabbix_dingtalk.py", # 脚本路径(相对于 alertscripts 目录)
"exec_params": '{ALERT.SENDTO}\n{ALERT.SUBJECT}\n{ALERT.MESSAGE}',
})
6.3 告警动作配置
动作名称 : DingTalk Alert Action
触发条件: 所有触发器 PROBLEM 状态
消息模板 (问题通知):
【问题】{HOST.NAME}: {TRIGGER.NAME}
**主机**: {HOST.NAME}
**问题**: {TRIGGER.NAME}
**严重性**: {TRIGGER.SEVERITY}
**时间**: {EVENT.DATE} {EVENT.TIME}
**详情**: {ITEM.NAME} = {ITEM.VALUE}
{TRIGGER.DESCRIPTION}
消息模板 (恢复通知):
【恢复】{HOST.NAME}: {TRIGGER.NAME}
**主机**: {HOST.NAME}
**恢复时间**: {EVENT.DATE} {EVENT.TIME}
**持续时间**: {EVENT.DURATION}
6.4 默认告警触发器
"Linux by Zabbix agent" 模板自带以下触发器:
| 触发器 | 条件 | 严重级别 |
|---|---|---|
| CPU utilization > 90% | system.cpu.util[,user] > 90 for 5m |
Warning |
| Disk I/O overload | I/O 拥塞 | Warning |
| Host high memory usage | vm.memory.size[pavailable] < 20 for 5m |
Warning |
| Lack of free swap | swap 空间不足 | Warning |
| Unavailable by ICMP | 不可达 | High |
| Host name was changed | Hostname 变更 | Info |
| System has been restarted | 系统重启 | Info |
"MySQL by Zabbix agent" 模板自带触发器(部分):
| 触发器 | 条件 | 严重级别 |
|---|---|---|
| MySQL is down | mysql.ping = 0 |
High |
| MySQL replication lag | 复制延迟 > 阈值 | Warning |
| MySQL service is down | 服务停止 | Disaster |
| MySQL InnoDB buffer pool too low | 缓冲池命中率过低 | Warning |
7. 配置参数详解
7.1 zabbix_server.conf 详解
文件路径 : /etc/zabbix/zabbix_server.conf
| 参数 | 默认值 | 说明 |
|---|---|---|
ListenPort |
10051 | Zabbix Server 监听端口。Agent (Passive) 和 Proxy 通过此端口上报数据。 |
SourceIP |
(空) | 出站连接的源 IP。在多网卡环境中可指定特定网卡。 |
LogFile |
/tmp/zabbix_server.log | 日志文件路径。生产环境建议改为 /var/log/zabbix/zabbix_server.log。 |
LogFileSize |
1 | 日志文件大小上限 (MB)。0=禁用自动轮转。 |
DebugLevel |
3 | 日志级别: 0=基本信息, 1=关键, 2=错误, 3=警告 (默认), 4=调试, 5=扩展调试。 |
DBHost |
localhost | MySQL 服务器地址。空值表示通过 Unix Socket 连接。 |
DBName |
zabbix | 数据库名。 |
DBSchema |
(空) | Schema 名称(仅 PostgreSQL)。 |
DBUser |
zabbix | 数据库用户名。 |
DBPassword |
(空) | 数据库密码。⚠️ 首次部署必须设置。 |
DBPort |
3306 | 数据库端口。0=使用默认端口。 |
StartPollers |
5 | 主动轮询进程数。控制 Agent (Passive) 采集的并发能力。每个进程一次处理一个检查。受监控主机多时可调高。 |
StartIPMIPollers |
0 | IPMI 监控进程数。 |
StartPollersUnreachable |
1 | 不可达主机重试进程数。 |
StartTrappers |
5 | Trapper 进程数。处理 Agent (Active)、Sender 和 Proxy 的主动推送数据。 |
StartPingers |
1 | ICMP Ping 进程数。 |
StartDiscoverers |
1 | 网络发现进程数。 |
StartHTTPPollers |
1 | Web 监控进程数。 |
StartTimers |
1 | 定时器进程数(维护期计算等)。 |
StartEscalators |
1 | 告警升级进程数。 |
CacheSize |
8M | 配置缓存。存储主机、监控项、触发器等配置。建议: 1000 台主机 → 64M+。 |
CacheUpdateFrequency |
60 | 配置缓存刷新间隔 (秒)。 |
StartDBSyncers |
4 | 数据库同步进程数。 |
HistoryCacheSize |
16M | 历史数据缓存。缓存采集到的数值。大监控量 → 128M+。 |
HistoryIndexCacheSize |
4M | 历史数据索引缓存。 |
TrendCacheSize |
4M | 趋势数据缓存(聚合数据)。 |
ValueCacheSize |
8M | 值缓存。用于触发器表达式计算。 |
性能调优建议 (4G 内存服务器):
ini
CacheSize=32M
HistoryCacheSize=32M
ValueCacheSize=16M
StartPollers=10
StartTrappers=5
7.2 zabbix_agent2.conf 详解
文件路径 : /etc/zabbix/zabbix_agent2.conf
| 参数 | 默认值 | 说明 |
|---|---|---|
Server |
127.0.0.1 | 白名单列表。允许哪些 Server/Proxy 从本 Agent 拉取数据 (Passive 模式)。多项用逗号分隔。支持 IP/CIDR。 |
ServerActive |
127.0.0.1 | 主动上报目标。Agent 主动向 Server 推送数据的地址 (Active 模式)。多个地址用逗号分隔。 |
Hostname |
(系统 hostname) | 主机标识名。必须与 Zabbix Web 中配置的 Host name 完全一致。用于 Active 模式的注册。 |
HostnameItem |
system.hostname | 用于自动注册的 Host name 来源。 |
HostMetadata |
(空) | 元数据,用于自动注册规则匹配。 |
HostMetadataItem |
(空) | 动态元数据,从 Agent Key 获取。 |
ListenPort |
10050 | Agent 监听端口。 |
ListenIP |
0.0.0.0 | Agent 监听地址。 |
RefreshActiveChecks |
120 | 主动模式检查项刷新间隔 (秒)。 |
BufferSend |
5 | 主动模式数据缓存发送间隔 (秒)。 |
BufferSize |
100 | 缓存最大条目数。 |
MaxLinesPerSecond |
20 | 日志监控每秒最大发送行数。 |
Timeout |
3 | 采集超时 (秒)。某些慢查询需调大。 |
ControlSocket |
/run/zabbix/agent.sock | 运行时控制 Socket 路径。 |
Include |
/etc/zabbix/zabbix_agent2.d/*.conf | 子配置文件加载路径。 |
LogFile |
/tmp/zabbix_agent2.log | 日志文件路径。 |
LogFileSize |
1 | 日志大小 MB。 |
DebugLevel |
3 | 日志级别 (同 Server)。 |
Plugins.PATH |
/usr/sbin/zabbix-agent2-plugin/ | 插件目录。 |
AllowKey |
(空) | 明确允许的 Key 列表 (白名单)。 |
DenyKey |
(空) | 明确禁止的 Key 列表。 |
MySQL 插件配置 (zabbix_agent2.d/mysql.conf):
| 参数 | 说明 |
|---|---|
Plugins.Mysql.Default.Uri |
MySQL 连接 URI。格式: tcp://host:port 或 unix:///path/to/socket。 |
Plugins.Mysql.Default.User |
MySQL 认证用户名。 |
Plugins.Mysql.Default.Password |
MySQL 认证密码。 |
Plugins.Mysql.Timeout |
连接超时 (秒), 范围 1-30。 |
Plugins.Mysql.CallTimeout |
请求超时 (秒)。 |
Plugins.Mysql.KeepAlive |
连接保持时间 (秒), 范围 60-900, 默认 300。 |
7.3 zabbix.conf.php 详解
文件路径 : /etc/zabbix/web/zabbix.conf.php
| 参数 | 说明 |
|---|---|
$DB['TYPE'] |
数据库类型: MYSQL 或 POSTGRESQL。 |
$DB['SERVER'] |
数据库地址。localhost 使用 Unix Socket。 |
$DB['PORT'] |
数据库端口。0=默认端口。 |
$DB['DATABASE'] |
数据库名称。 |
$DB['USER'] |
数据库用户。 |
$DB['PASSWORD'] |
数据库密码。 |
$DB['SCHEMA'] |
Schema (仅 PostgreSQL)。 |
$DB['ENCRYPTION'] |
是否启用 TLS 加密。 |
$DB['KEY_FILE'] |
TLS 私钥文件。 |
$DB['CERT_FILE'] |
TLS 证书文件。 |
$DB['CA_FILE'] |
CA 证书文件。 |
$DB['VERIFY_HOST'] |
验证数据库主机名。 |
$DB['DOUBLE_IEEE754'] |
使用 IEEE 754 双精度格式。true 可解决浮点数精度问题。 |
$ZBX_SERVER |
Zabbix Server 地址。localhost=本机。 |
$ZBX_SERVER_PORT |
Zabbix Server 端口。10051=默认。 |
$ZBX_SERVER_NAME |
显示在页面标题的 Zabbix Server 名称。 |
$IMAGE_FORMAT_DEFAULT |
图表默认格式。IMAGE_FORMAT_PNG 或 IMAGE_FORMAT_JPEG。 |
7.4 Apache 集成
文件 : /etc/apache2/conf-enabled/zabbix.conf
Zabbix 安装自动创建此文件。内容包含:
apache
Alias /zabbix /usr/share/zabbix # URL 路径映射
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
PHP 参数要求 (Zabbix 前端):
| PHP 参数 | 要求 | 建议值 |
|---|---|---|
max_execution_time |
≥ 300 | 300 |
memory_limit |
≥ 128M | 256M |
post_max_size |
≥ 16M | 32M |
upload_max_filesize |
≥ 2M | 16M |
max_input_time |
≥ 300 | 300 |
date.timezone |
必须设置 | Asia/Shanghai |
7.5 Zabbix API 概念
| 概念 | 说明 |
|---|---|
| Host | 被监控的主机,通过 Host name 唯一标识(与 Agent Hostname 参数对应) |
| Interface | 主机连接方式: type=1 (Agent), type=2 (SNMP), type=3 (IPMI), type=4 (JMX) |
| Template | 监控模板。包含 Items、Triggers、Graphs、Discovery Rules。挂载到 Host 后自动继承。 |
| Item | 监控项 。具体的指标采集 Key,如 system.cpu.util。 |
| Trigger | 触发器 。基于 Item 的逻辑表达式,如 system.cpu.util > 90。 |
| Action | 动作。Trigger 触发后执行的自动化操作(发消息、远程命令等)。 |
| Media Type | 媒介类型。消息通道: Email、SMS、Script、Webhook 等。 |
| Macro | 宏变量 。{$NAME} 格式,可全局/模板/主机级别覆盖。 |
8. 运维命令参考
8.1 服务管理
bash
# Zabbix Server
systemctl restart zabbix-server
systemctl status zabbix-server
journalctl -u zabbix-server -f # 实时日志
# Zabbix Agent
systemctl restart zabbix-agent2
systemctl status zabbix-agent2
journalctl -u zabbix-agent2 -f
# MySQL
systemctl restart mysql
systemctl status mysql
# Apache
systemctl restart apache2
systemctl status apache2
8.2 诊断命令
bash
# 测试 Agent 指标采集 (本地)
/usr/sbin/zabbix_agent2 -t system.hostname
/usr/sbin/zabbix_agent2 -t system.cpu.util
/usr/sbin/zabbix_agent2 -t mysql.ping
/usr/sbin/zabbix_agent2 -t mysql.version
# 从 Server 端获取 Agent 数据
zabbix_get -s 192.168.0.163 -k system.hostname
zabbix_get -s 192.168.0.163 -k mysql.ping
# 查看 Server 进程状态
ps aux | grep zabbix_server
# 查看数据库状态
mysql -uzabbix -pzabbix_pass -e "SELECT COUNT(*) FROM zabbix.hosts;"
mysql -uzabbix -pzabbix_pass -e "SELECT COUNT(*) FROM zabbix.items;"
8.3 性能查询 SQL
sql
-- 查看主机数量
SELECT COUNT(*) FROM hosts WHERE status=0;
-- 查看监控项数量
SELECT COUNT(*) FROM items WHERE status=0;
-- 查看触发器数量
SELECT COUNT(*) FROM triggers WHERE status=0;
-- 查看当前问题
SELECT h.name AS host, t.description AS trigger, p.clock
FROM problem p
JOIN triggers t ON p.objectid = t.triggerid
JOIN functions f ON t.triggerid = f.triggerid
JOIN items i ON f.itemid = i.itemid
JOIN hosts h ON i.hostid = h.hostid
WHERE p.r_eventid IS NULL
ORDER BY p.clock DESC LIMIT 20;
8.4 钉钉告警测试
bash
# 直接测试告警脚本
python3 /usr/lib/zabbix/alertscripts/zabbix_dingtalk.py \
"https://oapi.dingtalk.com/robot/send?access_token=090fba13440082ce1aab6f43a2cc47a7b9866521ddf94c7e9502ac100b87280c" \
"测试标题" \
"## 这是一条来自 Zabbix 的测试告警\n\n告警内容:系统 CPU 使用率超过 90%"
# 查看 Zabbix Server 告警相关日志
grep -i 'alert' /tmp/zabbix_server.log | tail -20
9. 错误与解决
| # | 错误现象 | 根因 | 解决方案 |
|---|---|---|---|
| 1 | ERROR 1419: You do not have the SUPER privilege and binary logging is enabled |
MySQL 8.0 默认启用 binary log,创建函数需 SUPER 权限 | SET GLOBAL log_bin_trust_function_creators = 1; |
| 2 | ERROR 1050: Table 'role' already exists |
前次导入中途失败,表已部分创建 | DROP DATABASE zabbix; 后重建并重新导入 |
| 3 | Zabbix Web 返回 500 Internal Server Error |
zabbix.conf.php 中的 heredoc 被 Shell 截断 |
改用 SFTP 上传 PHP 文件,避免 Shell 插值 |
| 4 | zabbix_get: Connection reset by peer |
Agent 的 Server 参数只配了公网 IP,Zabbix Server 通过内网 IP 连接被拒绝 |
Server=119.8.46.41,192.168.0.234,127.0.0.1 增加内网 IP |
| 5 | invalid parameter Plugins.Mysql.DSN at line 1: unknown parameter |
Zabbix Agent 2 的 MySQL 插件参数名格式不对 | 改为 Plugins.Mysql.Default.Uri / .Default.User / .Default.Password |
| 6 | Media Type API 创建失败: unexpected parameter "name" |
parameters 字段格式不正确 |
省略 parameters 字段,在 exec_params 中指定参数 |
| 7 | zabbix_agent2: activating 状态 |
启动后短时间内状态为 activating | 等待约 5 秒后变为 active(正常行为) |
10. 附录
10.1 文件清单
| 文件 | 路径 | 用途 |
|---|---|---|
| zabbix_server.conf | /etc/zabbix/zabbix_server.conf |
Zabbix Server 主配置 |
| zabbix_agent2.conf | /etc/zabbix/zabbix_agent2.conf |
Zabbix Agent 主配置 |
| mysql.conf | /etc/zabbix/zabbix_agent2.d/mysql.conf |
MySQL 插件配置 |
| zabbix.conf.php | /etc/zabbix/web/zabbix.conf.php |
Web 前端数据库连接 |
| zabbix_dingtalk.py | /usr/lib/zabbix/alertscripts/zabbix_dingtalk.py |
钉钉告警脚本 |
| php.ini | /etc/php/8.3/apache2/php.ini |
PHP 配置 |
10.2 关键凭证
| 系统 | 用户名 | 密码 | 用途 |
|---|---|---|---|
| Zabbix Web | Admin | zabbix | Zabbix 控制台登录 |
| MySQL root | root | (空) | 数据库管理 |
| MySQL zabbix | zabbix | zabbix_pass | Zabbix Server 连接 |
| MySQL 监控 | zbx_monitor | zbx_monitor_pass | Agent 采集 MySQL |
| SSH | root | 1qaz@WSX | 服务器管理 |
10.3 端口清单
| 端口 | 服务 | 方向 | 用途 |
|---|---|---|---|
| 80 | Apache | 入站 | Zabbix Web 前端 |
| 3306 | MySQL | 本地 | 数据库 |
| 10050 | Zabbix Agent | 入站 | Passive 模式数据采集 |
| 10051 | Zabbix Server | 入站 | Agent/Proxy 主动推送 |
10.4 钉钉 Webhook 配置
| 参数 | 值 |
|---|---|
| Webhook URL | https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxx00b87280c |
| 签名方式 | HMAC-SHA256 (加签) |
| Secret | xxxxxxx |
| 消息格式 | markdown |
10.5 本地工具脚本
| 脚本 | 路径 | 用途 |
|---|---|---|
| ssh_exec.py | D:\tools\ssh_exec.py |
SSH 批量执行 |
| sftp_upload.py | D:\tools\sftp_upload.py |
SFTP 文件上传 |
| zabbix_setup.py | D:\tools\zabbix_setup.py |
批量添加主机 |
| zabbix_mysql_setup.py | D:\tools\zabbix_mysql_setup.py |
MySQL 监控配置 |
| zabbix_dingtalk_setup.py | D:\tools\zabbix_dingtalk_setup.py |
钉钉告警配置 |
| zabbix_dingtalk.py | D:\tools\zabbix_dingtalk.py |
钉钉告警脚本(服务器版) |
| zabbix.conf.php | D:\tools\zabbix.conf.php |
Zabbix Web PHP 配置 |
文档版本 : v1.0
最后更新: 2026-05-31