net-snmp-5.9.1編譯安裝
SNMP簡介
簡單網路管理協議(SNMP,Simple Network Management Protocol)構成了網際網路工程工作小組(IETF,Internet Engineering Task Force)定義的Internet協議族的一部分。該協議能夠支援網上管理系統,用以監測連線到網路上的裝置是否有任何引起管理上關注的情況。
目前網路上的大部分snmp配置教程都是通過yum工具線上安裝的,因為版本的變遷,通過線上方式安裝的snmp版本安裝後無法解析中文訊息,使用起來不太方便。
本教程是通過手動編譯安裝net-snmp-5.9.1版本和snmptt_1.4 beta2版本,再配合conv_snmptrap_mb指令碼,可以將中文訊息解析出來。
在centos上手動編譯安裝和解除安裝net-snmp-5.9.1
首先下載net-snmp-5.9.1.tar.gz壓縮包,官網地址:http://www.net-snmp.org/download.html 安裝步驟: tar zxvf net-snmp-5.9.1.tar.gz cd /root/net-snmp-5.9.1 ./configure --prefix=/usr/bin/snmp --enable-embedded-perl --enable-shared --with-perl-modules make &>LOG_make tailf LOG_make ##開一個新終端視窗檢視 make install &>LOG_install tailf LOG_install ##開一個新終端視窗檢視 ln -s /usr/bin/snmp/sbin/snmpd /usr/local/sbin/snmpd ln -s /usr/bin/snmp/sbin/snmptrapd /usr/local/sbin/snmptrapd mkdir -p /usr/bin/snmp/etc/snmp cd /root/net-snmp-5.9.1 cp EXAMPLE.conf /usr/bin/snmp/etc/snmp/snmpd.conf 解除安裝步驟: cd /root/net-snmp-5.9.1 make uninstall make distclean rm -f /usr/local/sbin/snmptrapd rm -f /usr/local/sbin/snmpd 如果編譯過程中出現類似以下的報錯: Can't locate ExtUtils/Embed.pm in @INC 安裝perl-ExtUtils-Embed包即可: yum list | grep ExtUtils-Embed yum install perl-ExtUtils-Embed.noarch -y
開啟snmpd和snmptrapd進行除錯
snmpd -LS0-6d -f -f是前臺啟動 -L是選擇日誌輸出方式,0-6d 日誌等級: 0 or ! for LOG_EMERG, 1 or a for LOG_ALERT, 2 or c for LOG_CRIT, 3 or e for LOG_ERR, 4 or w for LOG_WARNING, 5 or n for LOG_NOTICE, 6 or i for LOG_INFO, and 7 or d for LOG_DEBUG. snmptrapd -On -d -f -Lo -c /etc/snmp/snmptrapd.conf 上面命令中的選項表示: -On: 使snmptrapd以數字形式傳遞oid,並防止SNMPTT將符號名轉換為數字形式 -C : 表示不使用net-snmp預設路徑下的配置檔案snmptrapd.conf; -c : 指定snmptrapd.conf檔案; -d : 顯示收到和傳送的資料報,通過這個選項可以看到資料報文; -f : 預設情況下,snmptrapd是在後臺中執行的,加上這個選項,表示在前臺執行; -L : 指定日誌記錄在哪裡,後面的o表示直接輸出到螢幕上,如果是跟著f表示日誌記錄到指定的檔案中; 可通過snmptrapd -h檢視命令幫助瞭解該命令的使用。 客戶端傳送測試命令: snmptrap -v 2c -c public 192.168.8.254:162 "" .1.3.6.1.4.1.2021.251.1 sysLocation.0 s "test" 在服務端的snmptrapd視窗能接收到命令就表示服務執行正常。
新增snmpd和snmptrapd為systemctl服務
1、分別建立snmpd.service和snmptrapd.service檔案,內容如下;
cat /usr/lib/systemd/system/snmpd.service
[Unit]
Description=Simple Network Management Protocol (SNMP) Daemon.
After=network.target
[Service]
Type=simple
PIDFile=/var/run/snmpd.pid
ExecStart=/usr/bin/snmp/sbin/snmpd.sh
Restart=always
ExecReload=
PrivateTmp=True
[Install]
WantedBy=multi-user.target
cat /usr/lib/systemd/system/snmptrapd.service
[Unit]
Description=Simple Network Management Protocol (SNMP) Trap Daemon.
After=network.target
[Service]
Type=simple
PIDFile=/var/run/snmptrapd.pid
ExecStart=/usr/bin/snmp/sbin/snmptrapd.sh
Restart=always
ExecReload=
PrivateTmp=True
[Install]
WantedBy=multi-user.target
2、將檔案複製到/usr/lib/systemd/system/目錄中
cp snmpd.service /usr/lib/systemd/system/
cp snmptrapd.service /usr/lib/systemd/system/
3、建立snmpd和snmptrapd指令碼檔案,這倆個是服務啟動檔案
cat snmpd.sh
#! /bin/sh
/usr/local/sbin/snmpd -LS0-6d -f
cat snmptrapd.sh
#! /bin/sh
/usr/local/sbin/snmptrapd -On -Lsd -f -c /etc/snmp/snmptrapd.conf
4、將snmpd.sh和snmptrapd.sh檔案放到snmp安裝目錄中
cp snmpd /usr/bin/snmp/sbin/
cp snmptrapd /usr/bin/snmp/sbin/
5、為服務執行檔案新增可執行許可權
chmod +x /usr/lib/systemd/system/snmpd.service
chmod +x /usr/lib/systemd/system/snmptrapd.service
6、設定為開機啟動
systemctl enable snmpd.service
systemctl enable snmptrapd.service
手動編譯安裝和解除安裝snmptt_1.4beta2
(這個版本其實是可以直接通過yum線上安裝的方式安裝,但線上安裝的時候會把原來安裝的net-snmp給覆蓋掉,所以這裡也採用手動編譯的方式進行安裝):
tar zxvf snmptt_1.4beta2.tgz
cd /root/snmptt_1.4beta2
cp snmptt /usr/sbin/
chmod +x /usr/sbin/snmptt
cp snmptthandler /usr/sbin/snmptthandler
chmod +x /usr/sbin/snmptthandler
cp snmptthandler-embedded /usr/sbin/snmptthandler-embedded ##只有嵌入模式可用,且須支援“perl PERLCODE”,執行“snmptrapd -H 2>&1 | grep perl.”命令後,有輸出就表示支援
chmod +x /usr/sbin/snmptthandler-embedded
cp snmptt.ini /etc/snmp/
cp examples/snmptt.conf.generic /etc/snmp/snmptt.conf
mkdir /var/log/snmptt/
修改以下行,standalone表示每次修改snmptt.ini配置後無需重啟snmptt服務,daemon模式每次修改配置後要重啟snmptt服務:
vi /etc/snmp/snmptt.ini
mode = standalone
如果snmptt配置為standalone模式,修改snmptrapd.conf如下:
vi /etc/snmp/snmptrapd.conf
修改以下行:
traphandle default /usr/sbin/snmptt
如果snmptt配置為daemon模式,修改snmptrapd.conf如下:
mode = daemon
vi /etc/snmp/snmptrapd.conf
traphandle default /usr/sbin/snmptthandler
mkdir /var/spool/snmptt/
chown -R snmptt:snmptt /var/spool/snmptt/
cp snmptt-init.d /etc/rc.d/init.d/snmptt
chkconfig --add snmptt
開啟服務自啟:
chkconfig --level 2345 snmptt on
手動開啟服務
service snmptt start或/etc/rc.d/init.d/snmptt start
snmptt --daemon
cp snmptt.logrotate /etc/logrotate.d/snmptt
如果服務啟動失敗,刪除以下檔案後再試試:
rm -f /var/run/snmptt.pid
檢視告警日誌:
tailf /var/log/snmptt/snmptt.log
tailf /var/log/snmptt/snmpttunknown.log
其他:
snmptrapd服務配置說明:
cat /etc/snmp/snmptrapd.conf
# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
# authCommunity log,execute,net public
# traphandle SNMPv2-MIB::coldStart /usr/bin/bin/my_great_script cold
authCommunity log,execute,net public
#traphandle default /usr/local/bin/conv_snmptrap_mb | /usr/sbin/snmptthandler ##daemon模式下使用
#traphandle default /usr/sbin/snmptthandler ##daemon模式下使用
#traphandle default /usr/sbin/snmptt --ini=/etc/snmp/snmptt.ini ##standalone模式下使用
perl do "/usr/sbin/snmptthandler-embedded"; ##daemon模式下使用,注意這一行後面有個分號
disableAuthorization yes
官方conv_snmptrap_mb檔案使用方法說明:
# cp -p conv_snmptrap_mb /usr/local/bin/.
# chmod a+x /usr/local/bin/conv_snmptrap_mb
編輯/etc/snmp/snmptrapd.conf
disableAuthorization yes
traphandle 1.3.6.1.4.1.311.* /usr/local/bin/conv_snmptrap_mb | iconv -f cp932 | /usr/sbin/snmptthandler
traphandle 1.3.6.1.4.1.6876.* /usr/local/bin/conv_snmptrap_mb | /usr/sbin/snmptthandler
traphandle default /usr/sbin/snmptthandler
conv_snmptrap_mb檔案下載地址:點選下載