少走冤枉路!帶你走過SNMP的那些坑

少走冤枉路!帶你走過SNMP的那些坑

SNMP(Simple Network Management Protocol)即簡單網絡管理協議,是在網絡與系統監控領域中,最常使用的一種數據采集技術。盡管這個協議非常簡單,但在大規模IT環境監測中,還是經常會碰到各種坑,因此優云開源了一套友好的SNMPAPI,并通過本文簡單介紹這套API中的一些特點,希望幫助各位運維同仁提前規避一些問題。

特點[0]. 提供解析各種數據類型的SnmpValue類

在SNMP中,有各種各樣的數據類型,光表達數值類型的,就有Gauge32、Integer32、Counter32、Counter64等數十種,甚至有一種稱為OctetString的萬能數據類型,可以代表常見的ASCII字符串、IP地址、MAC地址、端口列表等等含義。很多老手都經常由于錯誤的轉換OctetString,導致采用到的數據沒有意義,更別提新手面對這些數據類型,會有多糊涂了。

本API所返回的采集結果,均使用SnmpValue類,對各種原數據類型進行了統一封裝,提供了更友好的使用接口,如下所示:

 2.jpg


特點[1].提供避免死循環的Walk操作


Walk操作是指不斷使用Get-Next請求去逐個采集設備的一些相鄰OID,以獲取一批相關信息的操作。

 

從SNMP規范上來說,設備上的OID排列應該是升序并且不會重復,但林子大了,什么鳥都有!一些OID出現逆增長甚至干脆重復的設備也會出現。因此程序員寫出會死循環的Walk操作也很常見。

 

而本API提供的三個特性可以避免這種情況出現:

 

·兼容OID逆增長

·自動合并重復OID,保留同一個OID采集到的最后一次值

·允許設置單次Walk最大結果數,避免死循環

 

特點[2]. 提供Table數據類型與WalkTable操作


Walk操作很多時候都是在采集設備的表格類信息,如端口列表、路由表、轉發表等。

但在使用普通的Walk操作時,返回的只是一個一維數組,每個元素只對應到表格中的一個單元格。因此為了從中完整的提取出一個路由記錄、端口信息,往往要需要不停的遍歷數組,根據OID與Index提取元素。同時由于設備的表格也可能在Walk過程中發生了改變,有時也會碰到缺失某些單元格的情況,無法組織起有效數據的情況。

因此,如果使用傳統的方法來提取信息,一般會寫出如下復雜的代碼:

少走冤枉路!帶你走過SNMP的那些坑

而使用本API中的walkTable與Table數據類型,可以大大的簡化相關操作。

少走冤枉路!帶你走過SNMP的那些坑

特點[3]. 合并pdu發出多個requestoid,大幅度提高性能

在進行SNMP采集時,往往會出現大量的SNMP請求,這是因為進行Walk時,需要產生大量的Get-Next操作。

舉例來說,采集一個擁有48個端口的設備端口表,則需要的請求數為:

 

> 48(端口數) * 22(每端口字段數) =1056次請求

而本API,在設計時考慮到了減少請求的需求,會嘗試將一行多個字段的OID請求合并到一次請求中,以大幅度減少需要發出的數據包數量。

 

同樣采集一個48個端口,其需要的請求數為:

> 48(端口數) * 1(合并后的請求數) =48次請求

可見減少了96%的請求。

 

特點[4]. 控制SNMP采集頻率,避免被管設備CPU飆升


最后,由于一些網絡設備較為陳舊,其采用的CPU性能較弱,以及廠商的SNMP Agent存在性能缺陷,因此在實際的SNMP采集操作時,常經常會出現CPU利用率持續在100%,更有甚者開始出現網絡數據丟包,影響正常數據轉發功能的情況。

 

本API默認對訪問頻繁進行了50ms的最低頻率控制,并且此參數也可按被采集的設備進行單獨調整,因此可有效避免SNMP采集對設備的不利影響。

 

除上述特點外,此套開源類庫,還提供了諸如“OID聯合與父子判斷”、“異常簡化”、“V3參數簡化”、“Table缺失容錯”等優秀特性,歡迎大家使用與進一步補充功能。

 

福利在這里哦:本文涉及代碼均已開源在:https://github.com/uyun/common-snmp,同時優云也會陸續開源一些運維工具項目,如監控采集代理等。優云是一家致力于通過技術幫助企業提升運維效益的公司。

 

作者介紹  蔣君偉 任職優云軟件(秉承devops的理念,從監控、到應用體驗,到自動化持續交付,全棧運維解決方案服務商)

原創文章,作者:uyunops,如若轉載,請注明出處:http://www.www58058.com/18261

(0)
uyunopsuyunops
上一篇 2016-06-22
下一篇 2016-06-22

相關推薦

  • linux發行版說明和哲學思想,以及常用命令說明

    Linux發行版主要流行的版本有3種:debian,slackware,red 其說明和特點如下圖。 Linux哲學思想: 1、一切皆文件;所有的一切都變成了文件!不光是軟件方面的比如傳統文件、目錄、字符設備、還包括硬件或者接口。如鼠標/mouse、打印機/lp、還有接口比如/usb. 2、單一目的的小程序;一個程序只負責干一件事,而且要把這個任務做好。 3…

    Linux干貨 2016-10-30
  • ldirectord 結合ipvsadm 配置nat,dr模型

    ldirectord 結合ipvsadm 配置nat,dr模型  一、nat模型 1、 drector # wget ftp://172.16.0.1/pub/Sources/7.x86_64/crmsh/ldirectord-3.9.6-0rc1.1.1.x86_64.rpm # yum -y install nginx (同時用于做為sorry…

    Linux干貨 2014-01-03
  • 計算機相關簡介和linux相關簡介

    一、計算機相關簡介與linux的一些概念 計算機系統 由硬件(Hardware)系統和軟件(Software)系統兩大部分構成: 硬件系統 :CPU(控制器、運算器),內存儲器(RAM、ROM),外存儲器(硬盤等),輸入設備(鍵盤、鼠標等),輸出設備(顯示器等),其他設備相關設備。  軟件系統 :系統軟件(操作系統,數…

    Linux干貨 2017-02-18
  • CentOS系統詳解(啟動流程、kickstart)&bash腳本編程之while/函數用法

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區; (1) 為硬盤新建兩個主分區;并為其安裝grub; (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs; (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件…

    Linux干貨 2016-11-28
  • 文本處理工具以及grep

    文本處理工具以及grep 我們在使用Linux系統的時候需要查看、分析或者統計文件,這時候我們就需要使用到文本處理工具。 我們先來看下幾個文本處理工具的使用: 文件內容:less和 cat 文件截取:head和tail 按列抽?。篶ut 按關鍵字抽?。篻rep 我們先來看看less和cat cat:查看文件命令     用法: &nbsp…

    Linux干貨 2016-08-08
  • Shell編程之位置變量

           linux中命令可以接受參數,同樣的,shell腳本也可以接受參數。這些參數用$1、$2、$3…$n表示。       $0  表示腳本本身       $1  傳遞給腳本的第1個參數 $2  傳…

    Linux干貨 2016-08-12

評論列表(1條)

  • stanley
    stanley 2016-06-22 15:45

    有硬貨的軟廣我們也支持

欧美性久久久久