用户参数User parameters
4.1 概述
有时候当我们监控的项目在Zabbix预定义的key中没有定义时,这时候我们可以通过编写Zabbix的用户参数的方法来监控我们要求的项目item。形象一点说Zabbix代理端配置文件中的User
parameters就相当于通过脚本获取要监控的值,然后把相关的脚本或者命令写入到配置文件中的User
parameter中,然后Zabbix server读取配置文件中的返回值通过处理前端的方式返回给用户。
用户参数的语法
UserParameter=,
其中,Userparameter为关键字,key为用户自定义key名字可以随便起,为我们要运行的命令或者脚本。
一个简单的例子
UserParameter=ping,echo 1
代理程序将会永远的返回1,当我们在服务器端添加item的key为ping的时候。
稍微复杂的例子
UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin ping | grep -c alive
当我们执行mysqladmin -uroot ping命令的时候如果mysql存活要返回mysqld is alive,我们通过grep -c来计算mysqld is alive的个数,如果mysql存活着,则个数为1,如果不存活很明显mysqld is alive的个数为0,通过这种方法我们可以来判断mysql的存活状态。
当我们在服务器端添加item的key为mysql.ping时候,对于Zabbix代理程序,如果mysql存活,则状态将返回1,否则,状态将返回0。
4.2 让key接受参数
让key也接受参数的方法使item添加时更具备了灵活性,例如系统预定义key:vm.memory.size[],其中的mode模式就是用户要接受的参数,当我们填写为free时则返回的为内存的剩余大小,如果我们填入的为userd时这返回的是内存已经使用的大小。
相关语法
UserParameter=key[*],command
#描述:key:key的值在主机系统中必须是唯一的,其中*代表命令中接受的参数command:客户端系统中可执行的命令#举例:UserParameter=ping[*],echo $1ping[0]:此时0就是*,也就是传入参数是0,$1也就是0,因此表达式将一直返回‘0’ping[aaa]:此时aaa就是*,也就是传入参数是aaa,$1也就是aaa,因此表达式将一直返回‘aaa’
4.3 让我们自定义一个可以传递参数的监控项
我们做一个可以根据条件获取内存数值大小的监控项mem_check
当我们键值为mem_check[free]时,获取剩余可用内存大小
当我们键值为mem_check[used]时,获取实际占用内存大小
当我们键值为mem_check时,获取总内存大小
4.3.1 我们先制作一个获取数据的脚本
mkdir -p /server/scripts
cd /server/scripts/
vim mem_check
cat mem_check
#!/bin/bash# author:Mr.suncase $1 infree)echo "`free | awk 'NR==3{print $4}'`";;used)echo "`free | awk 'NR==3{print $3}'`";;*)echo "`free | awk 'NR==2{print $2}'`";;esac
4.3.2 测试脚本
chmod +x mem_check
chown zabbix.zabbix mem_check
sh mem_check
sh mem_check free
sh mem_check used
4.3.3 后台自定义一个监控项的键值
cd /etc/zabbix/zabbix_agentd.d/
vim mem_check.conf
cat mem_check.conf
UserParameter=mem.check[*],/server/scripts/mem_check $1
4.3.4 重启并在server端测试自定义的键值
/etc/init.d/zabbix-agent restart
zabbix_get -s 192.168.200.78 -p 10050 -k "mem.check"
zabbix_get -s 192.168.200.78 -p 10050 -k "mem.check[*]"
zabbix_get -s 192.168.200.78 -p 10050 -k "mem.check[free]"
zabbix_get -s 192.168.200.78 -p 10050 -k "mem.check[used]"
4.3.5 前台自定义一个监控项及触发器
过程略,此时我相信都已经会了。请自己尝试创建完整。
五,Agentd主动模式与被动模式
默认情况下,zabbix server会直接去每个agent上抓取数据,这对于agent来说,是被动模式,也是默认的一种获取数据的方式,但是,当zabbix server监控主机数量过多的时候,由server端去抓取agent上的数据,zabbix server会出现严重的性能问题,主要表现如下:
Web操作很卡,容易出现502
图层断裂
开启的进程(Pollar)太多,即使减少item数量,以后加入一定量的机器也会有问题
所以,下面主要往两个优化方向考虑
用Proxy或者Node模式做分布式监控
调整Agentd为主动模式
5.1 Agentd的配置调整
修改zabbix_agentd.conf配置文件,注意是打开如下参数:
ServerActive=192.168.0.220Hostname=192.168.0.220StartAgents=1
ServerActive是指定Agentd收集的数据往哪里发送,Hostname是必须要和zabbix web端添加主机时的主机名对应起来,这样zabbix server端接收到数据才能找到对应关系,这里为了兼容被动模式,没有把StartAgents设为0,如果一开始就是使用主动模式的话建议把StartAgents设为0,关闭被动模式。
5.2 zabbix Server端配置调整
如果开启了agent端的主动发送数据模式,需要在zabbix Server端修改如下两个参数,保证性能。
StartPollers=10 #把这个zabbix Server主动收集数据进程减少一些。 StartTrappers=200#把这个负责处理Agentd推送过来的数据的进程开大一些。
5.3 调整模版
因此收集数据的模式发生了变化,因此需要把所有的监控项的类型由原来的“zabbix客户端”改成“zabbix客户端(主动式)”。
这样,只需要简单的几步,就完成了主动模式的切换,调整之后服务器不卡了,图层不裂了,进程也少了。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
