zabbix 自定义探索规则发现服务器上面的kvm虚拟机和对应的网卡

安装完zabbix服务器之后 只有两个探索规则模版,挂载点探索和网卡探索

场景描述:想使用zabbix监控kvm虚拟机的网卡的流量情况,

获取虚拟机和网卡对应关系

虚拟机 S-1 

virsh domiflist S-1 # 列出虚拟机的网卡 (vnet*)

virsh domifstat S-1 vnet0 # 列出虚拟机的网络流量

所以监控虚拟机的网卡流量情况,需要知道虚拟机的名和对应的网卡

首先建立探索脚本,来搜索虚拟机和网卡

vi /etc/zabbix/zabbix_agentd.d/virsh_running_discovery.sh

#!/bin/bash
virsh_running_discovery()
{

    local tmpfile="/tmp/mounts.tmp"
    echo > "$tmpfile"
    local kvm_list=(`sudo virsh list | grep running |awk '{print $2}'`)
	local num1=${#kvm_list[@]}
	printf '{\n'
    printf '\t"data":[ '
    for i in ${kvm_list[@]}
    do
		((num1--))
        local vnic_list=(`sudo virsh domiflist $i|sed '1,2d'|awk '{print $1}'|grep -v ^$`)
		local num2=${#vnic_list[@]}
		for s in ${vnic_list[@]}
		do
			printf '\n\t\t{'
			printf "\"{#VS_NAME}\":\"${i}\","
			printf "\"{#VS_NIC}\":\"${s}\"}"
			((num2--))
			[ "$num2" == 0 -a "$num1" == 0 ] && break
			printf ","
		done
	done
	printf '\n\t]\n'
    printf '}\n'
}	
case "$1" in
    virsh_running_discovery)
        "$1"
        ;;
    *)
        echo "Bad Parameter."
        echo "Usage: $0 virsh_running_discovery"
        exit 1
        ;;
esac

自定义key 

编辑配置文件vim /etc/zabbix/zabbix.agentd.d/kvm_list.conf

UserParameter=virsh.running.discovery,/bin/bash /etc/zabbix/zabbix_agentd.d/virsh_running_discovery.sh virsh_running_discovery

 测试

  zabbix_get -s 127.0.0.1 -k virsh.running.discovery

测试通过过 在zabbix界面添加探索规则,然后添加此规则的项目原型,使用{#VS_NAME}引用虚拟机名,{#VS_NIC} 引用网卡名

 

补充:

 zabbix 调用到了virsh 命令 所以要配置sudo 才能让zabbix 调用virsh 

 vi /etc/sudoers 

zabbix ALL=(ALL) NOPASSWD: /usr/bin/virsh # NOPASSWD 表示 sudo的时候不使用密码

将 Defaults requiretty 给注释,在centos fedora 下面 使用sudo  需要有个tty才可以 ,因为在脚本里面执行 所以要将这行注释

posted @ 2016-10-19 14:43  不会游泳的鱼pdj  阅读(2630)  评论(0编辑  收藏  举报