天天看點

Linux下基于net-snmp的Agent擴充開發Linux下基于net-snmp的Agent擴充開發 一.背景技術及術語解釋二.方案較長的描述三.經驗總結

Linux下基于net-snmp的Agent擴充開發

一.背景技術及術語解釋

        Net-SNMP是一個免費的、開放源碼的SNMP實作,其中包含了一個Agent子產品,通過這個子產品可以擷取到伺服器的相關資訊;在源碼中實作了對伺服器部分資訊的擷取,我們同樣可以通過擴充mib庫檔案來實作擷取我們需要的伺服器的資訊和管理伺服器,并可以在其中添加一個通信子產品來擷取伺服器上一些服務的資訊。

二.方案較長的描述

1.Linux下Agent擴充方法簡介

1.1添加自定義mib庫的實作檔案

       1. 在net-snmp的源碼目錄(net-snmp-5.7.1/agent/mibgroup)下添加一個檔案夾hikvision;

       2. 将通過新增mib庫生成的C代碼檔案拷貝到hikvision檔案夾;

       3.在net-snmp-5.7.1/agent/mibgroup目錄下建立一個檔案hikvision.h, 檔案内容如下:

Linux下基于net-snmp的Agent擴充開發Linux下基于net-snmp的Agent擴充開發 一.背景技術及術語解釋二.方案較長的描述三.經驗總結

         其中hikHardwareThreshold為需要添加的檔案。

1.2 net-snmp工程Makefile的生成

        在net-snmp源碼目錄(net-snmp-5.7.1/)下執行如下指令來生成Makefile檔案,分以下三種情況。

情況1: 擴充的MIB庫的實作檔案未用到第三方庫和調用其他檔案中的函數

 [[email protected]  agent]# ./configure--enable-static --enable-shared=no

--disable-applications --disable-manuals--disable-scripts

--enable-mib-config-checking --with-cc=gcc--with-linkcc=g++

情況2: 擴充的MIB庫的實作檔案使用第三方庫

[[email protected]  agent]# ./configure --enable-static --enable-shared=no

--disable-applications --disable-manuals--disable-scripts

--enable-mib-config-checking --with-cc=gcc--with-linkcc=g++

--with-mibs="HIKVISION-MIB"--with-mib-modules="hikvision" CFLAGS="-fPIC -Wall -g"LDFLAGS=-L/root/NMS/lib PERLLDOPTS_FOR_APPS="-pthread -lhpr2-ltinyxml"

--with-cc=gcc 編譯的時候用gcc

--with-linkcc=g++ 連結的時候用g++

--with-mibs="HIKVISION-MIB"擴充的mib庫的名稱

--with-mib-modules="hikvision"擴充mib庫生成的代碼在net-snmp源碼目錄

(net-snmp-5.7.1/agent/mibgroup)中檔案夾的名稱

LDFLAGS=-L/root/NMS/lib用到的第三方庫所在路徑

PERLLDOPTS_FOR_APPS="-pthread-lhpr2 -ltinyxml" 依賴的第三方庫的名稱

當實作擴充MIB庫是使用C++編寫的時候,需要先将*.cpp檔案改為*.c後再執行./configure,否則生成Makefile檔案時會找不到擴充的cpp的檔案,導緻擴充的内容無法編譯到Agent中;

./configure執行後,将*.c檔案改回*.cpp檔案,這時候執行make指令hikvision下的各個cpp檔案是無法生成正确的目标檔案的,需要在hikvision目錄下手動生成相應的目标檔案,指令如下:

[[email protected] agent]# /bin/sh ../../libtool  --mode=compile g++ -I../../include -I.-I../../agent -I../../agent/mibgroup -I../../snmplib   -fno-strict-aliasing -g -O2 -Ulinux -Dlinux=linux  -c -o hikvision/hikHardwareThreshold.lo

hikvision/hikHardwareThreshold.cpp

生成各自的目标檔案hikHardwareThreshold.o和hikHardwareThreshold.lo,這些檔案會在執行make指令時連結到Agent的可自行程式。

情況3:擴充的MIB庫的實作檔案調用了其他cpp檔案中的函數

        被調用的cpp檔案的目标檔案同樣需要在hikvision下手動生成,方法如情況2中所述。

執行./configure的參數同情況2,在執行了./configure後需要手動修改源碼目錄(net-snmp-5.7.1/agent)下的Makefile檔案。例如utils.cpp中的函數被調用了,在Makefile中需要作兩處修改:

1)     在mibgroup_list_lo的值中添加mibgroup/hikvision/utils.lo,如下圖:

Linux下基于net-snmp的Agent擴充開發Linux下基于net-snmp的Agent擴充開發 一.背景技術及術語解釋二.方案較長的描述三.經驗總結

2)     在mibgroup_list_o的值中添加mibgroup/hikvision/utils.o,如下圖:

Linux下基于net-snmp的Agent擴充開發Linux下基于net-snmp的Agent擴充開發 一.背景技術及術語解釋二.方案較長的描述三.經驗總結

1.3編譯和測試擴充後的Agent

           執行完./configure後,會生成編譯net-snmp所需的Makefile檔案,生成Makefile後便可執行make指令來生成Agent的可執行檔案snmpd。

           在源碼目錄(net-snmp-5.7.1/agent)下執行如下指令來啟動Agent:

           [[email protected] net-snmp-5.7.1]#./snmpd  -Lo  -f  -C  -c

           /etc/snmp/snmpd.conf  -M /usr/local/share/snmp/mibs

           Agent啟動後,向Agent發送get請求來擷取擴充的OID的值,在有安裝snmpget工具的機器上發送如下請求:

           [[email protected] agent]# snmpget-v 2c -c public 10.64.49.16 1.3.6.1.4.1.1.8092.1.1.0

           若傳回資訊形如:HIKVISION-MIB::hikCPUNum.0 = INTEGER: 1,則Agent擴充成功。

三.經驗總結

         通過擴充Net-SNMP中的Agent可以擷取和設定自定義的MIB庫中的伺服器相關資訊,友善對伺服器進行管理,同樣通過新增的通信子產品也可以管理伺服器上的各個服務。

此次在Linux對Agent進行功能擴充,在編譯Agent時還有很多地方還需要手動修改,還不能直接通過./configure和make編譯成功,雖然達到了擴充Agent的目的,但過程還稍顯複雜,還需進一步研究net-snmp來簡化擴充的過程。

此次擴充之是以複雜是由于擴充Agent使用了C++和一些C++的庫,而net-snmp是用C語言編寫的,是以編譯過程中遇到了許多問題。

繼續閱讀