少走冤枉路!帶你走過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 15:42
下一篇 2016-06-22 15:46

相關推薦

  • linux 刪除內核文件,未能啟動,修復方法 CDROM與網絡法

    當缺少 /boot 內核文件 vmlinuz-2…. initramfs-2… 此時只能借助 光盤 CDROM 來引導生成    進入  RESCUE 模式 1    chroot       &…

    Linux干貨 2016-09-13
  • iptables基本知識

    1)Linux下的防火墻概念 a、一般談到Linux下的防火墻,我們都會首先想到iptables,其實更確切的叫法應該是Netfilter/iptables,iptables和Netfilter其實是存在差別的。 b、盡管它們經常被用來相互替換使用,Netfilter是用來實現Linux內核中防火墻的Linux內核空間程序代碼段,它要么被直接編譯進內核,要么…

    Linux干貨 2016-07-16
  • 從Linux小白到大?!c狼共舞的日子4

    馬哥教育網絡班21期+第4周課程練習 1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@localhost ~]# cp -a /etc/skel/ /home/tuser1/ [root@localhost&n…

    Linux干貨 2016-08-02
  • Nginx 進階 (ssl、fpm、rewrite、cache配置等)

    Nginx(與ssl結合配置https網站、rewrite,fastcgi配置詳解) 前言 前面已經介紹過Nginx的一些基礎概念,還有幾個比較重要的模塊:利用ssl給會話加密,利用rewrite功能靈活改寫訪問結果,以及利用fastcgi與php模塊結合等等。 一、配置https網站 1、自建CA (1)生成私鑰文件 mkdir -p /etc/pki/C…

    Linux干貨 2016-12-26
  • Google 開源技術protobuf

    1.  Protobuf簡介        protobuf是google提供的一個開源序列化框架,類似于XML,JSON這樣的數據表示語言,其最大的特點是基于二進制,因此比傳統的XML表示高效短小得多。雖然是二進制數據格式,但并沒有因此變得復雜,開發人員通過按照一定的語法定義結構化的消息格式,然后送給命令行…

    系統運維 2015-04-04
  • 系統基礎之文件管理grep練習題

    1、顯示/proc/meminfo文件中以大小s開頭的行; (要求:使用三種方式) [root@wen-7 ~]# grep -i "^s" /proc/meminfo  SwapCached:       &…

    Linux干貨 2016-08-07

評論列表(1條)

  • stanley
    stanley 2016-06-22 15:45

    有硬貨的軟廣我們也支持

欧美性久久久久