пятница, 26 сентября 2014 г.

Настройка конфигурационных файлов snmptt

При установке snmptt предлагается некий конфигурационный файл  snmptt.conf.generic в качестве примера.

Рассмотрим фрагмент этого файла:

EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT Link down on interface $1.  Admin state: $2.  Operational state: $3
#EXEC qpage -f TRAP notifygroup1 "Link down on interface $1.  Admin state: $2.  Operational state: $3"
SDESC
A linkDown trap signifies that the SNMP entity, acting in
an agent role, has detected that the ifOperStatus object for
one of its communication links is about to enter the down
state from some other state (but not from the notPresent
state).  This other state is indicated by the included value
of ifOperStatus.
EDESC

В первой строке указывается цифровой OID и его статус.
Вторая строка описывает содержимое сообщения трапа и в большинстве случаев помогает понять, что за переменные оно содержит.
В третьей строке мы должны указать действие которое необходимо выполнить при получении это трапа. 
Между стартовым тегом SDESC и тегом закрытия EDESC содержится некое описание.

Для создания конкретных конфигурационных файлов существует утилита входящая в пакет snmptt: snmpttconvertmib.
Для начальных данных этой утилите нужен MIB файл (или набор файлов) для оборудования от которого планируется получать трапы:
# snmpttconvertmib --in=path-to-mib --out=output-file-name

если установлен модуль perl NET-SNMP (пакет net-snmp-perl), то можно использовать дополнительно опцию -net_snmp_perl и в файле на выходе переменные будут описаны более подробно, например:

# snmpttconvertmib --in=/usr/share/snmp/mibs/UPS-MIB.txt --out=snmptt.conf.apc
# snmpttconvertmib --in=/usr/share/snmp/mibs/UPS-MIB.txt --out=snmptt.conf.apc2 -net_snmp_perl

первое событие в файле snmptt.conf.apc описано так:
EVENT upsTrapOnBattery .1.3.6.1.2.1.33.2.1 "Status Events" Normal
FORMAT The UPS is operating on battery power.  This trap is $*
SDESC
The UPS is operating on battery power.  This trap is
persistent and is resent at one minute intervals until
the UPS either turns off or is no longer running on
battery.
Variables:
  1: upsEstimatedMinutesRemaining
  2: upsSecondsOnBattery
  3: upsConfigLowBattTime
EDESC

в случае использования дополнительной опции -net_snmp_perl первое событие в файле snmptt.conf.apc2 уже описано так:
EVENT upsTrapOnBattery .1.3.6.1.2.1.33.2.1 "Status Events" Normal
FORMAT The UPS is operating on battery power.  This trap is $*
SDESC
The UPS is operating on battery power.  This trap is
persistent and is resent at one minute intervals until
the UPS either turns off or is no longer running on
battery.
Variables:
  1: upsEstimatedMinutesRemaining
     Syntax="INTEGER"
     Descr="An estimate of the time to battery charge depletion
            under the present load conditions if the utility power
            is off and remains off, or if it were to be lost and
            remain off."
  2: upsSecondsOnBattery
     Syntax="INTEGER"
     Descr="If the unit is on battery power, the elapsed time
            since the UPS last switched to battery power, or the
            time since the network management subsystem was last
            restarted, whichever is less.  Zero shall be returned
            if the unit is not on battery power."
  3: upsConfigLowBattTime
     Syntax="INTEGER"
     Descr="The value of upsEstimatedMinutesRemaining at which a
            lowBattery condition is declared.  For agents which
            support only discrete (discontinuous) values, then the
            agent shall round up to the next supported value.  If
            the requested value is larger than the largest
            supported value, then the largest supported value
            shall be selected."
EDESC

Второй вариант даёт более ясное представление о переменных, их содержании и взаимосвязях.

Утилита snmpttconvertmib умеет формировать и добавлять строку с определением EXEC, в которой указывается действие, выполняемое при получении этого трапа. Для этого используется опция --exec=command, где command строка заключенная в одиночные кавычки. К строке указаной в качестве command добавляется содержимое строки с опрелением FORMAT, заключённое в двойные ковычки:
# snmptt_1.4/snmpttconvertmib --in=/usr/share/snmp/mibs/UPS-MIB.txt --out=snmptt.conf.apc -net_snmp_perl --exec='/usr/local/icinga/libexec/eventhandlers/submit_check_result $r TRAP 1'

событие сформируется следующим образом:
EVENT upsTrapOnBattery .1.3.6.1.2.1.33.2.1 "Status Events" Normal
FORMAT The UPS is operating on battery power.  This trap is $*
EXEC /usr/local/icinga/libexec/eventhandlers/submit_check_result $r TRAP 1 "The UPS is operating on battery power.  This trap is $*"

в большинстве случаев это очень удобно. В случае возникновения необходимости всегда можно откорректировать содержимое строки выполнения.

Также никто не мешает написать конфигурационный файл самостоятельно. Рассмотрим, например, файл в котором описаны действия, выполняемые в случае получения трапа о изменении статуса порта от оборудования Cisco:
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT Port name: $2 Status: $4
EXEC /usr/local/icinga/libexec/eventhandlers/submit_check_result $r "Port $2" 2 "Аварийный режим"

EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
FORMAT Port name: $2 Status: $4
EXEC /usr/local/icinga/libexec/eventhandlers/submit_check_result $r "Port $2" 0 "В работе"

Разберём первое событие построчно.
Первая строка:
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal 

