什么是宏
宏(Macros)是 Zabbix 中的变量机制,用于在配置中动态替换值。使用宏可以提高配置的灵活性和可维护性。
内置宏
Zabbix 提供了大量内置宏,可以在告警、触发器、监控项等场景中使用。
常用内置宏
| 宏 | 说明 |
|---|---|
{HOST.NAME} | 主机名 |
{HOST.IP} | 主机 IP 地址 |
{HOST.DNS} | 主机 DNS 名称 |
{ITEM.NAME} | 监控项名称 |
{ITEM.KEY} | 监控项键值 |
{ITEM.VALUE} | 监控项当前值 |
{ITEM.LASTVALUE} | 监控项最新值 |
{TRIGGER.NAME} | 触发器名称 |
{TRIGGER.STATUS} | 触发器状态 |
{TRIGGER.SEVERITY} | 触发器严重程度 |
{EVENT.NAME} | 事件名称 |
{EVENT.ID} | 事件 ID |
{EVENT.TIME} | 事件发生时间 |
{EVENT.DATE} | 事件发生日期 |
{EVENT.DURATION} | 事件持续时间 |
{EVENT.RECOVERY.TIME} | 事件恢复时间 |
{EVENT.RECOVERY.DATE} | 事件恢复日期 |
告警相关宏
| 宏 | 说明 |
|---|---|
{ALERT.SENDTO} | 告警接收人 |
{ALERT.SUBJECT} | 告警主题 |
{ALERT.MESSAGE} | 告警消息内容 |
时间宏
Zabbix 支持使用 {$NOW} 宏获取当前时间,并支持自定义时间格式。
时间格式示例
# 标准日期格式
{$NOW:%Y-%m-%d} # 输出示例:2023-10-05
# 紧凑日期格式
{$NOW:%Y%m%d} # 输出示例:20231005
# 欧洲日期格式
{$NOW:%d/%m/%Y} # 输出示例:05/10/2023
# 完整时间格式
{$NOW:%Y-%m-%d %H:%M:%S} # 输出示例:2023-10-05 14:30:00时间格式说明
| 格式符 | 说明 | 示例 |
|---|---|---|
%Y | 四位年份 | 2023 |
%m | 两位月份 | 01-12 |
%d | 两位日期 | 01-31 |
%H | 两位小时(24小时制) | 00-23 |
%M | 两位分钟 | 00-59 |
%S | 两位秒 | 00-59 |
自定义宏
1. 全局宏
在 Administration → General → Macros 中定义,对所有主机有效。
2. 模板级宏
在模板中定义,对关联该模板的所有主机有效。
3. 主机级宏
在主机配置中定义,仅对该主机有效。
4. 定义方式
{$MACRO_NAME} = macro_value命名规则:
- 必须以
$开头 - 使用大写字母
- 使用下划线分隔单词
- 示例:
{$MYSQL_USER}、{$SNMP_COMMUNITY}
使用场景
1. 告警消息模板
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME} ({HOST.IP})
故障时间: {EVENT.TIME} {EVENT.DATE}
故障级别: {TRIGGER.SEVERITY}
故障详情: {ITEM.NAME}: {ITEM.VALUE}
故障ID: {EVENT.ID}2. 恢复消息模板
故障已恢复
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME}
恢复时间: {EVENT.RECOVERY.TIME} {EVENT.RECOVERY.DATE}
持续时间: {EVENT.DURATION}3. 监控项键值参数
vfs.fs.size[{$FS_PATH},free]4. 触发器表达式
{Template OS Linux:system.cpu.util[,iowait].last()}>{$CPU_IOWAIT_MAX}宏的优先级
当同名宏在不同级别定义时,优先级如下(从高到低):
- 主机级宏
- 模板级宏(按模板链接顺序,后链接的优先级高)
- 全局宏