【Zabbix监控教程】使用UserParameter自定义key配置教程

TangLu 未命名 2017-07-13 22256 0

Zabbix虽然自带了许多Key,能满足大多数的监控需求。但是真正在生产上还是有很多不足的,比如想监控Nginx连接数、MySQL的状态信息都没有Key能实现,所以Zabbix还提供了一种自定义Key来实现这种需求。这就是Zabbix的UserParameter功能。

一、创建UserParameter

1、要创建UserParameter的话需要在agentd.conf中进行配置,这里有2种方法来修改配置文件:一是直接修改agentd.conf;二是zabbix_agentd.d/下新建conf文件。如果选择这种方式,一定要确保agentd.conf配置文件中对应的Include选项是开启的,如图:

userparameter1.png


2、在配置文件中增加UserParameter的配置。以一个简单示例来进行说明:定义了一个名为os.mem.used的key,然后这个key通过后面指定的命令或脚本来获取需要的值:

UnsafeUserParameters=0  #是否允许自定义脚本传递特殊字符作为参数,通常不用开
#UserParameter=key,command  #这是一个参考格式
UserParameter=os.mem.used,free -m | awk '/^Mem/ {print $3}'  #新增一个key叫作os.mem.used用于查看系统已用内存


UserParameter还可以通过脚本来取得多个key的值:
UserParameter=mysql.status[*],/usr/local/zabbix/scripts/check_mysql.sh $1
UserParameter=check_port[*],/usr/local/zabbix/scripts/check_port.sh -H 127.0.0.1 -p $1

#[*]代表key接受任意个参数,这些参数就是在web端要明确写出来的参数,也是后面命令或脚本中接受的参数,用$1,$2来表示第几个参数。如果command中的命令本身带有$1等信息(如awk命令),需要写为$$1


实际运用中通常是建立一个shell脚本,用case语句根据用户输入的$1来监控指定的内容,Zabbix自带的MySQL模板就是一个最好的参考例子mysqlzabbix.jpg


二、验证自定义Key

1、重启Zabbix客户端

2、使用zabbix_get命令看能否获取数据,该命令只能用于获取agent监控方式的key,不能获取sample check、JMX等其他监控方式的key数据

zabbix_get -s 192.168.1.100 -k os.mem.used


3、如果第2步正常的话就可以在Zabbix Web端对需要监控的主机新增Item了,Key的名字就是UserParameter里设置的,这里自然就是os.mem.used了。如果获取不到数据的话说明key配置有错,在Web界面会提示Not supported,根据提示去做修改。对于设置有错的Key,Zabbix默认是10分钟去取一次数据,这个可以在Administration-->General-->Other中修改。


三、参考实例监控SVN主从版本号是否一致

1、在zabbix定义一个key,名字叫做svndiff微信截图_20171201104229.png

2、在zabbix agentd配置文件中增加以下内容:

UserParameter=svndiff[*],/svncheck_file/svndiff.sh $1


3、最后编写一个脚本:

#!/bin/bash
if [ $# -ne "1" ];then
  echo "ARG ERROR"
  echo "Usage:$0 ( cms | app | mobile )"
  exit 2
fi

case $1 in
  cms)
    slave=`ssh root@10.22.117.135 "svnlook youngest /SVN_DATA/cms/"`
    echo $slave > slave_cms
    master=`svnlook youngest /SVN_DATA/cms/`
    echo $master > master_cms
    diff slave_cms master_cms
      if [ $? -eq 0 ];then
          echo "1"
        else
          echo "0"
      fi
  ;;

  app)
    slave=`ssh root@10.22.117.135 "svnlook youngest /SVN_DATA/app/"`
    echo $slave > slave_cms
    master=`svnlook youngest /SVN_DATA/cms/`
    echo $master > master_cms
    diff slave_cms master_cms
      if [ $? -eq 0 ];then
          echo "1"
        else
          echo "0"
      fi
  ;;

  mobile)
    slave=`ssh root@10.22.117.135 "svnlook youngest /SVN_DATA/mobile/"`
    echo $slave > slave_cms
    master=`svnlook youngest /SVN_DATA/cms/`
    echo $master > master_cms
    diff slave_cms master_cms
      if [ $? -eq 0 ];then
          echo "1"
        else
          echo "0"
      fi
  ;;

  *)
    echo "Usage:$0 ( cms | app | mobile )"
    ;;
esac



评论