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
#去掉#号开头和空行
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}