Zabbix5 宏和自动发现宏

Zabbix5.0宏 MACRO

Zabbix宏变量可以让Zabbix配置变得更加简单明了,变量可以定义在主机、模板以及全局。

宏分类

系统宏变量:{MACRO}
用户定义宏变量:{$MACRO}
自动发现宏变量:{#MACRO}

宏变量函数:

regsub(,),区分大小写
iregsub(,),不区分大小写

宏变量函数测试:{{ITEM.VALUE}.regsub(“1”,“宏变量测试正常”)}

在这里插入图片描述
钉钉收到的报警信息如下所示,值1被替换成了"宏变量测试正常"
在这里插入图片描述

用户定义宏变量

主机宏:优先级最高
直接在主机上进行设置

宏:{$ZABBIX_HOST_ITEM},值:主机-宏变量

在这里插入图片描述
模板宏–优先级次之

宏:{$ZABBIX_HOST_ITEM},值:模板宏-监控项
宏:{$ZABBIX_GLOBAL_ITEM},值:模板宏-全局宏

在这里插入图片描述
主机有多个监控模板,宏变量会按照监控模板的id排序,模板越靠前那么宏的优先级越高(Template)。例如主机Zabbix server有两个模板,Template App Zabbix Server,Template OS Linux by Zabbix agent,假设这两个模板有相同名称的宏变量{$ZABBIX_GLOBAL_ITEM},那只有Template App Zabbix Server模板中的宏变量会生效。
在这里插入图片描述

全局宏变量
优先级最低
选择管理、一般、界面设置,点击宏查看用户自定义全局宏。
在这里插入图片描述
设置全局宏

宏:{$ZABBIX_GLOBAL_ITEM},值:全局宏名称

在这里插入图片描述
在监控项上应用宏变量
设置名称为:

主机宏:{$ZABBIX_HOST_ITEM},全局宏:{$ZABBIX_GLOBAL_ITEM}

在这里插入图片描述
显示如下图所示:

按照优先级从高到底:主机宏,模板宏,全局宏,因此
{$ZABBIX_HOST_ITEM}的值显示的是主机设置的值:主机-宏变量
{$ZABBIX_GLOBAL_ITEM}的值显示的是模板宏设置的值:模板宏-全局宏

在这里插入图片描述

自动发现宏

查看zabbix进程

#显示其他用户启动的进程(a)
#查看系统中属于自己的进程(x)
#启动这个进程的用户和它启动的时间(u)
ps aux|grep zabbix

在这里插入图片描述
查看zabbix设置

#去掉#号开头和空行
cat /etc/zabbix/zabbix_agentd.conf|grep -v ^#|grep -v ^$

LogFileSize=0
DenyKey=system.run[*]
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server
#将配置文件纳入配置管理中
Include=/etc/zabbix/zabbix_agentd.d/*.conf

设置zabbix_agent允许以root用户运行

vim /etc/zabbix/zabbix_agentd.conf
AllowRoot=1

重启zabbix_agent

systemctl restart zabbix-agent
ps aux|grep zabbix

设置自动发现配置文件,需要在Include=/etc/zabbix/zabbix_agentd.d/目录下,在配置文件中定义python脚本存放目录

vim /etc/zabbix/zabbix_agentd.d/userparameter_listen_port.conf
UserParameter=listen.ports.discovery,python3 /etc/zabbix/lldscripts/lld_listen_ports.py

监控端口的python脚本如下,
#!/usr/local/bin/python3为python路径

vim /etc/zabbix/lldscripts/lld_listen_ports.py

#!/usr/local/bin/python3
import os
import json

cmd = os.popen("""netstat -nltp|grep -v -w -|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=(',',':')))

python3 lld_listen_ports.py

在这里插入图片描述

设置自动发现

自动发现的键值需要与配置文件一致,这里为listen.ports.discovery
在这里插入图片描述
在这里插入图片描述
自动发现设置完成
在这里插入图片描述
手动验证定义的自动发现的监控项能否正常的获取值

# 通过rpm包安装zabbix_get
yum install zabbix-get-5.0.1-1.el7.x86_64.rpm 
# -s 是被监控主机的ip,-p是端口,-k是监控项的id
zabbix_get -s 127.0.0.1 -p 10050 -k "listen.ports.discovery"

自动发现监控项符合预期
在这里插入图片描述
创建监控项原型,名称为端口{#PORT}状态
在这里插入图片描述
在这里插入图片描述
监控项原型添加完成
在这里插入图片描述
创建触发器类型,点击添加,选择原型,添加刚才创建的监控项原型,表达式值替换成全局宏

#表达式值替换成全局宏
{Template App Zabbix Server:net.tcp.listen[{#PORT}].last()}=0
#全局宏替换0
{Template App Zabbix Server:net.tcp.listen[{#PORT}].last()}={$ZABBIX_GLOBAL_TRIGGER}

在这里插入图片描述
在这里插入图片描述
触发器添加完成
在这里插入图片描述
监控项已经自动完成
在这里插入图片描述
查看监控项数据的收集情况,点击最新数据
在这里插入图片描述
尝试触发报警,通过修改全局宏的值实现
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章