在前面,我們提到並在被監控裝置或代理上配置了SNMP陷入。與Zabbix伺服器可以直接支援SNMP查詢不一樣,對於SNMP陷入,我們需要在Zabbix伺服器(或者Proxy 伺服器)上配置並啟動SNMP陷入服務,Zabbix系統才能使用SNMP陷入的方法採集監控資料。
u Zabbix系統中SNMP陷入的工作流程
被監控裝置上的SNMP服務代理無法直接向Zabbix服務端或代理髮送SNMP陷入資訊,它需要藉助第三方服務或外掛程式才能完成這個功能。以下Zabbix系統中SNMP陷入的工作流程。
1、 snmptrapd進程接收到來自被監控裝置或代理上的SNMP代理髮送過來的SNMP陷入;
2、 snmptrapd將接收到的陷入資訊傳送給SNMP陷入轉譯器(SNMPTT,SNMP Trap Translator)或用Perl編寫的陷入接收器(Zabbix軟體包裡附帶這個接收器程式);
3、 SNMPTT或Perl接收器解析接收到的陷入資訊,並按照一定格式進行格式化,之後將格式化後的陷入資訊寫入指定的陷入資訊檔中;
4、 Zabbix服務的SNMP陷入器讀取並解析這個陷入資訊檔;
5、 Zabbix從每條陷入資訊中分離出發送陷入資訊的被監控裝置的IP地址或主機名稱;
6、 將接收到的陷入資訊與分離出來的IP地址或主機名稱對應的主機上配置的項目進行正則匹配。如果匹配監控項目,則將對應的項目設定成相應的值。如果沒有匹配到任何項目,但是配置了“snmptrap.fallback”項目,則將陷入的資訊設定到該目上;
7、 如果分離出來的IP地址或主機名稱沒有匹配到任何被監控的主機,則zabbix會產生一條沒有匹配到陷入的陷入資訊;
u SNMPTT安裝配置
通過上面的介紹,我們瞭解到Zabbix系統接收SNMP陷入需要與snmptrapd服務(該服務是net-snmp軟體包內建的服務)一起工作。snmptrapd服務通過其內嵌的機制——Perl指令碼或SNMPTT將接收到的SNMP陷入傳送給Zabbix伺服器(或伺服器代理)進程的。如果使用Perl指令碼進行SNMP陷入資訊的轉譯,則要求在編譯net-snmp時顯示的添加內嵌Perl支援,即在編譯net-snmp軟體包時使用--enable-embedded-perl編譯選項。而我們在介紹安裝net-snmp包時使用的yum安裝的,預設情況下使用二進位方式安裝的net-snmp軟體包是不支援內嵌Perl的(在net-snmp5.4以後的版本裡支援內嵌Perl)。所以,我們在這裡介紹使用SNMPTT進行SNMP陷入轉譯的方法。
SNMP陷入轉譯器(SNMPTT,SNMP Trap Translator),是用Perl語言編寫的,供net-snmp或ucd-snmp軟體包中的snmptrapd 進程使用的SNMP陷入處理器。SNMP陷入轉譯器的主要作用是將snmptrapd捕獲的陷入資訊按照指定的格式進行轉換,並將其存成檔案形式、輸出到系統日誌、Windows系統的事件記錄甚至儲存到SQL資料庫中。下面我們來介紹SNMPTT安裝和配置的方法。
SNMPTT需要使用SNMP以及IniFiles的perl模組,所以需要首先安裝net-snmp-perl以及perl-Config-IniFiles軟體包。
shell> yum install net-snmp-perl
perl-Config_IniFiles在CentOS的預設yum源裡,而使用源碼安裝各個軟體包的依賴關係比較複雜。所以,我們使用epel源來安裝。故我們首先來配置一下epel。建立/etc/yum.repos.d/epel.repo檔案,並將下面內容複寫進該檔案後儲存。
shell> vi /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
接下來用下面命令安裝perl-Config-IniFiles軟體包。
shell> yum install perl-Config-IniFiles
接下來,我們按照下面步驟安裝snmptt軟體包。
下載snmptt_1.4源碼包:
shell > wget http://downloads.sourceforge.net/project/snmptt/snmptt/snmptt_1.4 /snmptt_1.4.tgz?r=&ts=1389880477&use_mirror=superb-dca2
解壓軟體包:shell> tar -zxvf snmptt_1.4.tgz
shell> cd snmptt_1.4
將snmptt檔案拷貝到/usr/sbin下,並設定成可執行檔:
shell> cp snmptt /usr/sbin/
shell> chmod +x /usr/sbin/snmptt
將snmptthandler檔案拷貝到/usr/sbin下,並設定成可執行檔:
shell> cp snmptthandler /usr/sbin/
shell> chmod +x /usr/sbin/snmptthandler
拷貝snmptt設定檔snmptt.ini和snmptt.conf檔案到/etc/snmp下:
shell> cp snmptt.ini /etc/snmp/
shell> cp examples/snmptt.conf.generic /etc/snmp/snmptt.conf
建立/var/log/snmptt 和mkdir /var/spool/snmptt目錄:
shell> mkdir /var/log/snmptt
shell> mkdir /var/spool/snmptt
建立使用者並賦予上述用新使用者的屬組:
shell> useradd –s /sbin/nologin snmptt
shell> chown snmptt:snmptt /var/spool/snmptt
修改snmptt設定檔snmptt.ini下列各項:
vi /etc/snmp/snmptt.ini
修改mode = standalone 項為 mode = daemon;
修改date_time_format = 項為date_time_format = %H:%M:%S %Y/%m/%d;
修改log_system_enable = 0項為og_system_enable = 1;
修改unknown_trap_log_enable = 0 項為unknown_trap_log_enable = 1。並確認
下面所列的兩項所配置的路徑是否正確。
log_file = /var/log/snmptt/snmptt.log
log_enable = 1
u 配置snmptrap服務
首先,我們需要按照2.3.3節所介紹的方法在zabbix伺服器或Proxy 伺服器上安裝net-snmp軟體包並做相應的配置。在安裝完net-snmp軟體包以後,系統不會自動產生預設配置的net-snmp陷入進程所需要的設定檔snmptrapd.conf。所以,我們可以使用snmpconf工具來產生一個snmptrapd.conf。snmpconf工具使用比較簡單,只要按照提示回答一些提問之後,snmpconf即可為我們產生snmptrapd的設定檔。在此,我們提供一個簡化的設定檔內容,讀者只需建立/usr/share/snmp/snmptrapd.conf檔案,並將下面這段內容複寫過去即可。
donotfork yes
pidfile /var/run/snmptrapd.pid
printeventnumbers yes
traphandle default /usr/sbin/snmptthandler
ignoreauthfailure yes
authcommunity execute,log,net snmp@domain.com
接下來,因為snmptt是基於數字OID來匹配/etc/snmp/snmptt.conf檔案裡的內容,以確定是接收到了哪種陷入並將陷入資訊轉化成相應格式的。但是,在預設情況下snmptrapd會自動將接收到陷入資訊中的OID轉化成類似於: SNMPv2-MIB::coldStart這種簡化的字串形式的。而這種簡化的字串形式OID與snmptt.conf中配置的OID是數字形式的不匹配,故snmptt服務將無法識別。因些,我們修改snmptrap的啟動指令碼來解決這一問題。
shell> /etc/init.d/snmptrapd
將snmptrapd檔案中的OPTIONS="-Lsd -p /var/run/snmptrapd.pid"修改成OPTIONS="-Lsd -On -p /var/run/snmptrapd.pid"並儲存。
好了,通過上面的安裝、配置和準備,我們已經完成了snmp陷入服務的安裝和配置,下面我們來重啟服務並檢查服務工作是否正常。
shell> service snmpd start/restart
shell> service snmptrapd start/restart
shell> service snmptt start/restart
如果上述三種服務啟動都是正常的,則我們可能通過下例命令來檢查我們配置的SNMP陷入服務是否正常。在本機或其它主機上發送一條陷入資訊到我們zabbix伺服器的陷入服務連接埠上,並檢查snmptt服務是否在指定的檔案裡輸出我們要求的陷入資訊的輸出。
shell>snmptrap -v 2c -c snmp@domain.com 192.168.5.139:162 "" .1.3.6.1.6.3.1.1.5.3
執行上述陷入命令之後,如果在/var/log/snmptt/snmptt.log檔案裡有如下類似如下的資訊輸出則說明我們配置的snmptrapd和snmptt服務工作是正常的。
15:05:362014/01/17.1.3.6.1.6.3.1.1.5.3Normal"Status Events" source.iwgame.tec - Link down on interface $1. Admin state: $2. Operational state: $3