天天看點

zabbix監控網卡流量

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&gt;&gt;</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>&gt;&gt;</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&gt;&gt;</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>&gt;&gt;</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 &gt;&gt;</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>&gt;&gt;</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 &gt;&gt;</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>&gt;&gt;</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,如需轉載請自行聯系原作者