原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://gzsamlee.blog.51cto.com/9976612/1866779
Zabbix宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定得文本模式,而解释器或编译器在遇到宏时会自动进行这一模式替换;
Zabbix基于宏保存预设文本模式,并且在调用时将其替换为其中的文本;
Zabbix有许多内置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.DESCRIPTION}、{TRIGGER.NAME}、
{TRIGGER.EVENTS.ACK}等
Zabbix为了更强的灵活性,zabbix还支持在全局、模板或主机级别使用用户自定义宏(user macro);
用户自定义宏要使用"{$MACRO}"这种特殊的语法格式;宏可以应用在item keys和descriptions、trigger名称和表达式、主机接口IP/DNS及端口、discovery机制的SNMP协议的相关信息中等;宏名称只能使用大写字母、数字及下划线
Zabbix宏的替换次序:首先是主机级别宏;其次是当前主机上一级模板中(直接链接至主机的模板)的宏,多个一级模板按其ID号排序;再接着是二级模板中的宏;而后依次类推;最后检查的是全局宏;zabbix如果无法查找到某主机定义使用的宏,则不会对其进行替换操作。要使用用户自定义宏,有以下两种途径:
-->全局宏:"Administrator-->General-->Macros"
-->主机或模板级别的宏:编辑相应的主机或模板属性即可
Macros使用示例:
-->在主机级别定义一个名为{$NETINLIMIT}的宏,以定义当前主机所接受的入站流量的合理次数:
![创建宏.png wKioL1gQWaOx_z7DAAB8q0wxARs850.png](http://image101.360doc.com/DownloadImg/2016/11/0317/83677809_1.png)
然后在主机的triggers中使用此宏:
![使用宏.png wKioL1gQWhWgdQ3nAACytOpURo8666.png](http://image101.360doc.com/DownloadImg/2016/11/0317/83677809_2.png)
用户自定义监控:
为什么要自定义KEY: 有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法。我们可以在客户端配置文件zabbix_angentd.conf里面配置UserParameter. 语法如下:
1
|
UserParameter=key,
command
|
用户自定义参数包含一个key和一个命令,key必须整个系统唯一,配置好之后,重启客户端。然后配置item,在key的位置填上我们自定义的key即可。 用户自定义参数里指定的脚本由zabbix agent来执行,最大可以返回512KB的数据.
用户自定义KEY实例:
简单点的命令示例:
1
2
|
UserParameter=
ping
,
echo
1
如果调用
ping
这个key,将会收到返回值1.
|
更复杂的命令示例:
1
2
|
UserParameter=mysql.
ping
,mysqladmin -uroot
ping
|
grep
-c alive
如果返回1表示MySQL运行中,如果返回0表示MySQL挂了
|
灵活的自定义key: 如下为灵活的用户自定义参数:
1
|
UserParameter=key[*],
command
|
参数 |
描述 |
Key |
唯一. [*]表示里面可以传递多个参数 |
Command |
需要执行的脚本,key的[]里面的参数一一对应$1到$9,一共9个参数。$0表示脚本命令. |
注意事项 1、如果需要使用命令行里面出现$2这种变量,那么你要使用两个$$2,例如awk ’{ print $$2 }’,之前就遇到过这个问题,不停的测试自己脚本输出正常,但是zabbix却拿不到数据,原来是出在这里。为了防止和参数冲突,所以zabbix做了这个规定。 2、zabbix禁止使用一些不安全的参数,如下:
1
|
\ ' ” ` * ? [ ] { } ~ $ ! & ; ( ) < > |
# @
|
3、从zabbix 2.0开始,zabbix返回文本数据可以是空格。
示例(1):获取内存空间大小
(1)配置被监控端agent配置文件如下:
1
2
|
# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=memory.
free
,
/usr/bin/free
|
awk
'/^Mem:/{print $4}'
|
重启被监控agent服务
1
|
# service zabbix-agent restart
|
(2)在服务器使用shell方式获取被监控端自定义监控项数据
1
2
|
# zabbix_get -s 172.16.100.4 -k "memory.free"
297712
|
(3)添加为被监控对象
![memoryfree.png wKiom1gSpHOBDIAEAADog5RD0rY543.png](http://image101.360doc.com/DownloadImg/2016/11/0317/83677809_3.png)
示例(2):自定义key传递多个参数:监控主机内存信息
(1)配置被监控端agent配置文件如下:
1
2
|
# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=memory.usage[*],
/bin/cat
/proc/meminfo
|
awk
'/^$1:/{print $$2}'
|
重启被监控agent服务
1
|
# service zabbix-agent restart
|
(2)在服务器使用shell方式获取被监控端自定义监控项数据
1
2
3
4
|
# zabbix_get -s 172.16.100.4 -k "memory.usage[Buffers]"
55980
# zabbix_get -s 172.16.100.4 -k "memory.usage[MemTotal]"
494224
|
(3)添加为被监控对象
![memoryfree1.png wKioL1gSxwPjlCVNAADp3StIY_c107.png](http://image101.360doc.com/DownloadImg/2016/11/0317/83677809_4.png)
![memoryfree2.png wKiom1gSxwPBqV1kAADpzeBLLRg571.png](http://image101.360doc.com/DownloadImg/2016/11/0317/83677809_5.png)
![memoryfree3.png wKioL1gSxwOx1LMnAADrWiR0_JY115.png](http://image101.360doc.com/DownloadImg/2016/11/0317/83677809_6.png)
![memoryfree4.png wKiom1gSxwTQvc6jAADsVGSPGEA238.png](http://image101.360doc.com/DownloadImg/2016/11/0317/83677809_7.png)
![memoryfree5.png wKioL1gSx8rys60JAAD0swjhxy0036.png](http://image101.360doc.com/DownloadImg/2016/11/0317/83677809_8.png)
实战示例:使用自定义监控nginx服务
(1)被监控端nginx服务开启status
1
2
3
4
5
6
7
|
# vim /etc/nginx/conf.d/default.conf
location
/status
{
stub_status on;
access_log off;
allow 172.16.0.0
/16
;
deny all;
}
|
重启nginx服务测试:
1
2
3
4
5
6
|
# service nginx restart
# curl http://172.16.100.4/status
Active connections: 1
server accepts handled requests
2 2 2
Reading: 0 Writing: 1 Waiting: 0
|
(2)配置被监控端agent配置文件如下:
1
2
3
4
5
6
7
8
|
# vim /etc/zabbix/zabbix_agentd.d/nginx.conf
UserParameter=Nginx.active[*],
/usr/bin/curl
-s
"http://$1:$2/status"
|
awk
'/^Active/ {print $NF}'
UserParameter=Nginx.reading[*],
/usr/bin/curl
-s
"http://$1:$2/status"
|
grep
'Reading'
|
cut
-d
" "
-f2
UserParameter=Nginx.writing[*],
/usr/bin/curl
-s
"http://$1:$2/status"
|
grep
'Writing'
|
cut
-d
" "
-f4
UserParameter=Nginx.waiting[*],
/usr/bin/curl
-s
"http://$1:$2/status"
|
grep
'Waiting'
|
cut
-d
" "
-f6
UserParameter=Nginx.accepted[*],
/usr/bin/curl
-s
"http://$1:$2/status"
|
awk
'/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$1}'
UserParameter=Nginx.handled[*],
/usr/bin/curl
-s
"http://$1:$2/status"
|
awk
'/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$2}'
UserParameter=Nginx.requests[*],
/usr/bin/curl
-s
"http://$1:$2/status"
|
awk
'/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$3}'
|
重启被监控agent服务
1
|
# service zabbix-agent restart
|
(3)在服务器使用shell方式获取被监控端自定义监控项数据
1
2
3
4
5
|
# zabbix_get -s 172.16.100.4 -k "Nginx.accepted[172.16.100.4,80]"
9
# ab -n 1000 -c 100
# zabbix_get -s 172.16.100.4 -k "Nginx.accepted[172.16.100.4,80]"
1013
|
(4)添加为被监控对象
![nginx001.png wKioL1gS_9_T7bnEAADg5p1_FLU808.png](http://image101.360doc.com/DownloadImg/2016/11/0317/83677809_9.png)
![nginx002.png wKiom1gS_9_AFKAIAADTMWIOTR4006.png](http://image101.360doc.com/DownloadImg/2016/11/0317/83677809_10.png)
![nginx003.png wKioL1gS_9_QBs4bAADXHY2yySY612.png](http://pubimage.360doc.com/wz/default.gif)
![nginx004.png wKiom1gS_-DwiJ3BAAC438n-FQA216.png](http://pubimage.360doc.com/wz/default.gif)
以上zabbix宏及zabbix用户自定义监控。
本文出自 “Opensamlee” 博客,请务必保留此出处http://gzsamlee.blog.51cto.com/9976612/1866779
|