千家信息网

zabbix 自定义脚本

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这个脚本的思路,自定义一个key,然后就是通过查看文件 /proc/net/dev 里面的数值,来计算实时网卡流量,其实我算的是一个平均值。分为进和出。如果这个脚本每隔1分钟执行一次,那么算出来的流量
千家信息网最后更新 2026年11月01日zabbix 自定义脚本

这个脚本的思路,自定义一个key,然后就是通过查看文件 /proc/net/dev 里面的数值,来计算实时网卡流量,其实我算的是一个平均值。分为进和出。如果这个脚本每隔1分钟执行一次,那么算出来的流量值就是1分钟的平均值。最终得到网卡流量趋势图。


客户端操作

# vim /etc/zabbix/zabbix_agentd.conf

# UnsafeUserParameters=0 取消注释并修改为1,在下面增加一行

UserParameter=my.net.if[*],/usr/local/sbin/zabbix/net.sh $1 $2

my.net.if[相当于命令名字,他是key

其中UserParameter用来自定义键值,(类似于net.if.in),自己写的脚本往往会有参数,[*] 表示他有自己的参数,所以需要加[*],这是固定写法,如果脚本压根就没有什么参数,那么这个就省了。逗号后面就是我们写的脚本的路径了,再后面就是要用到的参数,有几个就写几。如果没有参数,后面的 $1 $2 还有前面的 [*] 就都可以省略。

不足之处:

脚本需要工作中不断的进行改进。

并没有针对每个网卡设定单独的文件,所有网卡使用同一个日志文件

# vim /usr/local/sbin/zabbix/net.sh

#!/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 /tmp/neti.log`

n=`echo "$n_new-$n_old"|bc`

d_new=`date +%s`

d_old=`tail -2 /tmp/neti.log|head -1`

d=`echo "$d_new-$d_old"|bc`

if_net=`echo "$n/$d"|bc`

echo $if_net

date +%s>>/tmp/neti.log

grep "$eth" $net_file|awk '{print $2}'>>/tmp/neti.log

elif [ $2 == "out" ]

then

n_new=`grep "$eth" $net_file|awk '{print $10}'`

n_old=`tail -1 /tmp/neto.log`

n=`echo "$n_new-$n_old"|bc`

d_new=`date +%s`

d_old=`tail -2 /tmp/neto.log|head -1`

d=`echo "$d_new-$d_old"|bc`

if_net=`echo "$n/$d"|bc`

echo $if_net

date +%s>>/tmp/neto.log

grep "$eth" $net_file|awk '{print $10}'>>/tmp/neto.log

else

echo 0

fi

----------------------------------------------------------------------------------------------------------------------------

详解

eth=$1 # 第一个参数,网卡名字,脚本并不针对特定的网卡,可以监控很多网卡,监控进和出

io=$2 # 第二个参数,并非io,而是in or out 的简写

net_file="/proc/net/dev" # 最关键文件,网卡流量就是从这个文件获得的。这个脚本的思路,就是通过查看文件 /proc/net/dev 里面的数值,来计算实时网卡流量,其实我算的是一个平均值。分为进和出。如果这个脚本每隔1分钟执行一次,那么算出来的流量值就是1分钟的平均值。

n_new=`grep "$eth" $net_file|awk '{print $2}'` # 通过上面的文件,获得最新的一个数值

n_old=`tail -1 /tmp/neti.log` # 查看上一次网卡流量多少

n=`echo "$n_new-$n_old"|bc` # n 是两者的差值(上面二个新老网卡流量做减法)

d_new=`date +%s` # 记录当前的时间戳

d_old=`tail -2 /tmp/neti.log|head -1` # 查找上一次的时间戳

d=`echo "$d_new-$d_old"|bc` # d 是两个时间间隔

if_net=`echo "$n/$d"|bc` # 求平均值

echo $if_net # 输出平均值

date +%s>>/tmp/neti.log # 当前时间戳输入到日志中

grep "$eth" $net_file|awk '{print $2}'>>/tmp/neti.log # 当前流量输入到日志中

----------------------------------------------------------------------------------------------------------------------------


值与上一次减一下然后除一下,求一个平均值

# chmod a+x /usr/local/sbin/zabbix/net.sh # 更改权限

执行操作执行,先创建脚本里面要使用的目录和文件

# touch /tmp/net[io].log

# date +%s >>/tmp/neti.log

# grep eth0 /proc/net/dev |awk '{print $2}' >>/tmp/neti.log

# date +%s >>/tmp/neto.log

# grep eth0 /proc/net/dev |awk '{print $10}' >>/tmp/neto.log

# chown zabbix /tmp/net[io].log

执行脚本检测:

# /usr/local/sbin/zabbix/net.sh eth0 in

# /usr/local/sbin/zabbix/net.sh eth0 out

此时检测 eth2 或者其他网卡的流量会报错,因为执行脚本之前,grep 过滤出来的是 eth0 的流量,这里直接使用 eth2 得出的数字肯定是错误的。所以,如果是想检测 eth2 的流量,那么在 grep 和 touch 的时候,就应该使用 eth2。

# /etc/init.d/zabbix-agent restart

服务端

# zabbix_get -s 192.168.32.150 -p10050 -k "my.net.if[eth0,out]"查看out网卡流量,单位字节

395

# zabbix_get -s 192.168.32.150 -p10050 -k "my.net.if[eth0,in]" 查看in网卡流量,单位字节

308

WEB端

下图的 key 只能手写,并不能选择。

创建eth0_net_in和eth0_net_out


查看是否添加成功


需求:统计每分钟的在线人数,通过数据库获得在线人数。

思路:

1、客户端增加 key

UserParameter=my.online,/usr/local/sbin/zabbix/online.sh

#因为这个需求没有参数,所以去掉参数选项

2、编写脚本

从数据库里面获得每分钟的在线人数

3、测试

服务端进行操作

# zabbix_get -s 192.168.32.150 -p10050 -k "my.online"

如果返回了参数,那么就代表成功。


网卡 脚本 流量 参数 文件 平均值 就是 时间 人数 思路 数值 日志 上一 在线 检测 成功 单位 名字 字节 实时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技服务与互联网 互联网科技网站 安控科技rtu产品工业互联网 深圳国际航运科技和互联网 济南华为互联网科技产业总部基地 互联网科技博主是什么意思 互联网科技创新服务 浙江互联网科技研学营 移动互联网年度科技创新 恒生互联网科技指数跳水 洛阳昕诺飞互联网科技有限公司 华夏恒生互联网科技013171 西安小鹰速贷互联网科技有限公司 互联网第三次科技革命特征 有人说阿里系是互联网科技企业 扫呗互联网科技有限公司 唯美互联网科技 广西泛欧互联网科技有限公司 青岛互联网科技园 株洲百竞科技的互联网营销顾问 互联网金融科技创新 易通互联网络科技有限公司 卓越科技互联网 招聘 宁夏众和广鑫互联网科技有限公司 互联网软件和科技 宝灵互联网科技有限公司 和信科技工业互联网 富国互联网金融科技混合基金 互联网科技接地气 求路客互联网科技电话
0