自动化监控--zabbix中的Macros(宏)详解

本文深入探讨Zabbix宏的使用,包括宏的定义、语法、宏函数及用户宏的应用。介绍了宏如何提高监控效率,以及在监控项、触发器中的具体实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Zabbix支持许多在多种情况下使用的宏。宏是一个变量,由如下特殊语法标识:

{MACRO} 

根据在上下文中, 宏解析为一个特殊的值。有效地使用宏可以节省时间,并使Zabbix变地更加高效。

在一个的典型用途中,宏可以用于模板中。因此,模板的触发器可能命名为Processor load is too high on {HOST.NAME}。当这个模板应用与主机(如 Zabbix Server )时,并且当触发器展示在监控页面上时,触发器的名称讲解析为Processor load is too high on Zabbix server

宏可以在监控项键值参数中使用。宏只能用在监控项键值参数的一部分中,例如item.key[server_{HOST.HOST}_local] 。双引号参数不是必须的,因为Zabbix将处理任何模糊不清的特殊参数(如果这些参数存在于已解析的宏中)。

宏函数

宏函数能提供自定义宏值的功能。

有时候宏可能会解析为一个不一定易于使用的值。它可能很长,或包含你想提取的一个特殊感兴趣的子字符串。这在宏函数中是可以使用的。
宏函数的语法为:

{<macro>.<func>(<params>)}
其中:

<macro> - 这个参数为要定义的宏 (例如 {ITEM.VALUE});
<func> - 要应用的函数;
<params> - 以逗号分隔的函数参数列表。如果他们以 (空格), " 或者包含 ), ,这些符号开始,则参数必须要引用。
例如:

{{ITEM.VALUE}.regsub(pattern, output)}

用户宏

概述

除了支持开箱即用的宏之外,Zabbix 还支持更灵活的用户宏。

用户宏可以在全局、模板和主机级别进行定义。这些宏具有一个特殊的语法:

{$MACRO}

用户宏可被用于:

  • 监控项名称;
  • 监控项键值参数;
  • 触发器名称和描述;
  • 触发器表达式参数和常量
  • 许多其他位置

宏名称中允许使用以下字符:A-Z , 0-9 , _ , . 。

Zabbix 根据以下优先级解析宏:

  1. 主机级别的宏 (首先检查);
  2. 为主机的第一级别模板定义的宏(即,直接链接到主机的模板),按照模板 ID 来排序;
  3. 为主机的第二级别模板定义的宏,按照模板 ID 来排序;
  4. 为主机的第三级别模板定义的宏,按照模板ID来排序,等;
  5. 全局宏 (最后检查)。

换言之,如果一个主机不存在一个宏, Zabbix 将会尝试在级别递增的主机模板中找到它,如果仍然找不到,那么将会使用全局宏(如果全局宏存在的话)。

如果 Zabbix不能找到宏, 那么宏将不能被解析。
Administration → General → Macros
如果要定义用户宏,转到Zabbix的web页面的如下位置:

  • 对于全局宏,请访问 Administration → General → Macros;
    在这里插入图片描述
  • 对于主机和模板级别的宏,打开主机或模板属性并查看 宏 标签页面。
    3.
    注意:如果在模板的监控项或触发器使用用户宏,建议将该宏添加到模板,即使它被定义在全局级别上。这样的话,将模板导出至XML文件中,之后在其他系统中导入,那么在其他系统中使用也将会达到预期的使用效果。
全局和主机宏的常用案例
  • 利用具有主机特定属性的模板:密码、端口号、文件名称、正则表达式等;
  • 运用全局宏进行全局的一键配置更改或微调。

示例1
在 “Status of SSH daemon” 监控项键值中使用主机级别的宏:

net.tcp.service[ssh,,{$SSH_PORT}]

该监控项可以分配给多个主机,前提是在这些主机上定义了 {$SSH_PORT} 的值。
示例 2

在 “CPU load is too high” 触发器上使用主机级别的宏:

{ca_001:system.cpu.load[,avg1].last()}>{$MAX_CPULOAD}

这样的触发器将会在模板上创建,而不会在单个主机中编辑。

如果要使用数值作为函数参数
注意:如果要使用数值作为函数参数(例如,max(#3)),则在宏定义中要包含井号(hash mark)例如:SOME_PERIOD ⇒ #3

示例 3

在“CPU load is too high”触发器中使用了两个宏:

{ca_001:system.cpu.load[,avg1].min({$CPULOAD_PERIOD})}>{$MAX_CPULOAD}

请注意,宏可以用作触发器函数的参数,在这个示例中为 min() 。
注意:在触发器表达式中,如果引用参数或者常量,则用户宏将会解析。如果引用主机、监控项键值、函数、操作或其他触发器表达式的话,他们将不会解析。

------做运维之前很矫情的小年轻-----

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值