суббота, 13 июня 2015 г.

Установка в CentOS 6.5 из исходных кодов SNMP и SNMPTT в режиме Embedded handler

Установка в данном режиме SNMPTT необходима для увеличения быстродействия и производительности системы.

1. Обновляем систему и ставим общие пакет для комфортной работы и которые потребуются для сборки пакетов из исходных кодов
# yum update
# yum install wget nano net-tools unzip mc
# yum -y install perl-CPAN
# yum install gcc*
# yum install binutils*

2. Отключаем SELinux, iptables и перезагружаемся.
#nano /etc/sysconfig/selinux
Комментируем все, вставляем строчку
SELINUX=disabled
# nano /etc/sysconfig/iptables
Комментируем все строчки, определяющие правила
# reboot

3. Копируем на машину исходные коды, скачанные с официальных сайтов
net-snmp-5.7.3.zip (http://net-snmp.sourceforge.net/ ) и 
snmptt_1.4.tgz (http://snmptt.sourceforge.net/ )

4. Распаковываем архивы
# unzip net-snmp-5.7.3.zip
# tar -zxvf snmptt_1.4.tgz

5. Собираем и устанавливаем NET-SNMP
# cd net-snmp-5.7.3
Устанавливаем дополнительные пакеты PERL, которые нужны для работы NET-SNMP
# perl -MCPAN -e 'install Net::SNMP'
В появляющихся вопросах – соглашаемся со всем нажатием ENTER
Затем необходим еще один модуль PERL
# yum install perl-ExtUtils-Embed
Запускаем конфигуратор из папки с исходными кодами:
# ./configure --enable-embedded-perl --enable-shared
Запуститься диалог. Отвечаем на опросы так (показано красным):
Default version of SNMP to use (3): 2 / будем работать со 2ой версией /
System Contact Information (@@no.where): tech@yandex.ru / указываем e-mail /
System Location (Unknown): Samara / место расположения / 
Location to write logfile (/var/log/snmpd.log): /соглашаемся, нажав ENTER /
Location to write persistent information (/var/net-snmp): /соглашаемся, нажав ENTER /
Затем
# make
# make install

6. Запускаем демон SNMPD
Перед запуском snmpd создаем индивидуальный файл конфигурации
# mkdir /etc/snmp
# touch /etc/snmp/snmpd.conf
# nano /etc/snmp/snmpd.conf
rocommunity  public
syslocation  "Samara"
syscontact  tech@yandex.ru
Запуск snmpd
# /usr/local/sbin/snmpd -c /etc/snmp/snmpd.conf

7. Запускаем демон SNMPTRAPD
Создаем и правим файл конфигурации демона SNMPTRAP.
# touch /etc/snmp/snmptrapd.conf
# nano /etc/snmp/snmptrapd.conf
Вписываем в файл:
authCommunity   log,execute,net public
disableAuthorization yes
[snmp] logoption f /var/log/snmptrap.log 
(последнюю строчку закомментируем после отладки)
Стартуем демон snmptrapd
# /usr/local/sbin/snmptrapd -c /etc/snmp/snmptrapd.conf

8. Проверяем, что демоны SNMPD и SNMPTRAPD запустились и порты активны и заняты правильными службами
# ps ax | grep snmp
19965 ?        S      0:00 /usr/local/sbin/snmpd -c /etc/snmp/snmpd.conf
19971 ?        Ss     0:00 /usr/local/sbin/snmptrapd -c /etc/snmp/snmptrapd.conf
19973 pts/0    S+     0:00 grep snmp
# netstat -ltupn | grep snmp
udp        0      0 0.0.0.0:161             0.0.0.0:*                           28877/snmpd
udp        0      0 0.0.0.0:162             0.0.0.0:*                           28889/snmptrapd
Проверяем прием трапов командой, генерирующий трап о падении порта:
# snmptrap -v 1 -c public  127.0.0.1 '.1.3.6.1.2.1.2.2.1.8.1' '10.200.72.43'  3 0 '557' .1.3.6.1.2.1.2.2.1.8.1 i 2
В файле /var/log/snmptrap.log должен отобразиться принятый трап.
Проверяем работу запросов snmp
# snmpwalk -v 2c -c public 192.168.1.222 IF-MIB::ifAdminStatus
В ответ должны получить информацию по статусам интерфейсов.

9. Проверяем, как установлен пакет NET-SNMP. Пригоден ли он для работы с SNMPTT в режиме Embedded handler
# snmptrapd -H 2>&1 | grep perl
    perl                     PERLCODE
    perlInitFile             string
Наличие первой строки сообщает, что требуемая поддержка имеется и возможно использование встроенного обработчика помимо стандартного обработчика трапов.

10. Устанавливаем пакеты необходимые для работы SNMPTT
# perl -MCPAN -e 'install Sys::Syslog' 
# perl -MCPAN -e 'install Perl::OSType'
# perl -MCPAN -e 'install Module::Build'
# perl -MCPAN -e 'install Config::IniFiles'
(если система будет задавать вопросы – соглашаемся со всем, нажимая ENTER)

11. Устанавливаем SNMPTT
# cd snmptt_1.4
# cp snmptt /usr/local/sbin/
# chmod +x /usr/local/sbin/snmptt
# cp snmptthandler-embedded /usr/local/sbin/
# chmod +x /usr/local/sbin/snmptthandler-embedded
# cp snmptt.ini /usr/local/sbin/
В файле настроек snmptt.ini правим некоторые строки
# nano /usr/local/sbin/snmptt.ini
mode = daemon
net_snmp_perl_enable = 1
log_system_enable = 1 (включаем логирование ошибок)
date_time_format = %H:%M:%S %Y/%m/%d
Делаем символьную ссылку на файл конфигурации snmptt.ini
# ln -s /usr/local/sbin/snmptt.ini /etc/snmp/snmptt.ini
Определяем правило ротации логов:
# cp snmptt.logrotate /etc/logrotate.d/snmptt
Файл правил обработки SNMP трапов у SNMPTT - examples/snmptt.conf.generic. С файлом нужно ознакомиться и понять его формат. Затем создаем файл своих правил:
# touch /usr/local/sbin/snmptt.conf
Правим файл:
# nano /usr/local/sbin/snmptt.conf
Вписываем в файл для примера:
EVENT SamaraAlarm .1.* "all" Normal
FORMAT $+* TEST $aA $1
Делаем символьную ссылку на файл конфигурации snmptt.conf
# ln -s /usr/local/sbin/snmptt.conf /etc/snmp/snmptt.conf
Создать каталоги, необходимые для работы SNMPTT
# mkdir /var/log/snmptt/
# mkdir /var/spool/snmptt/
Создать файл логов
# touch /var/log/snmptt/snmptt.log
# chmod 777 /var/log/snmptt/snmptt.log

12. Связываем SNMPTRAPD и SNMPTT
Вносим изменения в файл snmptrapd.conf
# nano /etc/snmp/snmptrapd.conf
Дописываем в конец
perl do "/usr/local/sbin/snmptthandler-embedded"; 
(Cтрока включает встроенный обработчик транслирующий трапы)
(Если вдруг есть такая строчка traphandle default /usr/sbin/snmptthandler – удаляем ее)
(Строчку [snmp] logoption f /var/log/snmptrap.log тоже можно удалить или закомментировать, что бы не собирались лишние логи)
Останавливаем демон SNMPTRAPD. Например с помощью Kill.
Теперь запускаем SNMPTRAPD вот так:
# /usr/local/sbin/snmptrapd -On -c /etc/snmp/snmptrapd.conf
После запуска snmptrap будет предупреждение
Loaded the SNMPTT embedded snmptrapd handler
Значит, все верно запущено – SNMPTRAPD будет работать с SNMPTT в Embedded handler режиме.

13. Запускаем SNMPTT
# /usr/bin/perl /usr/local/sbin/snmptt --ini=/usr/local/sbin/snmptt.ini
первый запуск может выдать предупреждение
There seems to be another SNMPTT process (pid 4849) running.
You may want to kill it and delete the .pid file (/var/run/snmptt.pid).  Aborting...
Exiting at /usr/local/sbin/snmptt line 671.
В процессах должно появится два запущенных процесса SNMPTT
# ps ax | grep snmptt
 5914 ?        Ss     0:00 /usr/bin/perl /usr/local/sbin/snmptt --ini=/usr/local/sbin/snmptt.ini
 5915 ?        Ss     0:00 /usr/bin/perl /usr/local/sbin/snmptt --ini=/usr/local/sbin/snmptt.ini

ИТОГ. Все установлено и запущено.
Для дальнейшего запуска демона использовать:
# /usr/local/sbin/snmpd -c /etc/snmp/snmpd.conf
# /usr/local/sbin/snmptrapd -On -c /etc/snmp/snmptrapd.conf
# /usr/bin/perl /usr/local/sbin/snmptt --ini=/usr/local/sbin/snmptt.ini

====================================================================
Примечание, если что-то идет не так и в логах SNMPTT (файл /var/log/snmptt/snmptt.log) ничего не сыплеться, то можно включить режим отладки в файле snmptt.ini
# nano /usr/local/sbin/snmptt.ini
[Debugging]
# 0 - do not output messages
# 1 - output some basic messages
# 2 - out all messages
DEBUGGING = 2 /установить 2 вместо 0/

# Debugging file - SNMPTT
# Location of debugging output file.  Leave blank to default to STDOUT (good for
# standalone mode, or daemon mode without forking)
DEBUGGING_FILE =
DEBUGGING_FILE = /var/log/snmptt/snmptt.debug /раскомментировать строку/
Теперь при посылке трапа:
# snmptrap -v 1 -c public  127.0.0.1 '.1.3.6.1.2.1.2.2.1.8.1' '10.200.72.45'  3 0 '557' .1.3.6.1.2.1.2.2.1.8.1 i 2
В файле /var/log/snmptt/snmptt.log должна появиться запись:
09:45:09 2015/05/24 .1.3.6.1.6.3.1.1.5.4 Normal "all" 10.200.72.45 - ifOperStatus.1:down TEST 10.200.72.45 down

Комментариев нет:

Отправить комментарий