начинается с определения EVENT, далее следуют:
- наименование события, в данном случае linkDown, уникальная текстовая метка (алиас) не должна содержать пробелы;
- OID события, в данном случае .1.3.6.1.6.3.1.1.5.3, в цифровом виде, можно использовать и символьный вариант. Допустимо использование шаблонов поиска, например, .1.3.6.1.6.3.1.1.5.*, но при этом необходимо учитывать, что OID'ы будут обрабатываться в порядке их перечисления;
- категория, в данном случае "Status Events", символьная строка заключенная в двойные кавычки, используется для логирования. Если указать категорию "IGNORE", то никаких действий по выполнению определений EXEC и FORMAT не будет выполнено. Также существует категория "LOGONLY", которая отключает выполнение определения EXEC, но логирование осуществляется;
- уровень статуса, в данном случае Normal, символьная строка указывающая статус, например, Minor, Major, Normal, Critical, Warning, используется для логирования. Можно связать с уровнями syslog'а (см. snmptt.ini, опции syslog_level_*).

Вторая строка:
FORMAT Port name: $2 Status: $4

начинается с определения FORMAT за которым следует строка генерирующая текст при логировании. У каждого события может быть только одна строка с определением FORMAT.
Для генерации возможно использование следующих переменных:

$A - имя узла агента;
$aA - IP адрес агента;
$Be - securityEngineID (snmpEngineID) (доступно только при использовании встроенного обработчика);
$Bu - securityName (snmpCommunitySecurityName) (доступно только при использовании встроенного обработчика);
$BE - contextEngineID (snmpCommunityContextEngineID) (доступно только при использовании встроенного обработчика);
$Bn - contextName (snmpCommunityContextName) (доступно только при использовании встроенного обработчика);
$c - категория;
$C - общая строка (community string);
$D - текстовое описание их snmptt.conf или MIB файла (см. опцию description_mode в snmptt.ini);
$E - OID трапа в символьном виде;
$e - OID трапа в числовом виде;
$Fa - звуковой сигнал (bell) (BEL);
$Ff - прогон страницы, новая страница (FF);
$Fn -  перевод строки (LF, NL);
$Fr - перевод каретки (CR);
$Ft - символ горизонтальной табуляции (HT, TAB);
$Fz - транслированная строка FROMAT (работает только в опредлении EXEC);
$G - номер общего трапа (generic trap, 0 в случае enterprise trap);
$H - имя узла на котором запущен snmptt;
$S - номер особого трапа (specific trap, 0 в случае enterprise trap);
$N - имя события, которое определено в .conf файле
$i - OID события (может быть шаблонным);
$O - OID трапа в символьном формате (необходимо включить опцию translate_trap_oid_format в snmptt.ini, также требуются установленный модуль Perl Net-SNMP и его включённая поддержка - опция net_snmp_perl_enable в snmptt.ini);
$o - OID трапа в числовом формате;
$R, $r - имя узла отправившего трап;
$aR, $ar - IP адрес узла отправившего трап;
$s - уровень статуса (указанный определение EVENT);
$T - Uptime: время прошедшее после инициализации сетевого объекта;
$X -  время попадания трапа в очередь обработки (в случае режима daemon) или текущее время (в случае режима standalone);
$x - дата попадания трапа в очередь обработки (в случае режима daemon) или текущее время (в случае режима standalone);
$# - количество переменных, которые передаются в трапе;
$$ - печатает символ $;
$@ - количество секунд прошедших от начала времён (01.01.1970 г.) до момента попадания трапа в очередь обработки (в случае режима daemon) или текущее время (в случае режима standalone);
$n - выводит значение переменной n;
$+n - выполняет подстановку переменной n в виде:  имя переменной:значение;
$-n -  выполняет подстановку переменной n в виде:  имя переменной (тип переменной):значение;
$vn - выводит имя переменной n;
$* - выводит значение всех переменных n;
$+* - тоже самое, что и $+n только делает подстановку для всех переменных;
$-* - тоже самое, что и $-n только делает подстановку для всех переменных.

Для работы с переменными которые выполняют подстановку n-перемененных, необходимо учитывать, что нумерация начинается с 1 и требуется настройка следующих опций в snmptt.ini:
  • net_snmp_perl_enable (и конечно же установленный модуль Perl Net-SNMP);
  • translate_* (по умолчанию все необходимые опции включены);
  • mibs_enviroment = ALL (или настройка файла snmp.conf).
Таким образом рассматриваемая строка будет генерировать собщение:

Port name: $2 Status: $4

в котором будет выполнена соответствующая подстановка переменных $2 и $4 их значениями, именем порта и его статусом.

Третья строка:
EXEC /usr/local/icinga/libexec/eventhandlers/submit_check_result $r "Port $2" 2 "Аварийный режим"

начинается с определения  EXEC за которым следует комадная строка. В данном случае текст "Аварийный режим" заключенный в двойные кавычки, передаётся обработчику событий системы мониторинга Icinga, которому также необходимо передать имя узла, имя сервиса и код статуса.
У каждого события может быть несколько строк с определением EXEC, соответственно можно можно выполнить несколько действий при получении одного трапа. В командной строке можно использовать те же переменные, что и в строке определения FORMAT.

Также в конфигурации трансляции трапа можно использовать определения: PREEXEC, NODES, MATCH, REGEX и конечно же SDESC и EDESC. Пара последних опрледелений используется для открытия возможного описания и его закрытия. Описание остальных определений можно найти в официальной документации.

В рассматриваемом примере используется обработчик событий поставляемый системой мониторинга Icinga, но можно использовать любой обработчик, в некоторых случаях возможно и придётся написать его самостоятельно.

Итак, достаточная настройка конфигурации обработки трапов для её применения в связке с системой мониторинга Icinga рассмотрена. Получено представление о наборе скриптов SNMPTT, о его огромных возможностях, в принципе, если оборудования подлежащее мониторингу удастся настроить на необходимое качество трапов, то на базе SNMPTT можно создать полноценную систему мониторинга, дополнив её своими или сторонними обработчиками событий.

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

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