机房与数据中心

Zabbix 使用教程:添加主机、套用模板与配置告警

Zabbix 的日常使用是一个固定循环:被监控端装 agent 或打开 SNMP,在 Data collection → Hosts 添加主机并套用模板,用宏把阈值改成自己的标准,再用媒介、用户和动作把告警送到人,平时在 Problems、Latest data 和仪表盘里看问题与图形。下面按这个顺序走一遍,界面以 7.0 为准。

作者 顶联产品团队发布于 7 分钟阅读

Zabbix 使用教程可以浓缩成五步:让设备能被采集(装 agent、开 SNMP 或 IPMI)→ 添加主机并套用模板 → 用宏调整阈值 → 按需要补充触发器 → 配置媒介、用户和动作把告警发出去,之后的日常工作就是看问题、看图形,割接时设维护期。本文的菜单路径以 Zabbix 7.0 为准,6.0 及更早版本的主机、模板等配置在 Configuration 菜单下,位置不同但概念一样;中文界面的菜单结构与英文一致。先认识 7.0 里最常用的几个菜单:

菜单 用来做什么
Dashboards 仪表盘,放问题列表、图形、Top 排行等组件
Monitoring → Problems 当前未解决的问题,在这里确认和处理告警
Monitoring → Hosts / Latest data 按主机看状态、最新采集值和图形
Data collection → Hosts / Templates 添加主机、套用和编辑模板
Data collection → Maintenance 设置维护期,割接时屏蔽通知
Alerts → Actions / Media types 配置告警动作和通知方式
Users → Users / User groups 用户、通知地址和主机群组权限
Administration → Macros / Housekeeping 全局宏、数据保留期

第一步:让被监控端能被采集

Linux 服务器装 agent 2。 先添加与 server 同版本的官方仓库,再安装 agent 2(下面以 7.0 为例,server 是其他版本时把地址里的 7.0 换掉):

# Ubuntu 24.04
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update && sudo apt install -y zabbix-agent2

# Rocky Linux 9
sudo rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
sudo dnf install -y zabbix-agent2

修改 /etc/zabbix/zabbix_agent2.conf 里的三项:Server 写允许来采集的 server(或 proxy)地址,ServerActive 写主动上报的目标,Hostname 写这台主机在 Zabbix 里的名字,必须和后面添加主机时填的 Host name 完全一致。假设 server 是 10.0.0.5,这台主机叫 web01:

sudo sed -i -e 's/^Server=127.0.0.1$/Server=10.0.0.5/' \
            -e 's/^ServerActive=127.0.0.1$/ServerActive=10.0.0.5/' \
            -e 's/^Hostname=Zabbix server$/Hostname=web01/' /etc/zabbix/zabbix_agent2.conf
sudo systemctl restart zabbix-agent2 && sudo systemctl enable zabbix-agent2

# 只允许 server 访问 10050
# Ubuntu:
sudo ufw allow from 10.0.0.5 to any port 10050 proto tcp
# Rocky Linux 9:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="10050" protocol="tcp" accept'
sudo firewall-cmd --reload

回到 Zabbix server 上验证,返回 1 和一个百分数就说明通了:

sudo apt install -y zabbix-get        # Rocky 用 dnf install zabbix-get
zabbix_get -s 10.0.1.11 -k agent.ping
zabbix_get -s 10.0.1.11 -k 'vfs.fs.size[/,pused]'

交换机、UPS、PDU 打开 SNMP。 在设备上启用 SNMP 并设置只读团体名,条件允许优先用 SNMPv3。在 server 上先用命令行确认能读到设备名称(需要安装 snmp 工具包):

snmpget -v2c -c '你的只读团体名' 10.0.0.1 1.3.6.1.2.1.1.5.0

服务器 BMC 打开 IPMI over LAN。 给 Zabbix 单独建一个 User 权限的 BMC 账号,只读传感器就够用,然后用 ipmitool 确认能读到温度。ipmitool 默认按 Administrator 权限建立会话,用 User 账号测试时要加 -L USER:

ipmitool -I lanplus -L USER -H 10.20.0.15 -U zbxmon -P 'BMC密码' sdr type Temperature

别忘了 server 的 StartIPMIPollers 默认是 0,不改成大于 0,IPMI 接口永远采不到数据。

