這個(gè)腳本的思路,自定義一個(gè)key,然后就是通過(guò)查看文件 /proc/net/dev 里面的數(shù)值,來(lái)計(jì)算實(shí)時(shí)網(wǎng)卡流量,其實(shí)我算的是一個(gè)平均值。分為進(jìn)和出。如果這個(gè)腳本每隔1分鐘執(zhí)行一次,那么算出來(lái)的流量值就是1分鐘的平均值。最終得到網(wǎng)卡流量趨勢(shì)圖。
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、網(wǎng)站頁(yè)面設(shè)計(jì)、網(wǎng)站優(yōu)化SEO優(yōu)化為一體的專業(yè)網(wǎng)站建設(shè)公司,已為成都等多地近百家企業(yè)提供網(wǎng)站建設(shè)服務(wù)。追求良好的瀏覽體驗(yàn),以探求精品塑造與理念升華,設(shè)計(jì)最適合用戶的網(wǎng)站頁(yè)面。 合作只是第一步,服務(wù)才是根本,我們始終堅(jiān)持講誠(chéng)信,負(fù)責(zé)任的原則,為您進(jìn)行細(xì)心、貼心、認(rèn)真的服務(wù),與眾多客戶在蓬勃發(fā)展的市場(chǎng)環(huán)境中,互促共生。
客戶端操作
# vim /etc/zabbix/zabbix_agentd.conf
# UnsafeUserParameters=0 取消注釋并修改為1,在下面增加一行
UserParameter=my.net.if[*],/usr/local/sbin/zabbix/net.sh $1 $2
my.net.if[相當(dāng)于命令名字,他是key
其中UserParameter用來(lái)自定義鍵值,(類似于net.if.in),自己寫的腳本往往會(huì)有參數(shù),[*] 表示他有自己的參數(shù),所以需要加[*],這是固定寫法,如果腳本壓根就沒(méi)有什么參數(shù),那么這個(gè)就省了。逗號(hào)后面就是我們寫的腳本的路徑了,再后面就是要用到的參數(shù),有幾個(gè)就寫幾。如果沒(méi)有參數(shù),后面的 $1 $2 還有前面的 [*] 就都可以省略。
不足之處:
腳本需要工作中不斷的進(jìn)行改進(jìn)。
并沒(méi)有針對(duì)每個(gè)網(wǎng)卡設(shè)定單獨(dú)的文件,所有網(wǎng)卡使用同一個(gè)日志文件
# 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 # 第一個(gè)參數(shù),網(wǎng)卡名字,腳本并不針對(duì)特定的網(wǎng)卡,可以監(jiān)控很多網(wǎng)卡,監(jiān)控進(jìn)和出
io=$2 # 第二個(gè)參數(shù),并非io,而是in or out 的簡(jiǎn)寫
net_file="/proc/net/dev" #最關(guān)鍵文件,網(wǎng)卡流量就是從這個(gè)文件獲得的。這個(gè)腳本的思路,就是通過(guò)查看文件 /proc/net/dev 里面的數(shù)值,來(lái)計(jì)算實(shí)時(shí)網(wǎng)卡流量,其實(shí)我算的是一個(gè)平均值。分為進(jìn)和出。如果這個(gè)腳本每隔1分鐘執(zhí)行一次,那么算出來(lái)的流量值就是1分鐘的平均值。
n_new=`grep "$eth" $net_file|awk '{print $2}'` # 通過(guò)上面的文件,獲得最新的一個(gè)數(shù)值
n_old=`tail -1 /tmp/neti.log` # 查看上一次網(wǎng)卡流量多少
n=`echo "$n_new-$n_old"|bc` # n 是兩者的差值(上面二個(gè)新老網(wǎng)卡流量做減法)
d_new=`date +%s` # 記錄當(dāng)前的時(shí)間戳
d_old=`tail -2 /tmp/neti.log|head -1` # 查找上一次的時(shí)間戳
d=`echo "$d_new-$d_old"|bc` # d 是兩個(gè)時(shí)間間隔
if_net=`echo "$n/$d"|bc` # 求平均值
echo $if_net # 輸出平均值
date +%s>>/tmp/neti.log # 當(dāng)前時(shí)間戳輸入到日志中
grep "$eth" $net_file|awk '{print $2}'>>/tmp/neti.log # 當(dāng)前流量輸入到日志中
----------------------------------------------------------------------------------------------------------------------------
值與上一次減一下然后除一下,求一個(gè)平均值
# chmod a+x /usr/local/sbin/zabbix/net.sh # 更改權(quán)限
執(zhí)行操作執(zhí)行,先創(chuàng)建腳本里面要使用的目錄和文件
# 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
執(zhí)行腳本檢測(cè):
# /usr/local/sbin/zabbix/net.sh eth0 in
# /usr/local/sbin/zabbix/net.sh eth0 out
此時(shí)檢測(cè) eth2 或者其他網(wǎng)卡的流量會(huì)報(bào)錯(cuò),因?yàn)閳?zhí)行腳本之前,grep 過(guò)濾出來(lái)的是 eth0 的流量,這里直接使用 eth2 得出的數(shù)字肯定是錯(cuò)誤的。所以,如果是想檢測(cè) eth2 的流量,那么在 grep 和 touch 的時(shí)候,就應(yīng)該使用 eth2。
# /etc/init.d/zabbix-agent restart
服務(wù)端
# zabbix_get -s 192.168.32.150 -p10050 -k "my.net.if[eth0,out]"查看out網(wǎng)卡流量,單位字節(jié)
395
# zabbix_get -s 192.168.32.150 -p10050 -k "my.net.if[eth0,in]" 查看in網(wǎng)卡流量,單位字節(jié)
308
WEB端
下圖的 key 只能手寫,并不能選擇。
創(chuàng)建eth0_net_in和eth0_net_out
查看是否添加成功
需求:統(tǒng)計(jì)每分鐘的在線人數(shù),通過(guò)數(shù)據(jù)庫(kù)獲得在線人數(shù)。
思路:
1、客戶端增加 key
UserParameter=my.online,/usr/local/sbin/zabbix/online.sh
#因?yàn)檫@個(gè)需求沒(méi)有參數(shù),所以去掉參數(shù)選項(xiàng)
2、編寫腳本
從數(shù)據(jù)庫(kù)里面獲得每分鐘的在線人數(shù)
3、測(cè)試
服務(wù)端進(jìn)行操作
# zabbix_get -s 192.168.32.150 -p10050 -k "my.online"
如果返回了參數(shù),那么就代表成功。