Zabbix 社区模板实战:基于 SNMP 监控 Fortinet Fortimail 60D 邮件安全网关
Zabbix 社区模板实战:基于 SNMP 监控 Fortinet Fortimail 60D 邮件安全网关
本文面向 Zabbix 运维与邮件基础设施管理员,以 community-templates 仓库中的 Fortimail 60D 官方社区模板为蓝本,完整解析其宏、采集项、邮件队列低级别发现(LLD)与告警触发器的设计逻辑,并对照 5.4 版 YAML 配置 还原每个监控项的 SNMP OID 与取值细节。读完本文,你将能够独立完成 Fortinet Fortimail 60D 的 SNMP 接入、模板导入、阈值调优与告警验证,并能发现文档与配置文件之间的差异陷阱。
模板背景与仓库定位
community-templates 是 Zabbix 社区驱动的模板仓库,由社区成员创建与维护,覆盖从网络设备、服务器硬件到各类应用服务的监控集成。其中 Fortimail 60D 模板位于 Applications/Mail_servers/template_fortinet_fortimail,归类于邮件服务器监控场景,作者为 Mikhail Norenberg,模板在仓库根 README.md 的 Mail_servers 索引中登记为 "Fortimail 60D"。
该模板针对 Fortinet Fortimail 60D 邮件安全网关设计,通过标准 SNMP agent 采集设备自身的系统状态与邮件队列运行数据,覆盖 CPU、内存、磁盘、会话数、固件/杀毒库版本以及按队列拆分的邮件积压量,是一套"开箱即用"的邮件网关健康度监控方案。
多版本文件布局
模板目录下按 Zabbix 主版本分目录存放,当前仓库提供三个版本:
| 目录 | 配置文件格式 | 适用 Zabbix 版本 |
|---|---|---|
| 5.0 | template_fortinet_fortimail.xml |
Zabbix 5.0 |
| 5.4 | template_fortinet_fortimail.yaml |
Zabbix 5.4 |
| 6.0 | template_fortinet_fortimail.yaml |
Zabbix 6.0 |
其中 5.4 与 6.0 两份 YAML 的导出时间(2021-11-21T21:49:28Z)与模板 UUID(b6b5248f35a04486871a9efc2c6099cb)完全一致,说明 6.0 版本未做逻辑变更,仅声明了更高的兼容版本;5.0 则保留了更早的 XML 格式形态。
导入模板与前置条件
仓库根 README 给出的使用路径为三步:下载并导入模板 → 按配置要求调整模板 → 将模板链接到目标主机。针对 Fortimail 60D,落地前需要先确认两点:
- 设备侧开启 SNMP:在 FortiMail 管理界面启用 SNMP agent,配置 community string(或 SNMPv3 凭据)与允许访问的 Zabbix server/proxy 地址,并确保网络可达;
- 选择正确的模板版本:根据实际 Zabbix 版本选择 5.0 XML、5.4 YAML 或 6.0 YAML,在 Zabbix 前端"数据采集 → 模板 → 导入"中完成导入,然后在主机配置中链接该模板并填写 SNMP 接口(默认端口 161)。
模板导入后归属于 Templates 与 Templates SNMP 两个模板组,其下所有采集项统一打上 Application: Fortimail General 或 Application: Fortimail Mail Queue 标签(在 5.4/6.0 YAML 中表现为 tags,在 5.0 XML 中表现为 applications,语义一致)。
模板核心资产全景
以下三张表完整收录了 5.4 版 README 的全部模板资产,其中"键值(key)"与 OID 为后续深入解析的基础。
用户宏(Macros)
| 名称 | 描述 | 默认值 | 类型 |
|---|---|---|---|
{$CPU_USAGE_MAX} |
- | 90 |
Text macro |
{$LOG_DISK_USAGE_MAX} |
- | 90 |
Text macro |
{$MAIL_DISK_USAGE_MAX} |
- | 90 |
Text macro |
{$MEMORY_USAGE_MAX} |
- | 90 |
Text macro |
发现规则(Discovery rules)
| 名称 | 描述 | 类型 | 键值与附加信息 |
|---|---|---|---|
| Mail Queue | - | SNMP agent |
fmlMailQueueName,更新周期 30s |
采集项(Items collected)
| 名称 | 描述 | 类型 | 键值与附加信息 |
|---|---|---|---|
| Product Model | - | SNMP agent |
fmlSysModel,更新周期 1h |
| Product Firmware Version | - | SNMP agent |
fmlSysVersion,更新周期 1h |
| System Load | - | SNMP agent |
fmlSysSysLoad,更新周期 30s |
| Product Serial Number | - | SNMP agent |
fmlSysSerial,更新周期 1h |
| CPU Usage | - | SNMP agent |
fmlSysCpuUsage,更新周期 30s |
| Log Disk Usage | - | SNMP agent |
fmlSysLogDiskUsage,更新周期 30s |
| Mail Disk Usage | - | SNMP agent |
fmlSysMailDiskUsage,更新周期 30s |
| Operational Mode | - | SNMP agent |
fmlSysOpMode,更新周期 1h |
| Session count | - | SNMP agent |
fmlSysSesCount,更新周期 30s |
| Memory Usage | - | SNMP agent |
fmlSysMemUsage,更新周期 30s |
| Antivirus DB Version | - | SNMP agent |
fmlSysVersionAV,更新周期 1h |
| [{#FMLMAILQUEUENAME}] Mail Count | - | SNMP agent |
fmlMailQueueMailCount.[{#SNMPINDEX}],更新周期 30s,LLD |
| [{#FMLMAILQUEUENAME}] Mail Size | - | SNMP agent |
fmlMailQueueMailSize.[{#SNMPINDEX}],更新周期 30s,LLD |
需要特别说明的是:README 的"Triggers"章节标注为 "There are no triggers in this template",但实际导出的 YAML 配置 与 5.0 XML 中明确定义了 5 条触发器。这属于文档滞后于配置的情形,后续章节将以配置内容为准逐一拆解。
采集项与 SNMP OID 映射详解
模板的全部采集项均落在 Fortinet 私有 MIB 的 .1.3.6.1.4.1.12356.105 子树下(从 OID 结构可以推断,12356 为 Fortinet 企业号,105 为 FortiMail 系列专属子树),其中 .1 段承载系统级信息、.103 段承载邮件队列信息。结合 5.4 YAML 第 27-212 行 可还原出完整映射表:
| 采集项 | 键值 | SNMP OID | 值类型 | 单位 | 周期 |
|---|---|---|---|---|---|
| Product Model | fmlSysModel |
.1.3.6.1.4.1.12356.105.1.1.0 |
TEXT | - | 1h |
| Product Serial Number | fmlSysSerial |
.1.3.6.1.4.1.12356.105.1.2.0 |
TEXT | - | 1h |
| Product Firmware Version | fmlSysVersion |
.1.3.6.1.4.1.12356.105.1.3.0 |
TEXT | - | 1h |
| Antivirus DB Version | fmlSysVersionAV |
.1.3.6.1.4.1.12356.105.1.4.0 |
TEXT | - | 1h |
| Operational Mode | fmlSysOpMode |
.1.3.6.1.4.1.12356.105.1.5.0 |
FLOAT | - | 1h |
| CPU Usage | fmlSysCpuUsage |
.1.3.6.1.4.1.12356.105.1.6.0 |
FLOAT | % | 30s |
| Memory Usage | fmlSysMemUsage |
.1.3.6.1.4.1.12356.105.1.7.0 |
FLOAT | % | 30s |
| Log Disk Usage | fmlSysLogDiskUsage |
.1.3.6.1.4.1.12356.105.1.8.0 |
FLOAT | % | 30s |
| Mail Disk Usage | fmlSysMailDiskUsage |
.1.3.6.1.4.1.12356.105.1.9.0 |
FLOAT | % | 30s |
| Session count | fmlSysSesCount |
.1.3.6.1.4.1.12356.105.1.10.0 |
FLOAT | - | 30s |
| System Load | fmlSysSysLoad |
.1.3.6.1.4.1.12356.105.1.30.0 |
FLOAT | % | 30s |
采集频率设计的两类节奏
从配置可以看出模板作者对采集频率做了刻意区分:
- 30 秒高频采集:面向资源水位与会话量(CPU、内存、两块磁盘用量、System Load、Session count),用于支撑 5 分钟窗口的平均值告警,保证告警灵敏度;
- 1 小时低频采集:面向不常变化的静态信息(型号、序列号、固件版本、杀毒库版本、运行模式),降低无效轮询开销。
与资产清单(Inventory)的联动
型号、序列号、固件版本三个采集项在配置中分别设置了 inventory_link:MODEL、SERIALNO_A、SOFTWARE_FULL(见 5.4 YAML 第 117、145、184 行)。这意味着采集到的设备信息会自动回填到 Zabbix 主机的资产清单字段,便于在资产台账中直接呈现 FortiMail 的硬件与软件版本,而无需手工录入。由于这些项 trends: '0' 且为 TEXT 类型,它们只保留原始值、不参与趋势存储,符合静态属性的定位。
邮件队列低级别发现(LLD)机制
这是模板最具动态特性的部分:FortiMail 上的邮件队列数量不是固定的(不同域、不同方向的队列会动态增减),因此采用 SNMP 低级别发现 自动枚举队列。
发现规则如何工作
在 5.4 YAML 第 213-220 行 中,发现规则的关键配置为:
name: 'Mail Queue'
type: SNMP_AGENT
snmp_oid: 'discovery[{#FMLMAILQUEUENAME},1.3.6.1.4.1.12356.105.1.103.2.1.2]'
key: fmlMailQueueName
delay: 30s
其原理是:Zabbix 对 .1.3.6.1.4.1.12356.105.1.103.2.1.2 这一列 OID 执行 SNMP 遍历(walk),将该列每个实例的值提取为宏 {#FMLMAILQUEUENAME}(即队列名称),同时自动附带 {#SNMPINDEX}(实例在表中的索引序号)供原型项拼接完整 OID。于是每个真实存在的队列都会被"发现"出来并生成对应的监控项,无需人工维护队列清单。
两个原型项(Item prototypes)
发现规则下挂两个原型项,它们会为每个发现的队列实例化出"队列名 + 指标"的监控项:
| 原型项名称 | 键值 | 完整 OID | 含义 |
|---|---|---|---|
[{#FMLMAILQUEUENAME}] Mail Count |
fmlMailQueueMailCount.[{#SNMPINDEX}] |
.1.3.6.1.4.1.12356.105.1.103.2.1.3.{#SNMPINDEX} |
该队列当前积压邮件数 |
[{#FMLMAILQUEUENAME}] Mail Size |
fmlMailQueueMailSize.[{#SNMPINDEX}] |
.1.3.6.1.4.1.12356.105.1.103.2.1.4.{#SNMPINDEX} |
该队列积压邮件总大小 |
两个原型项均以 30s 周期采集,并统一标记 Application: Fortimail Mail Queue。通过"数量 + 体积"两个维度,运维人员可以同时判断队列是"邮件多"还是"单封邮件体积大",从而区分邮件洪泛攻击与正常业务积压两种场景。
触发器与告警逻辑解析
如前文所述,README 未列出触发器,但配置文件实际定义了 5 条触发器。以下内容均以 5.4 YAML 为准。
资源水位告警(4 条,优先级 AVERAGE)
| 触发器名称 | 表达式 | 优先级 | 说明 |
|---|---|---|---|
| High CPU Usage | avg(/Fortimail 60D/fmlSysCpuUsage,5m)>{$CPU_USAGE_MAX} |
AVERAGE | 5 分钟 CPU 均值超阈值 |
| High Log Disk Usage | avg(/Fortimail 60D/fmlSysLogDiskUsage,5m)>{$MAIL_LOG_USAGE_MAX} |
AVERAGE | 日志盘用量超阈值 |
| High Mail Disk Usage | avg(/Fortimail 60D/fmlSysMailDiskUsage,5m)>{$MAIL_DISK_USAGE_MAX} |
AVERAGE | 邮件盘用量超阈值 |
| High Memory Usage | avg(/Fortimail 60D/fmlSysMemUsage,5m)>{$MEMORY_USAGE_MAX} |
AVERAGE | 5 分钟内存均值超阈值 |
这组触发器统一采用 5 分钟平均值 vs 阈值宏 的比较方式(见 YAML 第 41-47 行 等),目的是平滑瞬时抖动,避免 CPU 或内存的偶发尖峰误报。告警描述统一附带 Last value: {ITEM.LASTVALUE1},便于收到告警时立即看到触发时刻的实际数值。
⚠ 配置一致性提醒:High Log Disk Usage 触发器的表达式引用的是 {$MAIL_LOG_USAGE_MAX}(见 YAML 第 64 行),而模板宏表中定义的却是 {$LOG_DISK_USAGE_MAX},二者不一致(5.0 XML 中同样存在该写法)。从源码结构看,这大概率是模板作者的一处笔误。实际部署时建议在模板或主机级补充定义 {$MAIL_LOG_USAGE_MAX} 宏(或将其值同步为 {$LOG_DISK_USAGE_MAX}),否则该触发器在求值时可能因宏未定义而无法正常触发。这是该模板落地时需要特别留意的已知坑点。
固件版本变更告警(1 条,优先级 INFO)
| 触发器名称 | 表达式 | 优先级 | 特殊设置 |
|---|---|---|---|
| Firmware has changed | (last(/Fortimail 60D/fmlSysVersion,#1)<>last(/Fortimail 60D/fmlSysVersion,#2))=1 and length(last(/Fortimail 60D/fmlSysVersion))>0 |
INFO | recovery_mode: NONE,manual_close: YES |
该触发器(见 YAML 第 189-199 行)通过比较最近两次采集的固件版本文本是否不同来判定"固件已变更",并额外要求当前值非空(length(...)>0)以排除初始化阶段的误判。它的定位是审计型告警:一旦触发即进入人工确认流程(manual_close: YES),描述文本明确提示 "Firmware version has changed. Ack to close",即升级固件或版本漂移时需要运维人员人工确认并关闭,不会自动恢复。
值映射:解读运行模式
Operational Mode(fmlSysOpMode)采集项返回的是数值型 OID,模板通过名为 Fortimail Operational Mode 的值映射(valuemap)将其翻译为可读文本(见 YAML 第 257-269 行):
| 原始值 | 映射文本 | 含义 |
|---|---|---|
1 |
Gateway | 网关模式(路由转发邮件流) |
2 |
Transparent | 透明模式(旁路串联) |
3 |
Server | 服务器模式(托管邮件域) |
启用值映射后,Latest data 与图表中直接显示 "Gateway / Transparent / Server" 而非裸数字。该配置项以 1h 周期采集,因为运行模式属于低频变更属性;运维人员可在主机迁移、模式切换后通过它确认设备当前工作形态。
版本差异与迁移要点
对比 5.0 XML 与 5.4/6.0 YAML,除文件格式(XML→YAML)与分组表达(applications→tags)的差异外,还有两处值得关注:
- 触发器表达式形态:5.0 使用相对引用(如
{avg(5m)}>{$CPU_USAGE_MAX}),5.4 起导出为绝对路径引用(如avg(/Fortimail 60D/fmlSysCpuUsage,5m)>{$CPU_USAGE_MAX})。两者在各自版本中语义等价,但跨版本手工迁移时不能直接混用表达式语法; - 实体 UUID 稳定:5.4 与 6.0 的模板 UUID 及各项 UUID 完全一致,说明两份文件源自同一次导出,升级 Zabbix 时可直接复用 6.0 版本文件,不会引入重复实体。
部署实践建议
综合上文分析,将模板落地到生产环境的推荐步骤为:
- 在 FortiMail 上启用 SNMP 并放行 Zabbix 采集源地址;
- 按 Zabbix 版本导入对应 5.0 XML、5.4 YAML 或 6.0 YAML;
- 在主机层将模板链接到 FortiMail 主机,配置 SNMP community/SNMPv3 凭据;
- 按业务容忍度覆盖四个阈值宏(
{$CPU_USAGE_MAX}、{$LOG_DISK_USAGE_MAX}、{$MAIL_DISK_USAGE_MAX}、{$MEMORY_USAGE_MAX},默认均为 90),并补定义{$MAIL_LOG_USAGE_MAX}以修复上文所述不一致; - 观察 1-2 个采集周期,确认
fmlSys*系列项有值、LLD 发现出真实队列后,再开启告警动作; - 利用固件版本变更告警建立"版本漂移即审计"的流程,将升级窗口与告警确认机制绑定。
延伸阅读
- 模板官方文档(本文章主体):Applications/Mail_servers/template_fortinet_fortimail/5.4/README.md
- 5.4 完整配置:template_fortinet_fortimail.yaml
- 6.0 兼容版本:template_fortinet_fortimail.yaml
- 5.0 XML 版本:template_fortinet_fortimail.xml
- 仓库使用与贡献指南:README.md
- 邮件服务器模板集合:Applications/Mail_servers