1. 根據/proc/net/dev檔案,擷取網卡流量資訊
<a href="https://s4.51cto.com/wyfs02/M01/8E/A9/wKioL1jIr5Gj8QO4AAAnstld0H8054.png" target="_blank"></a>
說明:
最左邊的表示接口的名字,Receive表示收包,Transmit表示發包:
bytes表示收發的位元組數;
packets表示收發正确的包量;
errs表示收發錯誤的包量;
drop表示收發丢棄的包量;
2. zabbix用戶端,編輯腳本/tmp/net.sh,初始化環境
内容:
<code>#!/bin/bash</code>
<code>eth=$1 </code><code># 第一個參數,可以針對多個網卡</code>
<code>io=$2 </code><code># 第二個參數,可以針對進出流量</code>
<code>net_file=</code><code>"/proc/net/dev"</code> <code># 網卡流量從該檔案中取,該值為總計,如記錄幾天的值,需做減法</code>
<code>if</code> <code>[ $2 == </code><code>"in"</code> <code>] </code><code># 收到的流量值</code>
<code>then</code>
<code> </code><code>n_new=`</code><code>grep</code> <code>"$eth"</code> <code>$net_file|</code><code>awk</code> <code>'{print $2}'</code><code>` </code><code># 獲得最新的網卡流量值</code>
<code> </code><code>n_old=`</code><code>tail</code> <code>-1 </code><code>/tmp/neti</code><code>.log` </code><code># 獲得上一次記錄的網卡流量值</code>
<code> </code><code>n=`</code><code>echo</code> <code>"$n_new-$n_old"</code><code>|</code><code>bc</code><code>` </code><code># 流量值之差;bc是一個電腦,直接出結果</code>
<code> </code><code>d_new=`</code><code>date</code> <code>+%s` </code><code># 記錄最新的時間戳</code>
<code> </code><code>d_old=`</code><code>tail</code> <code>-2 </code><code>/tmp/neti</code><code>.log|</code><code>head</code> <code>-1` </code><code># 獲得上一次時間戳</code>
<code> </code><code>d=`</code><code>echo</code> <code>"$d_new-$d_old"</code><code>|</code><code>bc</code><code>` </code><code># 時間戳之差</code>
<code> </code><code>if_net=`</code><code>echo</code> <code>"$n/$d"</code><code>|</code><code>bc</code><code>` </code><code># 流量內插補點/時間差,取平均值</code>
<code> </code><code>echo</code> <code>$if_net </code>
<code> </code><code>date</code> <code>+%s>></code><code>/tmp/neti</code><code>.log </code><code># 記錄一個時間戳,放檔案中,即記錄d_new</code>
<code> </code><code>grep</code> <code>"$eth"</code> <code>$net_file|</code><code>awk</code> <code>'{print $2}'</code><code>>></code><code>/tmp/neti</code><code>.log </code><code># 将擷取的流量值,放進時間戳的檔案中,即記錄n_new</code>
<code>elif</code> <code>[ $2 == </code><code>"out"</code> <code>]</code>
<code> </code><code>n_new=`</code><code>grep</code> <code>"$eth"</code> <code>$net_file|</code><code>awk</code> <code>'{print $10}'</code><code>`</code>
<code> </code><code>n_old=`</code><code>tail</code> <code>-1 </code><code>/tmp/neto</code><code>.log`</code>
<code> </code><code>n=`</code><code>echo</code> <code>"$n_new-$n_old"</code><code>|</code><code>bc</code><code>`</code>
<code> </code><code>d_new=`</code><code>date</code> <code>+%s`</code>
<code> </code><code>d_old=`</code><code>tail</code> <code>-2 </code><code>/tmp/neto</code><code>.log|</code><code>head</code> <code>-1`</code>
<code> </code><code>d=`</code><code>echo</code> <code>"$d_new-$d_old"</code><code>|</code><code>bc</code><code>`</code>
<code> </code><code>if_net=`</code><code>echo</code> <code>"$n/$d"</code><code>|</code><code>bc</code><code>`</code>
<code> </code><code>echo</code> <code>$if_net</code>
<code> </code><code>date</code> <code>+%s>></code><code>/tmp/neto</code><code>.log</code>
<code> </code><code>grep</code> <code>"$eth"</code> <code>$net_file|</code><code>awk</code> <code>'{print $10}'</code><code>>></code><code>/tmp/neto</code><code>.log</code>
<code>else</code>
<code> </code><code>echo</code> <code>0</code>
<code>fi</code>
建立檔案,賦予初始值:
<code>touch</code> <code>/tmp/neti</code><code>.log</code>
<code>chown</code> <code>zabbix </code><code>/tmp/neti</code><code>.log</code>
<code>date</code> <code>+%s >></code><code>/tmp/neti</code><code>.log</code>
<code>grep</code> <code>eth0 </code><code>/proc/net/dev</code> <code>|</code><code>awk</code> <code>'{print $2}'</code> <code>>></code><code>/tmp/neti</code><code>.log</code>
<code>touch</code> <code>/tmp/neto</code><code>.log</code>
<code>chown</code> <code>zabbix </code><code>/tmp/neto</code><code>.log</code>
<code>date</code> <code>+%s >></code><code>/tmp/neto</code><code>.log</code>
<code>grep</code> <code>eth0 </code><code>/proc/net/dev</code> <code>|</code><code>awk</code> <code>'{print $10}'</code> <code>>></code><code>/tmp/neto</code><code>.log</code>
3. 用戶端修改配置檔案/etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1
UserParameter=my.net.if[*], /tmp/shell/net.sh $1 $2
4. zabbix服務端測試
zabbix_get -s 172.16.115.162 -p10050 -k "my.net.if[eth0,in]"
5. 服務端web添加監控項,檢視結果
<a href="https://s4.51cto.com/wyfs02/M02/8E/A9/wKioL1jIsbLgxLDKAACXwciav74029.png" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M00/8E/AB/wKiom1jIseKRq1L7AAC26dQ281o927.png" target="_blank"></a>
本文轉自 huangzp168 51CTO部落格,原文連結:http://blog.51cto.com/huangzp/1906750,如需轉載請自行聯系原作者