您好,登錄后才能下訂單哦!
這個腳本的思路,自定義一個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"
如果返回了參數,那么就代表成功。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。