Zabbix宏和自定义key

zabbix struggling 1929次浏览 0个评论
文章目录

一,宏的基本说明

宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进 行这一模式替换,类似地,zabbix基于宏保存预设文本模式,并且在调用时将其替换为其中的文本,zabbix有许多内置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.DESCRIPTION}、{TRIGGER.NAME}、{TRIGGER.EVENTS.ACK}等。

为了更强的灵活性,zabbix还支持在全局、模板或主机级别使用用户自定义宏(user macro)

用户自定义宏要使用“{$MACRO}”这种特殊的语法格式

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

宏的名称只能使用大写字母、数字及下划线



宏替换次序

首先是主机级别的宏;

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

再接着是二级模板中的宏;而后依次类推;

最后检查的是全局宏;

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

全局宏:“Administration → General → Macros”

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

宏使用时,需要现在主机级别定义,而后在主机的triggers中使用此宏。

二,自定义key

有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法。我们可以在客户端配置文件zabbix_angentd.conf里面配置UserParameter.

语法如下:

UserParameter=,<command></command>

用户自定义参数包含一个key和一个命令,key必须整个系统唯一,配置好之后,重启客户端。然后配置item,在key的位置填上我们自定义的key即可。

参数 描述
Key 唯一. [*]表示里面可以传递多个参数
Command 需要执行的脚本,key的[]里面的参数一一对应$1到$9,一共9个参数。$0表示脚本命令.

配置使用自定义 key

1,首先在配置文件中定义用户参数,此处定义 memory.free

[root@localhost zabbix]# vim zabbix_agentd.conf 
UserParameter=memory.free,/usr/bin/free -m | awk '/^Mem:/ {print $4}'

[root@localhost zabbix]# service zabbix-agent  restart  #重启服务

2,在服务器端进行抓取数据:

[root@node1 zabbix]# zabbix_get -s 192.168.1.117  -k "memory.free"
35

3,在网页中添加一个item,并将key设置为memory.free,单位需要乘以1024(Use custom multiplier 1024):

key-定义item(1)

一个简单的参数就这样定义了。用户自定义的参数中还可以对其调用传递参数:

[root@localhost zabbix]# vim zabbix_agentd.conf 

UserParameter=memory.usage[*],/bin/cat  /proc/meminfo | awk '/^$1/ {print $$2}'    #*表示可以对其传递多个参数,$$2表示使用命令执行结果中的参数

[root@node1 zabbix]# zabbix_get -s 192.168.1.117  -k "memory.usage[MemFree]"
34108
[root@node1 zabbix]# zabbix_get -s 192.168.1.117   -k "memory.usage[MemTotal]"
1030492
[root@node1 zabbix]# zabbix_get -s 192.168.1.117   -k "memory.usage[Buffers]"
169924

然后在网页中分别添加几个item,memory.free,memory.total,memory.buffer,memory.cache:

重新定义memory-item(2)

继续定义memory-total(3)

然后定义memory-buffers(4)

定义mem-cached(5)

继续定义graph:

定义graph(7)

trigger和action自己可以按实际情况进行定义,此处不再定义,下面使用自定义key来监控nginx,首先安装nginx并启用状态页面:

nginx status 开启方法:

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf 
server {
	...
	location /status {
		stub_status on;
		access_log off;
		allow 192.168.1.116; 
		allow 127.0.0.1;
		deny all;
	}
}

重启服务并进行访问:

[root@localhost ~]# curl http://192.168.1.117/status
Active connections: 1 
server accepts handled requests
 1 1 1 
Reading: 0 Writing: 1 Waiting: 0 

然后在zabbix_agent目录下新建nginx.conf文件,并添加 :

[root@localhost ~]# 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}'


状态页面各项数据的意义:

active connections – 当前 Nginx 正处理的活动连接数。

serveraccepts handled requests — 总共处理了的连接数 , 成功创建的握手次数 (证明中间没有失败的 ), 总共处理的请求数。

reading — nginx 读取到客户端的 Header 信息数。

writing — nginx 返回给客户端的 Header 信息数。

waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading + writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。

[root@localhost ~]# zabbix_get -s 192.168.1.117 -k "Nginx.accepted[192.168.1.117,80]"
2

然后在web中定义accepts和reading,active。定义accepts ,handled, requests数据展示时需要后值减去前值,剩下的都不需要:

定义nginx-accepted(8)

定义nginx-reading(9)

定义nginx-active(10)

定义nginx-graph(11)

此时,各item已定义完成。

三,总结

使用自定义key进行监控时,需要自己写命令或者脚本,zabbix定义脚本放置的位置为/usr/lib/zabbix/externalscripts,也可以自己定义一个习惯使用的目录。


DevOps-田飞雨 》》转载请注明源地址
喜欢 (0)or分享 (0)
发表我的评论
取消评论
*

表情 贴图 加粗 链接 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址