Zabbix 社区模板实战:基于 SNMP 监控 Fortinet Fortimail 60D 邮件安全网关

原创2026-10-14 22:09:401,624 阅读

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,落地前需要先确认两点:

  1. 设备侧开启 SNMP:在 FortiMail 管理界面启用 SNMP agent,配置 community string(或 SNMPv3 凭据)与允许访问的 Zabbix server/proxy 地址,并确保网络可达;
  2. 选择正确的模板版本:根据实际 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)的差异外,还有两处值得关注:

  1. 触发器表达式形态:5.0 使用相对引用(如 {avg(5m)}>{$CPU_USAGE_MAX}),5.4 起导出为绝对路径引用(如 avg(/Fortimail 60D/fmlSysCpuUsage,5m)>{$CPU_USAGE_MAX})。两者在各自版本中语义等价,但跨版本手工迁移时不能直接混用表达式语法;
  2. 实体 UUID 稳定:5.4 与 6.0 的模板 UUID 及各项 UUID 完全一致,说明两份文件源自同一次导出,升级 Zabbix 时可直接复用 6.0 版本文件,不会引入重复实体。

部署实践建议

综合上文分析,将模板落地到生产环境的推荐步骤为:

  1. 在 FortiMail 上启用 SNMP 并放行 Zabbix 采集源地址;
  2. 按 Zabbix 版本导入对应 5.0 XML、5.4 YAML 或 6.0 YAML;
  3. 在主机层将模板链接到 FortiMail 主机,配置 SNMP community/SNMPv3 凭据;
  4. 按业务容忍度覆盖四个阈值宏({$CPU_USAGE_MAX}、{$LOG_DISK_USAGE_MAX}、{$MAIL_DISK_USAGE_MAX}、{$MEMORY_USAGE_MAX},默认均为 90),并补定义 {$MAIL_LOG_USAGE_MAX} 以修复上文所述不一致;
  5. 观察 1-2 个采集周期,确认 fmlSys* 系列项有值、LLD 发现出真实队列后,再开启告警动作;
  6. 利用固件版本变更告警建立"版本漂移即审计"的流程,将升级窗口与告警确认机制绑定。

延伸阅读

登录后查看全文
community-templates