用户参数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

 

  1. #描述:
  2. key:key的值在主机系统中必须是唯一的,其中*代表命令中接受的参数
  3. command:客户端系统中可执行的命令
  4.  
  5. #举例:
  6. UserParameter=ping[*],echo $1
  7. ping[0]:此时0就是*,也就是传入参数是0,$1也就是0,因此表达式将一直返回‘0’
  8. 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

 

  1. #!/bin/bash
  2. # author:Mr.sun
  3.  
  4. case $1 in
  5. free)
  6. echo "`free | awk 'NR==3{print $4}'`"
  7. ;;
  8. used)
  9. echo "`free | awk 'NR==3{print $3}'`"
  10. ;;
  11. *)
  12. echo "`free | awk 'NR==2{print $2}'`"
  13. ;;
  14. esac

image_1cu87ub1hjtno60rmr1p951u6i8g.png-41.3kB

 

4.3.2 测试脚本

chmod +x mem_check

chown zabbix.zabbix mem_check

sh mem_check

sh mem_check free

sh mem_check used

image_1cu87vt6m1tlp1m7ol68l13cj8t.png-38.1kB

 

4.3.3 后台自定义一个监控项的键值

cd /etc/zabbix/zabbix_agentd.d/

vim mem_check.conf

cat mem_check.conf

 

  1. UserParameter=mem.check[*],/server/scripts/mem_check $1

image_1cu8811kpoen1uprtlh1scp36j9a.png-24.8kB

 

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]"

image_1cu8836i3fe916db877ts81mva9n.png-17.7kB


image_1cu884loija9cnv1vq23mg1ig8a4.png-37.6kB

 

4.3.5 前台自定义一个监控项及触发器

过程略,此时我相信都已经会了。请自己尝试创建完整。

 

五,Agentd主动模式与被动模式

默认情况下,zabbix server会直接去每个agent上抓取数据,这对于agent来说,是被动模式,也是默认的一种获取数据的方式,但是,当zabbix server监控主机数量过多的时候,由server端去抓取agent上的数据,zabbix server会出现严重的性能问题,主要表现如下:

  1. Web操作很卡,容易出现502

  2. 图层断裂

  3. 开启的进程(Pollar)太多,即使减少item数量,以后加入一定量的机器也会有问题

 

所以,下面主要往两个优化方向考虑

  1. 用Proxy或者Node模式做分布式监控

  2. 调整Agentd为主动模式

 

5.1 Agentd的配置调整

修改zabbix_agentd.conf配置文件,注意是打开如下参数:

 

  1. ServerActive=192.168.0.220
  2. Hostname=192.168.0.220
  3. StartAgents=1

ServerActive是指定Agentd收集的数据往哪里发送,Hostname是必须要和zabbix web端添加主机时的主机名对应起来,这样zabbix server端接收到数据才能找到对应关系,这里为了兼容被动模式,没有把StartAgents设为0,如果一开始就是使用主动模式的话建议把StartAgents设为0,关闭被动模式。

 

5.2 zabbix Server端配置调整

如果开启了agent端的主动发送数据模式,需要在zabbix Server端修改如下两个参数,保证性能。

 

  1. StartPollers=10 #把这个zabbix Server主动收集数据进程减少一些。 StartTrappers=200
  2. #把这个负责处理Agentd推送过来的数据的进程开大一些。

 

5.3 调整模版

因此收集数据的模式发生了变化,因此需要把所有的监控项的类型由原来的“zabbix客户端”改成“zabbix客户端(主动式)”。

这样,只需要简单的几步,就完成了主动模式的切换,调整之后服务器不卡了,图层不裂了,进程也少了。

image_1csiqlggu1esn79j1cc51ssr11eu19h.png-61.5kB


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部