Zabbix宏,及自动发现宏的演示

文章目录

zabbix宏的概述

宏的作用是便于在模板、Items、Trigger中的引用

Zabbix有许多内置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.NAME}等

详细信息请参考官方文档: https://www.zabbix.com/documentation/3.0/manual/appendix/macros/supported_by_location

为了更强的灵活性,Zabbix还支持全局宏-模板宏-主机宏级别使用用户自定义宏(user macro),用户自定义宏要使用”{$MACRO}”这种特殊的语法格式, 宏的名称只能使用大写字母、数字及下划线

宏可以应用在item keys和descriptions、Trigger名称和表达式、主机接口IP/DNS及端口、discovery机制的SNMP协议的相关信息中等。

宏的替换次序

首先是主机级别的宏;其次是当前主机上一级模板中(直接链接至主机的模板)的宏,多个一级模板按其ID号排序;

再接着是二级模板中的宏;而后依次类推;最后检查的是全局宏;

Zabbix如果无法查找到某主机定义使用的宏,则不会对其进行替换操作。要使用用户自定义宏,有以下两种途径:

全局宏:Administration→General→Macros

主机或模板级别的宏:编辑相应主机或者模板的属性即可

宏的使用示例

在主机级别定义一个名为{$NETWORK_NUMBER}的宏,以定义当前主机所接受的网卡进口流量的合理大小(当然这里值根据具体情况来做,仅供一个参考)
《Zabbix宏,及自动发现宏的演示》
《Zabbix宏,及自动发现宏的演示》

