zabbix自定义监控流量脚本

完全参考,只是把单位换了一下,默认从该文件查看的流量值单位是bps,所以转换了一下,系统默认是没有bc计算器的,需要下载

yum -y install bc

#!/bin/bash
#流量监控脚本
# 第一个参数,可以针对多个网卡
eth=$1 
# 第二个参数,可以针对进出流量
io=$2
# 网卡流量从该文件中取,该值为总计,如记录几天的值,需做减法
net_file="/proc/net/dev"
# 收到的流量值
if [ $2 == "in" ];then
        # 获得最新的网卡流量值
        n_new=`grep "$eth" $net_file|awk '{print $2}'`
        # 获得上一次记录的网卡流量值
        n_old=`tail -1 /etc/zabbix/zabbix_agentd.d/netin.log`
        # 流量值之差
        diff=$(echo "$n_new - $n_old"|bc)
        #转为KB(单位是bps,KB为/1024,MB为/1048576)
        diff_h=$(echo "$diff / 1024"|bc)
        # 记录最新的时间戳
        d_new=`date +%s`
        # 获得上一次时间戳
        d_old=`tail -2 /etc/zabbix/zabbix_agentd.d/netin.log|head -1`
        # 时间戳之差
        d_diff=$(echo "$d_new - $d_old"|bc)
        # 流量差值/时间差,得出平均下载速度,乘8得到带宽数
        if_net=$(echo "$diff_h / $d_diff * 8"|bc)
        echo $if_net
        # 记录一个时间戳,放文件中,即记录d_new
        date +%s>>/etc/zabbix/zabbix_agentd.d/netin.log
        # 将获取的流量值,放进时间戳的文件中,即记录n_new
        grep "$eth" $net_file|awk '{print $2}'>>/etc/zabbix/zabbix_agentd.d/netin.log
elif [ $2 == "out" ]
then
        n_new=`grep "$eth" $net_file|awk '{print $10}'`
        n_old=`tail -1 /etc/zabbix/zabbix_agentd.d/netout.log`
        diff=$(echo "$n_new - $n_old"|bc)
        diff_h=$(echo "$diff / 1024"|bc)
        d_new=`date +%s`
        d_old=`tail -2 /etc/zabbix/zabbix_agentd.d/netout.log|head -1`
        d_diff=$(echo "$d_new - $d_old"|bc)
        if_net=$(echo "$diff_h / $d_diff * 8"|bc)
        echo $if_net
        date +%s>>/etc/zabbix/zabbix_agentd.d/netout.log
        grep "$eth" $net_file|awk '{print $10}'>>/etc/zabbix/zabbix_agentd.d/netout.log
else
        echo 0
fi

一键agent端安装配置脚本

#!/bin/bash
#zabbix4.2 agent端安装配置

#server端IP
s_ip=192.168.1.100
#本机IP
host_ip=$(ip -4 a|grep inet|head -2|tail -1|awk -F '/' '{print $1}'|awk -F' ' '{print $2}')

#检查操作系统版本,该脚本只能运行在 Centos 7.x 系统上
cat /etc/redhat-release |grep -i centos |grep '7.[[:digit:]]' &>/dev/null
if [[ $? != 0 ]]
then
    echo -e "\e[1;31m不支持的操作系统,该脚本只适用于CentOS 7.x  x86_64 操作系统\e[0m"
    exit 1
fi

#检查是否存在流量监控脚本
if [ ! -f net.sh ];then
	echo -e "\e[1;31m未找得到net.sh流量监控脚本,请上传后重试\e[0m"
	exit 2
fi

#下载yum源
rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
#更改为阿里镜像
sed -i 's/repo.zabbix.com/mirrors.aliyun.com\/zabbix/g' /etc/yum.repos.d/zabbix.repo
#清理yum源缓存
yum clean all
#安装zabbix-agent
yum -y install zabbix-agent

#设置server端IP,被动模式
sed -i "s/Server=127.0.0.1/Server=$s_ip/" /etc/zabbix/zabbix_agentd.conf
#设置server端IP,主动模式,当和上一行一起启动时,认为主动
sed -i "s/ServerActive=127.0.0.1/ServerActive=$s_ip/" /etc/zabbix/zabbix_agentd.conf
#指定当前主机的主机名,server端通过此参数对应的主机名识别当前主机(主动模式)
sed -i "/^Hostname=/d" /etc/zabbix/zabbix_agentd.conf
sed -i "/^# Hostname=/a Hostname=$host_ip" /etc/zabbix/zabbix_agentd.conf
#添加是否限制用户自定义 keys 使用特殊字符
sed -i "/^# UnsafeUserParameters=0/a UnsafeUserParameters=1" /etc/zabbix/zabbix_agentd.conf

#增加自定义key值
#流量,单位KB
echo "UserParameter=net.if[*],/etc/zabbix/zabbix_agentd.d/net.sh \$1 \$2" >> /etc/zabbix/zabbix_agentd.d/userparameter.conf

#创建流量监控脚本需要的文本,并记录当前值
touch /etc/zabbix/zabbix_agentd.d/netin.log && touch /etc/zabbix/zabbix_agentd.d/netout.log
chown zabbix.zabbix /etc/zabbix/zabbix_agentd.d/netin.log
chown zabbix.zabbix /etc/zabbix/zabbix_agentd.d/netout.log
date +%s >> /etc/zabbix/zabbix_agentd.d/netin.log && grep eth0 /proc/net/dev |awk '{print $2}' >> /etc/zabbix/zabbix_agentd.d/netin.log
date +%s >> /etc/zabbix/zabbix_agentd.d/netout.log && grep eth0 /proc/net/dev |awk '{print $2}' >> /etc/zabbix/zabbix_agentd.d/netout.log
#将流量脚本移至agent目录下,并给与执行权限
mv ~/net.sh /etc/zabbix/zabbix_agentd.d/
chmod a+x etc/zabbix/zabbix_agentd.d/net.sh

#启动并开机启动
systemctl enable zabbix-agent
systemctl start zabbix-agent
if [ $? = 0 ];then
	echo  -e "\e[1;31m已启动成功,请开启本机对外端口10050,然后到$s_ip机器执行:\nzabbix_get -s 本机IP -p10050 -k "net.if[eth0,out]" \n查看是否能获取本机目前出站流量信息。\e[0m"
else
	echo  -e "\e[1;31m启动失败,请检查配置。\e[0m"
fi

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章