第二步:添加主机并套用模板

  1. 打开 Data collection → Hosts,点右上角 Create host。
  2. Host name 填主机名,和 agent 配置里的 Hostname 一致;Visible name 可以填带中文的显示名,例如“上海一号机房 B03-web01”。
  3. Templates 输入模板名选择,见下表。
  4. Host groups 至少选一个,例如按机房和用途建“IDC/SH01”“Linux servers”。权限是按主机群组分配的,这一步决定了谁能看到这台主机。
  5. Interfaces 点 Add,按采集方式添加 Agent(端口 10050)、SNMP(端口 161,选版本,v2c 的团体名默认引用宏 {$SNMP_COMMUNITY})或 IPMI(端口 623)接口。IPMI 还要在 IPMI 标签页填写认证算法、权限级别、用户名和密码。
  6. 多机房时在 Monitored by 里选择由哪台 proxy 或哪个 proxy 组采集。
  7. 点 Add 保存,一两分钟后列表里 Availability 列的 ZBX、SNMP 或 IPMI 图标变绿,就说明采集成功。

机房里常见设备对应的官方模板:

设备 接口 模板
Linux 服务器,被动模式 Agent Linux by Zabbix agent
Linux 服务器,主动模式或自动注册 不需要接口 Linux by Zabbix agent active
Windows 服务器 Agent Windows by Zabbix agent
华为交换机 SNMP Huawei VRP by SNMP
H3C 交换机 SNMP HP Comware HH3C by SNMP
其他品牌或不确定型号的网络设备 SNMP Network Generic Device by SNMP
Dell 服务器的 iDRAC SNMP Dell iDRAC by SNMP
任意品牌服务器的 BMC IPMI Chassis by IPMI
APC UPS SNMP APC UPS by SNMP
只关心通不通 任意接口 ICMP Ping(server 上要装 fping)

几百台 Linux 主机不要一台台加,用自动注册。 让 agent 用系统主机名注册,并带上一段主机元数据:

# /etc/zabbix/zabbix_agent2.conf
ServerActive=10.0.0.5
# 注释掉固定的 Hostname,改用系统主机名
# Hostname=Zabbix server
HostnameItem=system.hostname
HostMetadata=linux idc-sh01

然后在 Alerts → Actions → Autoregistration actions 里新建动作:条件写 Host metadata contains linux,操作依次是 Add host、Add to host groups(Linux servers)、Link templates(Linux by Zabbix agent active);再加一条条件 Host metadata contains idc-sh01 的动作,把主机放进“IDC/SH01”群组。之后新装系统时把这个 agent 配置一起下发,主机会自己出现在 Zabbix 里。

第三步:用宏调整阈值,别直接改模板

官方模板的阈值都写成宏,常用的默认值如下:

宏 默认值 含义
{$CPU.UTIL.CRIT} 90 CPU 使用率 5 分钟内持续高于该值告警
{$MEMORY.UTIL.MAX} 90 内存使用率上限
{$VFS.FS.PUSED.MAX.WARN}、{$VFS.FS.PUSED.MAX.CRIT} 80、90 文件系统使用率的两级阈值
{$IF.UTIL.MAX} 90 端口 15 分钟平均利用率上限,单位 %
{$IFCONTROL} 1 端口 down 是否告警,0 表示不告警
{$ICMP_LOSS_WARN} 20 ICMP 丢包率告警阈值,单位 %
{$ICMP_RESPONSE_TIME_WARN} 0.15 ICMP 平均响应时间阈值,单位秒

要改阈值,在主机的 Macros 标签页切到“Inherited and host macros”,找到对应的宏点 Change 改值即可。宏的生效顺序是:主机上的宏优先,其次是模板上的宏,最后是 Administration → Macros 里的全局宏。

带上下文的宏可以只对某个对象生效,这在机房里特别有用:

  • {$VFS.FS.PUSED.MAX.WARN:"/data"} 设为 95:只放宽 /data 分区的阈值,其他分区仍是 80;
  • {$IFCONTROL:"GigabitEthernet0/0/12"} 设为 0:这个端口 down 时不告警。欠费停机时会主动关闭客户服务器所在的交换机端口,这类端口不设成 0,每次停机都会产生一条“Link down”。

不要直接改官方模板:以后导入新版模板时,你的修改会被覆盖。确实要增删监控项时,在 Data collection → Templates 里把模板 Clone 一份,改自己的副本。