宏的分类

  • 系统宏变量 {MACRO}
  • 用户自定义宏 {$MACRO}
  • 自动发现宏 {#MACRO}
  1. 系统宏变量 {MACRO}
  2. 用户自定义宏 {$MACRO}
    《Zabbix宏,及自动发现宏的演示》
  3. 自动发现宏 {#MACRO}
    《Zabbix宏,及自动发现宏的演示》
  • 宏变量函数
    1. regsub(,)
    2. iregsub(,)

自定义宏演示

  1. 自定义全域宏
    我们可以通过自定义全域宏来定义用户名密码,告警触发器的值等等,通过更改全域宏的值来高效的管理zabbix的触发器或者是用户名密码
    《Zabbix宏,及自动发现宏的演示》

  2. 自定义全域宏演示
    《Zabbix宏,及自动发现宏的演示》

  • 克隆之前的触发器,修改名称为Macro测试:{$TEST_GLOBAL_ITEM}

《Zabbix宏,及自动发现宏的演示》
《Zabbix宏,及自动发现宏的演示》
《Zabbix宏,及自动发现宏的演示》

  • 现在全域宏触发器{$TEST_GLOBAL_TRIGGER}的值是1,触发告警
    《Zabbix宏,及自动发现宏的演示》

  • 将全域宏触发器{$TEST_GLOBAL_TRIGGER}的值改为0,告警解除
    《Zabbix宏,及自动发现宏的演示》

用户自定义宏在监控模板中的使用

  • 在自定义模板中配置自定义宏{$TEST_TEMPLATE_ITEM},{$TEST_TEMPLATE_TRIGGER}

《Zabbix宏,及自动发现宏的演示》

  • 在模板中克隆一个监控项,修改其名称为模板宏测试:{$TEST_TEMPLATE_ITEM}

《Zabbix宏,及自动发现宏的演示》

  • 添加触发器
    《Zabbix宏,及自动发现宏的演示》

  • 修改全域宏{$TEXT_GLOBAL_TRIGGER}的值,模拟触发告警
    《Zabbix宏,及自动发现宏的演示》

模板宏变量的优先级大于全域宏

  • 一个监控项中连接了多个模板同时这几个模板中有同名称的宏变量,那么宏变量的值优先取编号靠前的模板宏变量值

优先级:主机宏 > 模板宏 > 全域宏

主机层面的宏变量验证

  • 1.给主机上添加宏变量{$TEST_HOST_ITEM},{$TEST_HOST_TRIGGER}

《Zabbix宏,及自动发现宏的演示》

  • 定义个item引用主机宏{$TEST_HOST_ITEM}

《Zabbix宏,及自动发现宏的演示》

  • 定义个trigger引用主机宏{$TEST_HOST_TRIGGER}
    《Zabbix宏,及自动发现宏的演示》

  • 测试效果
    lb-node1引用了该模板,其生效了上面定义的主机宏测试item
    《Zabbix宏,及自动发现宏的演示》
    还测试生效了主机宏trigger
    《Zabbix宏,及自动发现宏的演示》

  • 2.给全域宏、模板宏和主机宏都定义一个相同的{$TEST_PRIORITY_ITEM2}宏变量,观察到主机的宏变量优先级最高
    《Zabbix宏,及自动发现宏的演示》

  • 在模板里定义一个监控项,观测到模板里生效的是模板宏的值
    《Zabbix宏,及自动发现宏的演示》

  • 在主机的监控项上生效的是主机宏的值
    《Zabbix宏,及自动发现宏的演示》

自动发现宏的演示

配置低级别自动发现的步骤

  1. 配置自动发现监控项Discovery rules(根据脚本或命令生成低级别的自动发现宏变量)
  2. 定义item原型Item prototypes(主要利用低级别自动发现产生的变量,来动态的创建监控项、触发器、图形)

实战演示低级别自动发现的配置管理

  • 演示内容:自动发现服务器本地的监听的端口,并且将这些端口进行自动化的监控和告警
  1. 配置agent客户端
[root@lb-node2 /etc/zabbix]# vim zabbix_agentd.d/userparameter_ports.conf 

UserParameter=listen.ports.discovery,python /etc/zabbix/scripts/listen_ports.py

  1. 编写获取服务端口的脚本listen_ports.py
#!/usr/bin/python

import os
import json

cmd=os.popen("""netstat -lntp|grep -v rpc|awk -F "[ :]+" '{if($4 ~ /0.0.0.0/ || $4 ~ /127.0.0.1/) print $5}'""")

ports=[]
for port in cmd.readlines():
    r=port.strip()
    ports += [{'{#PORT}':r}]

print json.dumps({'data':ports},sort_keys=True,indent=4,separators=(',',':'))

  1. 配置测试的监控模板

《Zabbix宏,及自动发现宏的演示》

  1. 设置zabbix权限
    默认zabbix-agent使用zabbix用户启动,为了可以是zabbix执行脚本,我们修改他的权限,给他提升权限sudovi
  • 两种方法
    1. 提升sudo权限

      [root@lb-node2 ~]# visudo

      zabbix ALL=NOPASSWD ALL

    2. 修改zabbix配置,使zabbix-agent以root用户运行(修改配置后要重启agent)

    sed -i 's@# AllowRoot=0@AllowRoot=1@g' /etc/zabbix/zabbix_agentd.conf
    

    《Zabbix宏,及自动发现宏的演示》
    3. 还有一种方法:思路用root用户生成json格式的端口信息日志,然后zabbix-agent读取这个日志即可

  1. zabbix-server端测试获取agent端的端口信息

《Zabbix宏,及自动发现宏的演示》

  1. 自动发现规则已经创建

《Zabbix宏,及自动发现宏的演示》

  1. 创建监控项原型

《Zabbix宏,及自动发现宏的演示》
《Zabbix宏,及自动发现宏的演示》

  1. 创建监控项触发器原型

《Zabbix宏,及自动发现宏的演示》
《Zabbix宏,及自动发现宏的演示》
《Zabbix宏,及自动发现宏的演示》

  1. lb-node1主机上自动发现监听端口实现了《Zabbix宏,及自动发现宏的演示》
  • 并且监听的端口都有值了

《Zabbix宏,及自动发现宏的演示》

  • 测试关闭80端口,zabbix-agent触发告警
    《Zabbix宏,及自动发现宏的演示》
    原文作者:李在奋斗
    原文地址: https://blog.csdn.net/qq_31725371/article/details/100109465
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