第四步:自己写触发器

模板没覆盖的判断,在 Data collection → Hosts 里点主机行的 Triggers,再点 Create trigger。要填的主要是名称、严重级别(Not classified、Information、Warning、Average、High、Disaster)和表达式。7.0 的表达式格式是 函数(/主机名/监控项键名,参数) 加比较条件:

想判断什么 表达式 说明
CPU 连续 5 分钟高于 85% min(/web01/system.cpu.util,5m)>85 用 min:5 分钟内每个值都超过才报,过滤瞬间尖峰
/data 分区使用率超过 95% last(/web01/vfs.fs.dependent.size[/data,pused])>95 键名来自 Linux 模板对文件系统的自动发现
主机 10 分钟没有数据 nodata(/web01/agent.ping,10m)=1 适合主动模式的主机
最近 3 次 ping 都不通 max(/core-sw01/icmpping,#3)=0 #3 表示最近 3 个值,不是 3 分钟
出口端口入方向 5 分钟持续超过 900 Mbps min(/core-sw01/net.if.in[ifHCInOctets.25],5m)>900000000 25 是端口的 SNMP 索引,可以在 Latest data 里查到对应的键名;表达式里的后缀 M 按 1024×1024 计算,写 900M 并不等于 900 Mbps,按 bps 写完整数字更准确
服务器刚重启过 last(/web01/system.uptime)<10m 运行时间小于 10 分钟

三个让告警更干净的设置:

  • 恢复表达式:在 OK event generation 选 Recovery expression,例如问题表达式 min(/web01/system.cpu.util,5m)>85,恢复表达式 max(/web01/system.cpu.util,5m)<70,CPU 在 85% 附近来回波动时不会反复告警和恢复。
  • 依赖关系:在 Dependencies 标签页,让机柜里每台服务器的“不可达”触发器依赖接入交换机的 ICMP 不可达触发器。交换机断了,只收到交换机这一条,而不是整柜几十条。
  • 标签:给触发器加 scope:availability、team:network 一类标签,后面按标签分派通知。

第五步:把告警发出去

告警送达要三样东西都配好:媒介类型(怎么发)、用户的媒介(发到哪)、动作(什么情况下发给谁)。

1. 邮件。 在 Alerts → Media types 打开内置的 Email:填写 SMTP 服务器、端口(SSL/TLS 一般 465,STARTTLS 一般 587)、发件地址、认证方式;Message templates 标签页里已经带好 Problem、Problem recovery 等消息模板,按需要改写即可;内置媒介默认是停用的,记得启用,再用列表里的 Test 发一封测试邮件。

2. 企业微信群机器人。 新建一个类型为 Webhook 的媒介,参数保留 To={ALERT.SENDTO}、Subject={ALERT.SUBJECT}、Message={ALERT.MESSAGE},脚本如下。新建的媒介没有消息模板,要在 Message templates 标签页至少添加 Problem 和 Problem recovery 两种,否则这个媒介发不出通知:

var p = JSON.parse(value);
var req = new HttpRequest();
req.addHeader('Content-Type: application/json');
var resp = req.post(
    'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=' + encodeURIComponent(p.To),
    JSON.stringify({msgtype: 'text', text: {content: p.Subject + '\n' + p.Message}})
);
if (req.getStatus() !== 200 || JSON.parse(resp).errcode !== 0) {
    throw 'WeCom send failed: ' + resp;
}
return 'OK';

机器人的 key 填在用户媒介的“Send to”里,不要写进脚本,也不要贴到工单和聊天记录里;Reports → Action log 的收件人一栏会显示这个值,只给需要的人开放查看权限。上线前用媒介列表里的 Test 实际发一条,确认群里能收到。钉钉自定义机器人的地址是 https://oapi.dingtalk.com/robot/send?access_token=…,消息体同样是 msgtype: text 格式,机器人安全设置里必须在自定义关键词、加签、IP 地址段中至少选一种;飞书机器人地址形如 https://open.feishu.cn/open-apis/bot/v2/hook/…,消息体写成 {"msg_type":"text","content":{"text":"…"}}。

3. 给用户添加媒介。 在 Users → Users 打开用户,Media 标签页点 Add:选媒介类型,填收件地址或机器人 key,When active 写生效时段,例如 1-5,09:00-18:00 表示工作日白天;下面勾选要接收的严重级别。用户所在的用户组必须对主机所在的群组至少有只读权限,否则收不到这台主机的告警。

4. 创建动作。 在 Alerts → Actions → Trigger actions 新建:

  • 条件:Trigger severity is greater than or equals Average,并且 Host group equals IDC/SH01;
  • 操作:Default operation step duration 设为 30m;第 1 步发给“网络值班”用户组,媒介选 All;第 2 步发给“运维主管”,并在这一步加上条件 Event is not acknowledged,即 30 分钟内没人确认才升级;
  • 恢复操作:Notify all involved,问题恢复时通知所有收到过告警的人。

保持 Pause operations for suppressed problems 勾选,维护期内的问题就不会发通知。收不到告警时,到 Reports → Action log 查每条通知的发送结果和报错。

日常查看与维护

  • 处理问题:Monitoring → Problems 按严重级别和主机群组筛选,点问题行的 Update 可以确认(Acknowledge)并留言、修改严重级别、临时抑制到某个时间点,触发器允许时还可以手动关闭。确认过的问题不会再触发“未确认才升级”的那一步。
  • 看最新数据和图形:Monitoring → Latest data 按主机、名称或标签筛选监控项,数值型监控项右侧有 Graph 链接,文本型有 History。时间范围用页面右上角的选择器,可以快速切到最近 1 小时、最近 7 天或自定义时段。
  • 做一个机房总览仪表盘:在 Dashboards 里新建仪表盘,放 Problems by severity(各群组问题数)、Top hosts(按 CPU 或端口流量排序)、Graph(出口端口进出流量)和 Honeycomb(主机健康状态)几个组件,值班大屏一页就能看全。
  • 割接设维护期:Data collection → Maintenance → Create maintenance period,选择带数据采集(With data collection)还是不采集,设置生效时间和周期(例如 One time only,周六 01:00 起持续 2 小时),选中要割接的主机或群组。带数据采集的维护期内问题照常记录,但会被标记为已抑制,不发通知。
  • 下架主机:服务器下架时先把主机状态设为 Disabled,停止采集但保留历史数据;确认不再需要这些数据后再删除主机。

在管理系统里怎么落地

Zabbix 告诉你哪台主机、哪个端口出了问题,处理时还要知道它接在哪、怎么远程进去。在 Toplink DCIM 的服务器列表里可以直接看到每台机器接在哪台交换机的哪个端口、端口速率和 VLAN,端口的开关、VLAN 修改和限速也能在网页上完成(见交换机管理);服务器系统卡死、Zabbix 报 agent 不可达时,可以通过 IPMI 远程管理打开控制台查看屏幕,必要时远程重启。上文提到的欠费停机端口也是一个衔接点:在 DCIM 里关闭端口之前,先把 Zabbix 里这个端口的 {$IFCONTROL} 上下文宏设为 0,恢复服务后再删掉这条宏,值班人员就不会被预期内的端口 down 打扰。

常见问题

主机的 ZBX 图标变红,提示连不上 agent 怎么办?

先在 Zabbix server 上执行 zabbix_get -s 主机IP -k agent.ping。超时多半是被监控主机的防火墙没放行 10050;连接被拒说明 agent 没启动;如果提示 Check access restrictions in Zabbix agent configuration,是 agent 配置文件的 Server= 里没有写 server 的地址。改完 agent 配置要重启 agent。

一台主机能同时套多个模板吗?

可以,例如服务器同时套 Linux by Zabbix agent 和 Chassis by IPMI。但多个模板里不能有键名相同的监控项,否则保存时会报冲突;同类的模板只选一个,比如被动模式和主动模式的两个 Linux 模板不要同时套。

怎么一次修改几十台主机?

在 Data collection → Hosts 勾选主机,点列表下方的 Mass update,可以批量增删模板、修改主机群组、宏、IPMI 设置和资产清单字段。数量再多,可以用 Zabbix API 的 host.massupdate,或者把主机配置导出成 YAML 修改后再导入。

想看看在你的机房里怎么用?

从一次产品演示开始,梳理你的业务链路。

查看价格
服务热线 400-112-2951

让我们聊聊你的 IDC 业务

扫码添加企业微信,预约产品演示或申请试用。

Toplink 企业微信二维码

长按保存或使用企业微信 / 微信扫描

也可致电
400-112-2951
Telegram
@TopLink88